Python学习记录 函数基础


2022.08.08 DAY23

1. 函数的用法和底层分析

1. 参数的传递
  • Python中参数的传递都是“引用传递”。

  • 具体操作可分为两类:

    • 对“可变对象”进行“写操作”,直接作用域原对象本身。
    • 对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填充这块空间。
  • 可变对象有:

    • 字典、列表、集合、自定义对象等
  • 不可变对象有:

    • 数字、字符串、元组、function等
2.传递不可变对象的引用
  • 传递参数是不可变对象,实际传递还是对象的引用。在“复制操作”中,由于不可变对象无法修改,系统会新创建一个对象。
3. 浅拷贝与深拷贝
  • 内置函数copy(浅拷贝)、deepcopy(深拷贝)
  • 浅拷贝:不拷贝子对象的内容,只拷贝子对象的引用。
  • 深拷贝:会连子对象的内容全部拷贝一份,对子对象的修改不会影响源对象。

浅拷贝示例代码:

import copy

a_list = [20, 50, [5, 6]]
b_list = copy.copy(a_list)

def test():
    print("a : ", a_list)
    print("b : ", b_list)

    b_list.append(100)
    b_list[2].append(200)
    print("浅拷贝...")
    print("a : ", a_list)
    print("b : ", b_list)


if __name__ == '__main__':
    test()

运行结果:

    a :  [20, 50, [5, 6]]
    b :  [20, 50, [5, 6]]
    浅拷贝...
    a :  [20, 50, [5, 6, 200]]
    b :  [20, 50, [5, 6, 200], 100]

深拷贝示例代码:

import copy

def test_deepcopy():
    a_list = [20, 50, [5, 6]]
    b_list = copy.deepcopy(a_list)

    print("a : ", a_list)
    print("b : ", b_list)

    b_list.append(100)
    b_list[2].append(200)
    print("深拷贝...")
    print("a : ", a_list)
    print("b : ", b_list)


if __name__ == '__main__':
    test_deepcopy()

运行结果:

a :  [20, 50, [5, 6]]
b :  [20, 50, [5, 6]]
深拷贝...
a :  [20, 50, [5, 6]]
b :  [20, 50, [5, 6, 200], 100]
3.不可变对象含可变子对象
  • 传递不可变对象(数字、字符串、元组、function)时,不可变对象里包含的子对象是可变的,则方法内修改了这个可变对象,源对象也发生了变化。
4.参数的几种类型
  • 位置参数

    • 函数调用时,实参默认按照顺序传递,需要个数和形参匹配。
  • 默认值参数

    • 参数设置默认值,这样的参数在传递时就是可选的。
    • 默认值参数放在位置参数的后面。
  • 命名参数

    • 可以按照形参的名称传递参数。
  • 可变参数

    • 可变数量的参数
    • *param 将多个参数收集到一个“元组”对象中。
    • **param 将多个参数收集到一个“字典”对象中。
  • 强制命名参数

    • 可变参数后面新增新的参数,必须是“强制命名参数”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值