python学习手册(第4版) 第十八章 参数

此章讲述的是参数传递的概念。

1.函数参数:调用者发送的共享对象引用值。

2.因为引用是以指针的形式实现的,所有的参数实际上都是以指针的形式进行传递。

3.作为参数进行传递的对象从不自动拷贝。

 

如下例子,

>>> x = 3
>>> def func(x):
...     x = 5
...
>>> func(x)
>>> x                                                   # 不可变对象无法改变,函数内的传参是对象的引用,但作用域只限于本地作用域
3
>>> li = [1,2,3]
>>> def func2(x):
...     x[0] = 0
...
>>> func2(li)
>>> li                                               #可变对象会被改变,因为函数内传参是对象的引用。
[0, 2, 3]

 

上述关于函数参数的传递,和赋值一样,如下,

>>> a = 1
>>> b = a
>>> b = 2
>>> a
1
>>> li = [1,2,3]
>>> li2 = li
>>> li2[0] = 0
>>> li
[0, 2, 3]
>>>

 

函数参数匹配表:

 

默认参数和关键字参数较为简单,不详细展开,仅截图,如下,

 

 

任意参数的示例,

>>> def f(*args):print(args)
...
>>> f()
()                                                   # 这是一个元组,传参用了一个" * "
>>> f(1,2,3)                           # 收集参数
(1, 2, 3)
>>>

>>> li = (1,2,3,4)
>>> f(*li)                                 # 解包参数
(1, 2, 3, 4)

 

>>> def f2(**kwargs):print(kwargs)
...
>>> f2()
{}                                                 # 这是一个字典,传参用了两个" * "
>>> f2(a=1,b=2,c=3)               # 收集参数
{'a': 1, 'b': 2, 'c': 3}
>>>

>>> d = {'a':1,'d':4}
>>> f2(**d)                               # 解包参数
{'a': 1, 'd': 4}

 

keyword-only传参,示例如下,

>>> def f3(a,*b,c):print(a,b,c)                          # 当参数在带*参数之后时,传参必须带关键字,否则报错
...
>>> f3(1,c=2)
1 () 2
>>> f3(1,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f3() missing 1 required keyword-only argument: 'c'
>>>

 

>>> def f4(a,**b,c):print(a,b,c)                # keyword-only参数不能出现在带两个*参数之后,否则报语法错误
  File "<stdin>", line 1
    def f4(a,**b,c):print(a,b,c)
                 ^
SyntaxError: invalid syntax
>>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值