Python 进阶函数-1 | 函数引用,默认参数,动态参数以及应用

2025-07-17T01:40:00

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])
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »