目录
- 函数
- 函数的命名空间
- 返回多个值
- lambda函数
函数
函数是Python中最主要也是最重要的代码组织和复用手段。
为什么使用函数?
- 重复使用相同或非常类似的代码,需要函数
- 提高代码可读性
函数使用def关键字声明,用return关键字返回值:
def my_function(x, y, z = 1.5): #x, y是位置参数,z是关键字参数
if z > 1:
return z * (x + y)
else:
return z / (x + y)
可以有多条return语句,若没有则返回None。
函数的圆括号里有位置参数和关键字参数。
关键字参数用于指定默认值或可选参数,关键字参数必须位于位置参数之后。
可以任意顺序指定关键字参
my_function(x = 5, y = 6, z = 7)
my_function(y = 6, z = 7, x = 5)
函数的命名空间
1.局部命名空间
局部命名空间在函数被调用时创建,函数执行完后被销毁。
任何在函数中赋值的变量默认都是被分配到局部命名空间中的。
下面有个函数:
def func():
a = []
for i in range(5):
a.append(i)
在调用完函数func后,a会被销毁。
2.全局命名空间
但我们可以用global将变量声明成全局变量:
def func():
global a
a = []
for i in range(5):
a.append(i)
现在,函数执行完后,变量a还在
返回多个值
Python的函数不像C++和Java,可以返回多个值:
def f():
a = 5
b = 6
c = 7
return a, b, c
a, b, c = f()
匿名(lambda)函数
匿名函数,看名字就知道这个函数不需要命名。
匿名函数仅由单条语句构成,语句的结果就是返回值。
For example:
def short_function(x):
return x * 2
这个函数等价于下面的匿名函数:
func = lambda x: x * 2
生成器(generator)
一般的函数执行之后只会返回单个值,而生成器则以延迟的方式返回一个值序列,即每返回一个值后暂停,直到下一个值被请求时继续。
创建一个生成器,只需要将函数中的return替换为yield
For example,下面有个产生平方值的生成器
In [1]: def squares(n=10):
...: print("Start!")
...: for i in range(1, n+1):
...: yield i ** 2
调用这个生成器时,没有反应:
In [2]: gen = squares()
当我们请求生成器给我们元素时
In [3]: for x in gen:
...: print(x, end=' ')
Out[3]: Start!
1 4 9 16 25 36 49 64 81 100