一 定义
def 函数名(a,*args(位置元组),b=3,**kwargs(关键字字典)):
return value //返回值
二 返回值
1 返回值代表函数结束点
2 返回值可以有多个
3 返回值的接收变量类型为元组,可进行解包
eg (a,b,c)=函数名()
三 参数
1 分类
形参 单纯变量
实参 负有实际值的变量
传参 传递变量的过程
2 注意
1 如果函数只有形参没有实参,那么在调用函数时必须初始化值
2 1 按照变量顺序赋值
2 按照变量名复制
3 先按照变量顺序,再根据变量名复制
eg
def a(aa,bb)
a(aa='12',bb='12')
3 动态参数
动态参数的出现是在于实参初始化值的数量是不固定的,不能限制数量
1 都可以为空
2 可以和形参和实参共存
*args(元组) **kwargs(字典)
def a(*food)
a('1','2','23') //返回元组
def a(**food)
a(1='23',2='232') //返回字典
a(**kwargs)
4 对于列表的传参,可以进行传参,然后return对象,这个对象和原列表是一个东西
5 默认值如果是可变类型,每次使用的都是同一个
6 注意事项
1 形式 形参->动态参数->实参——>关键字参数 这种方式调用,一定要保证这种顺序,否则会出问题
四 变量名称空间
全局变量 1 声明在函数外,会持续到整个程序执行结束 2 全局变量作用于全局 3 查看函数globals()
局部变量 1 声明在函数内,会在函数执行完结束进行清除 2 全局变量作用于局部变量也只是暂时改变 3查看函数locals()
内置变量
1 局部变量如果想要调用全局变量 必须在函数进行global再次声明,否则函数是无法寻找定位的 (局部变量调用全局变量)
2 如果在声明情况下调用全局变量,对全局变量的更改也是全局的这点要牢记
3 函数内嵌套也是寻找定位的函数局部变量,没有任何问题,不用再次声明为局部变量(函数内嵌调用前一层局部变量)
4 函数内嵌套如果想实现变量运算,必须采用nolocal进行声明,而且即便修改也不会影响上一层嵌套函数的值,各自拥有各自的
eg
a= 5
def func():
global a:
a=a+1
def func1()
nolocal a
a=a+1
print a
func1()
print a
func()
五 打散特性
1 目的 将列表 元组打散传入实参
2 把 列表 字符串 元组 打散
3 调用 函数形式 a(*实参)
把字典打散
调用函数形式 a(**实参)
六 注释
function.__doc__ 文档函数 输出 注释
注释
单行注释
多行注释
函数注释