一、函数定义和调用
1.定义函数用def
2.函数注释
在函数体里的开头写上字符串,可以起到说明的作用
可以用函数名.__doc__的方式读取在函数开头加的字符串(双下划线)
内建的help()函数也能返回此信息
3.多返回值
返回多个值时,会以元组的形式返回
可以用序列解包的方式获取多个值
4.无返回值
当函数无返回值时,会自动返回None。return 的关键字可写可不写(但是最好写上,避免混乱)
5.递归函数
6.函数文档
def fun(): """ 这是一个空函数 什么都不做 """ pass print(fun.__doc__)
7.函数标注
def fun(a: str) -> str: print(fun.__annotations__) return a + " hello" print(fun("abc"))
二、函数参数
1、位置参数
固定顺序的参数就是位置参数
2、关键字参数
在调用函数时,通过实参赋值的方式传入参数
这种方式可以打乱传入的位置,
调用时参数必须和定义参数时的变量名一致
这样就会出现错误
3.混用传参
可以同时使用位置参数,和关键字参数的方式,但是关键字参数必须位于位置参数之后
4.参数默认值
关键字参数还可以在定义函数时使用默认值
定义时默认写了参数则调用时不必再写
位置参数和关键字参数联合使用时,要把位置参数放在前面
3、收集参数
1、在函数定义形参时,形参前加个*,在调用函数时就可以传入任意多个实参进去。
加了*的参数会作为元组来存放传入的数据
2、当收集参数和关键字参数混用时就不能省略关键字参数了,而且能重新赋值
可变参数可以在函数的任意位置,但只能有一个
3.定义函数时形参前加**,调用函数时,可以已a=b的方式传入
最后以字典的方式存放数据
4.逆向参数收集
由序列传给函数,在由函数自动拆开序列的方式
列表和元组用 *传入,字典用**传入
5.函数的传递机制
如果传参是个字符串,函数外定义的字符串,在函数里重新赋值后外部是不变的
但如果传参是一个列表则可以改变函数外的列表值
????
6.变量作用域
7.函数变量
可以把函数赋值给变量来使用
8.函数参数
可以把函数当做参数来传递
9.使用函数作为返回值
三、lambda表达式
四、作用域
locals()
globals()