day11 进阶函数模块
- 函数参数补充
- 函数名意义
- 返回值和return
- 函数的作用域
函数参数补充
查看内存地址
- id()
>>> v1.append(4) >>> v1 [1, 2, 3, 4] >>> v2 [1, 2, 3, 4]
函数参数地址引用
函数修改原始数据,不采用其他编程语言深度拷贝
python传参的类型是内存地址
- 节省内存
- 可操控原始内部数据
- 限制为可变类型(dict,list,set)
a = [1,2,3] def list_append(object1): object1.append(666) list_append(a)引用copy函数,不修改原始内存地址
import copy a = [1,2,3,4,5] b = copy.deepcopy(a) def list_append(object1): object1.append(666) list_append(b)
函数参数地址返回
- 引用计数器
data与v1指向同一块地址,被引用计数器保存
def adr_count():
data = [1,2,3,4,5]
print(id(data))
return data
v1 = adr_count()
print(id(v1))- 函数执行完毕后,变量会从内存中删除
- 函数中可变类型再次引用产生新地址,字符串等不会(因为垃圾回收机制和缓存)
def adr_count():
data = [1,2,3,4,5]
print(id(data))
return data
v1 = adr_count()
print(v1,id(v1))
v2 = adr_count()
print(v2,id(v2))默认参数补充
默认参数会创建一个值以供取用
- 可变类型参数地址,不会随着函数执行完毕而消失
def func_show(a,b=[1,2]): b.append(666) print(b) print(id(b)) func_show(2) func_show(3)- 预创建值会被后续的使用默认参数继续调用
def func_self_plus(a,a2=[1,2]): a2.append(a) print(id(a2)) return a2 v1 = func_self_plus(1) v2 = func_self_plus(2) v3 = func_self_plus(3) v4 = func_self_plus(4,[2,3]) print(v1,v2,v3,v4)
动态参数补充
顺序,默认,动态(元组,字典)
固定函数传参
单一
- 顺序传参
- 关键字传参
打包
动态函数传参
- 元组
字典
def a_p_b(a,b): print(a,b) a_p_b(*[1,2]) a_p_b(**{'a':1,'b':2})
动态函数传参
单一传参
dynamic_func(1,2,3) dynamic_func('name':'alex1','age':23)打包传参
def dynamic_func(*args,**kwargs): print(args,kwargs) #给动态函数传递打包 #单一 dynamic_func(1,2,3) #打包传参 dynamic_func(*[1,2,3]) dynamic_func(**{'name':'alex','age':23})def format(*args,**kwargs): pass v1 = '我是{},我的年龄是{}'.format(*['alex',23]) v2 = '我是{name},我的年龄是{age}'.format(**{'name':'alex','age':23})
动态参数练习题
创建函数根据csv文件下载视频并写入文件
模仿,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f570000bvbmace0gvch7lo53oog&ratio=720p&line=0
卡特,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f3e0000bv52fpn5t6p007e34q1g&ratio=720p&line=0
罗斯,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f240000buuer5aa4tij4gv6ajqg&ratio=720p&line=0根据路径
#创建函数,读取文件,分割获取名称和链接,下载链接,以获取名称为名字打开文件,将下载内容放入
#import requests
# def down_video_func(csv_path):
# #获取文件名字和链接
# name_link_list = []
# with open(csv_path, 'r') as f:
# for line in f:
# data = line.split(',')
# name_link_list.append(data)
#
# #循环列表下载链接
# for k,v in name_link_list:
# #下载链接
# down_content = requests.get(
# url = v,
# headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36'}
# ).content
#
# #创建文件
# with open(f'{k}.mp4', 'wb') as f:
# f.write(down_content)
#
# down_video_func('1.csv')根据字典
#创建下载字典
down_dict = {}
with open('1.csv',mode = 'r',encoding='utf8') as f:
for line in f:
data = line.split(',')
down_dict[data[0]] = data[1]
def down_video_fun(*args,**kwargs):
#循环获取名称和下载链接
for k,v in kwargs.items():
#下载链接
down_content = requests.get(url = v,
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36'}
).content
#创建下载视频文件
with open(f'{k}.mp4','wb') as f:
f.write(down_content)
down_video_fun(**down_dict)创建下载函数
#创建下载函数
def downlaod_video(name,link):
data = requests.get(link,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36'}).content
with open(f'{name}.mp4','wb') as f:
f.write(data)
#打开csv文件
with open('1.csv',mode='r',encoding='utf-8') as f:
#循环获取name和link
for line in f:
data = line.strip()
data = data.split(',')
downlaod_video(data[0],data[1])