函数返回多个值,默认为元组
局部变量,定义在函数中,只能在当前函数内使用;
全局变量定义在函数外,任何地方都可以使用。
函数内使用变量,先看局部变量,再找全局变量。
如果要在函数内修改全局变量,需要先用global 声明一下,否则认为是定义了一个局部变量。
全局变量必须定义在使用它的函数调用之前,不必在函数声明之前,但一般习惯把全局变量放在最前面。
一般尽量避免全局变量和局部变量重名,可以在全局变量定义时加g_前缀。
函数文档字符串,函数体最开始用一个字符串说明函数,当用help(func),能显示该函数信息。一对””或’ ’单行,””” ”””或’’’ ‘’’支持多行
列表、字典做全局变量,在函数中修改可以不用global声明。加上global声明,可以增加可读性。
在函数中不使用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。
对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。
对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。
可变参数
形参前加*,函数内当做元组处理,接收多余出来的实参;
形参前加**,函数内当作字典处理,接收关键字参数。
参数顺序必是:必选参数、默认参数、可变参数/命名关键字参数、关键字参数。可变参数不能和命名关键字参数组合。
拆包
对元组或列表前加*,或者字典前加**,表示将其元素取出,传递给函数。
引用
Python中都是引用传递
匿名函数
func = lambda a,b:a+b
匿名函数冒号后只能有一个表达式,不用写return,返回值就是该表达式的结果。
复合赋值需要注意,a += b并不完全等同于a = a + b,
如果将全局变量作为参数传给函数,函数内通过a += b的方式修改参数的值,全局变量是否变化要看全局变量是可变类型还是不可变类型,可变类型则变,不可变类型着不变。
如果通过a = a+b的方式,全局变量都不变。