今天看函数的参数
位置参数:
def power( x ):
return x * x
如果要计算x的N次方,
def power( ):
s = 1
while n> 0:
n = n -1
s = s * x
return s
默认参数:
即默认上述参数中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)
而 power(5,3)中的3必须输入
默认参数的问题:
def add_end(L =[] ):
L.append('END')
return L
正常调用时:add_end([1,2,3])-------->[1, 2, 3, 'END' ]
使用默认参数进行调用:add_end( )----->['END']
继续调用:add_end( )-------->['END','END']
add_end( )-------> ['END', 'END', 'END']
原因是:在定义函数时 默认参数L 的值就被计算出来,即【 】,因为默认参数L 也是一个变量,
指向对象[ ],每次调用函数,返回了L 的值已经是’END‘,而append方法,所以,每次L都在增加
要修改这个问题,就需要使用None这个不变对象
def add_end(L = None):
if L is None:
L = [ ]
L.append('END']
return L
这个好像还是回返回L的值?,那就是append会改变L 本身这个对象?有点不太好理解
可变参数:
就是指参数的个数可以变,不是固定的,
计算a^2+b^2+c^2+.....
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n*n
return sum
在参数前加 * 将其变为可变参数:
def calc (*numbers):
sum =0
for n in numbers:
sum = sum + n * n
return sum
思考:当a^2不是2次方而是 n 次方呢?
关键字参数:
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
关键字参数有什么用?它可以扩展函数的功能。比如,在person
函数里,我们保证能接收到name
和age
这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去: