函数
函数的参数
1, 位置参数
比如:
Powe (x)函数,参数 x 位一个位置参数。
当我们调用 power 的时候,必须传入有且仅有的一个参数 x:
>>> power(5)
25
如果需要x3、x5、我们不可能定义无限多个函数
我们可以这样做
def power(x,n)
s = 1
while n > 0
n = n -1
S = s * x
return = s
对于修改过的 power (x, n)函数,可以任意次n方:
>>> power(5,2)
25
修改后的的函数有两个位置参数;x 和 n ,这两个参数都是位置参数,调用参数时,传入两个值按照位置顺序一次赋予给 参数 x 和 n
2, 默认参数
当 新的 power(x,n) 函数定义没有问题,但是, 旧的代码失败了,原因是我们增加了一个函数,所以导致旧的代码无法正常调用
因为少了以一个位置参数
如何解决?
由于我们可以将经常使用的 x2, 所以可以完全把第二个参数 n 的默认值 设定为 2:
def power(x,n=2)
s=1
while n>0
n=n-1
s=s*x
return s
这样我们就可以在使用 power(5)时相当于 power(5,2)
而其他的情况,就必须明确地传入 n 比如 power(5,4)
默认参数可以简化函数的调用, 设置默认函数需要注意的问题:
1, 必选参数在前,默认参数在后 否则 python 解释器会报错
2, 如何设置 默认参数?
当函数有多个参数时, 把变化大的函数放在前面, 变化小的函数放在后面。变化小的函数就可以作为默认 参数默认参数的好处:可以降低调用函数的难度。
3,可变参数
指传入的参数 可以是一个也可以任意个,也可以是零个
比如:一组数字a b c d….计算 a2 + b2 + c2 + …
需要定义这个参数必须输入参数。由于参数个数不确定, 我们首先可以想到吧 这些数字 作为一个 list 或者 tuple 传进来 如下:
Der calc(number):
sum=0
for n in numbers:
sum=sum+n*n
return sum
但是在调用之前必须组装一个 list 或者 tuple
>>> calc(1,2,3,)
14
>>> calc(1,3,5,7)
84
所以我们可以将参数改为可变参数
Der calc(*number):
sum=0
for n in numbers:
sum=sum+n*n
return sum
定义可变参数定义的一个 llist 或者 tuple 参数相仅仅在参数前面加了一个 * 符号。在函数内部,参数 number s接收到的是一个 tuple 因此,函数代码完全不变。但是调用该函数时,可以闯入任意个参数,包括零个参数
如果已经有一个 list 或者 tuple ,要调用一个可变的参数怎么办?可以这样:
>>>nuns=[1,2,3]
>>>calc(nums[0],nums[1],nums[2])
14
这样的方法可行但是 太繁琐,所以 python 允许你在 list 或者 tuple 前面几一个 *, 将list 或者 tuple 的元素 变 可变参数穿进去:
>>>nums=[1,2,3]
>> calc(*nums)
14
4, 关键字参数
可变参数允许你传入 0 个或者 任意和参数, 这些参数在函数用时自动组位一个 tuple , 而关键字参数允许你传入 0 个或者任意个含参数名的参数, 这些关键字参数在函数内部自动组装位一个 dict。
def person(name,age,**kw)
print(‘name:’,name,‘age:’age,‘other:’,kw)
函数 person 处除了必选参数 name 和 age 之外,还接受关键字参数 kw。 在调用必选参数,也可以传只入必选参数;也可以只传入任意个数的关键字参数;
关键字的作用:
可以拓展函数的功能。比如在 person 函数中, 我们可以确保接收到 name 和 age 的两个参数, 但是, 如果调用者愿意提供更多的参数信息我们也可以收到。
5,命名关键字参数
对于 关键字参数,函数的调用者可以传入任意不受限制的关键字参数。 至于到底传入了多少 需要用 kw 来检查。
命名关键字参数可以有缺省值,从而简化调用
而有默认值的参数 调用是不可以再次传入。
注:使用命名关键参数时, 要特别注意, 如果没有可变参数, 就必须加一个 * 作为特殊分隔符。如果缺少 * ,python 解释器将无法识别位置参数 和 命名关键字参数。
参数的组合
在 pytho 中定义函数, 可以用必选参数, 默认参数, 可变参数, 关键字参数 和命名关键字参数,者五种参数都可以组合使用。
注:参数定义的的顺序必须是: 必选参数、默认参数、 可变参数、 命名关键字参数和关键字参数
注: 虽然可以组合多达五种参数, 但是不要同时使用太多的组合, 否则函数的借口可理解性 很差。
小结:
默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑性错误
定义可变参数的关键字参数的语法:
**args 是可变参数, args 接受的是一个 tuple
**kw是关键字参数, kw接受的是一个 dict