Python的小Tips
2020-03-23 22:55:10 # Python

1. 默认值在 定义作用域里的函数定义中求值

1.1 默认值为不可变对象时,只计算一次

1
2
3
4
5
6
7
8
9
i = 6
def ff(age = i):
print(age)

i = 12
ff()

print result:
6

1.2 默认值为列表、字典或类实例等可变对象时,会产生与该规则不同的结果

例如,下面的函数会累积后续调用时传递的参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
i = 6
def ff(age,ages=[]):
ages.append(age)
return ages

print(ff(10))
print(ff(20))
print(ff(30))

print result:
[10]
[10, 20]
[10, 20, 30]

如果不想再后续调用之间共享默认值时,可以用如下方式编写函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def ff(age,ages=None):
if ages is None:
ages = []
ages.append(age)
return ages

print(ff(10))
print(ff(20))
print(ff(30))

print result:
[10]
[20]
[30]

2. 解包实参列表

函数调用要求独立的位置参数,但实参在列表或元组里时,要执行相反的操作。

例如,内置的range()函数要求独立的 start 和 stop 实参,如果这些参数不是独立的,则要在调用函数时,用 * 操作符把实参从列表或元组解包出来:

1
2
3
4
5
6
7
print(list(range(3,6)))
args = [3,6]
print(list(range(*args)))

print result:
[3, 4, 5]
[3, 4, 5]