函数,匿名函数和内置函数
函数
定义函数的三种行式
def func():
pass # 空函数
def func():
print("hello python") # 无参函数
def func(a):
print(f"{a}") # 有参函数
函数返回值
return 特性:
- 用return返回值
- 默认返回None
- 没有return默认返回None
- return代表函数执行终止,不再执行函数内return后面的代码
- return可返回任意类型的值
- return可返回多个值,用逗号隔开,返回的值是元组形式
函数的参数
形参
- 位置形参
def func(a, b, c):
pass
- 默认形参
def func(a, b, c=88):
pass
- 不定长形参和关键字形参
def func(a, *b, c=88):
pass # 当要为c传输参数时,必须用关键字实参传入
# b为不定长形参
def func(a, *, c=88):
pass # 当要为c传输参数时,必须用关键字实参传入
实参
- 位置实参
def func(a, b, c):
pass
func(1, 2, 3)
- 关键字实参
def func(a, b, c):
pass
func(1, c = 2, b = 3) # 关键字实参必须在位置实参后面传入
- 不定长实参
def func(a, *b, c):
pass
func(1, "b1", "b2", "b3", c = 3) # b1, b2, b3 都会传给b
func(1, *["b1", "b2", "b3"], c = 3) # b1, b2, b3 都会传给b
def func(a, *b, **c):
pass
func(a, b1, b2, b3, c1=1, c2=2, c3=3) # 用b接受多余的实参(b的形式是元组),用c接收多余的关键字实参(c的接收形式是字典)
func(a, *[b, b2, b3], **{c1:1, c2:2, c3:3}) # 也可用*或**打开列表或字典传入参数
函数对象
在python中一切皆对象,函数作为对象,可以在一下情况中使用:
- 引用 a= func
- 作为函数的参数 func1(func)
- 作为函数的返回值
- 作为容器内的元素 [func1, func2, func3]
名称空间和作用域
- 内置名称空间: 存储了内置方法的名称
- 局部名称空间: 存储了函数运行过程中的变量,只在函数运行过程中存在
- 全局名称空间: 除了内置和局部的名称空间
- 程序启动时产生内置名称空间
- 运行时产生全局名称空间
- 函数调用时产生局部名称空间
查找顺序: LEGB: local, enclosed(外层函数的局部名称空间), global, builtin
全局作用域:内置名称空间和全局名称空间
匿名函数
使用关键字lambda
定义
常与max, sorted, filter方法连用
内置函数
bytes:编码字符
In [9]: "test".encode('utf8')
Out[9]: b'test'
chr/ord: 字符和Unicode编码的转换
divmod: 取整和取余
enumberate: 带有索引的迭代
In [19]: hash("abc") # 返回对象的hash值
Out[19]: -3367553503465544155
dir: 返回对象的属性
locals/globals: 查看局部和全局变量
__import__: 通过字符串导入模块
global 和nonlocal
global 关键字让在函数内部定义的变量成为全局的
nonlocal 关键字让其成为上层函数的局部