python 学习笔记【一】

python学习笔记

写在前面:本篇文章内容只是当前阶段的理解, 不做任何准确性的保证。

赋值表达式与函数传参

python的赋值表达式没有返回值

a =  (b = 10)
  • 该表达式将报错

python以赋值表达式进行函数传参时,左值必须是函数的一个形参

def calc(a, b):
	print(a)
	print(b)
	print(a+b)

calc(10, 20)
# output:
# 10
# 20
# 30

calc(b=10, a=20)
# output:
# 20
# 10
# 30
  • 由上例可知,以赋值表达式传参时,不以顺序进行识别,而以形参标识符进行识别
calc(10, a=20)
  • 若以此形式传参,则报TypeError: calc() got multiple values for argument 'a'错误

变量id与参数传递

  • python中变量创建时会有一个id(相当于c的内存地址)
  • python中数据类型分为不可变类型与可变类型:
    • 不可变类型:Number, String, Tuple
    • 可变类型:List, Dictionary, Set
  • python中不可变数据类型有驻留机制:
    • 变量创建时得到的id,可以理解为对应数据类型存储的内存地址
    123
    
    a = 123
    print(id(a))
    
      - 此时的输出结果即为系统为整数123分配的内存地址
    
    a = 123
    b = 123
    print(id(a))
    print(id(b))
    
      - 此时输出的a与b的id相同,都是系统为整数123分配的内存地址
    
    a = 123
    b = 123
    print(id(a))
    print(id(b))
    a = 234
    print(id(a))
    
      - 此时最后a的id改变,事实上变为了系统为整数234分配的内存地址
    
  • 可变数据类型没有驻留机制
    a = [1, 2, 3]
    b = [1, 2, 3]
    print(id(a))
    print(id(b))
    
    • 此时输出的a与b的id不同
  • 函数参数传递时,所有形参id都为对应实参id,即可变数据类型都可对实参本身进行修改,而不可变数据类型在重新赋值后,都将变为新的数据的id。

必需参数&默认值参数,位置参数&关键字参数

  • 所谓必需参数与默认值参数,是对形参而言的,即形参列表中,有默认值的即为默认值参数,在传参时,如果不为其传值,则其使用默认值;无默认值的则为必需参数,在传参时,必须为其传值
  • 位置参数与关键字参数,是对实参而言的,传参时以值传递的实参为位置参数,以赋值表达式传递的实参为关键字参数
    • 形参列表中*a,代表此处可传递个数可变的位置参数,其后不能再出现其它必需参数,在函数体内,变量a为元组
    • 形参列表中**a,代表此处可传递个数可变的关键字参数,其后不能再出现其它形参,在函数体内,变量a为字典
    def test(*args, **kwargs):
    	print(args)
    	print(kwargs)
    
    test(10, a=10, b=10.)
    # output:
    # (10,)
    # {'a': 10, 'b': 10.0}
    
    • 形参列表中,*可以单独出现,若出现*号,则其后传入必须为关键字参数
    def test(a, b, *, c):
    	print(a)
    	print(b)
    	print(c)
    
    # test(10, 20, 30, 40, 50, c=60) 将报错
    test(10, 20, c = 30)
    # output:
    # 10
    # 20
    # 30
    
    • 形参列表中,若出现/号,则其前面的实参必须使用位置参数(python3.8新特性)
    def test(a, b=10, /, *, c):
    print(a)
    print(b)
    print(c)
    
    test(10,  c=30)
    # output:
    # 10
    # 10
    # 30
    
    test(10, 20, c=30)
    # output:
    # 10
    # 20
    # 30
    
    • /*之间的实参,既可以是位置参数,也可以是关键字参数
    • 形参列表中,在*之前,默认值参数后面不能有必需参数
    • 在传递实参时,*将序列中的每个元素转换为位置参数,**将字典中的每个键值对转换为关键字参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值