形式:
def 函数名(参数列表):
函数体
return 值[return这一句不是必须的]
函数体要缩进
【注意】:传的参数是基础类型,也就是不可变类型的时候数值(整数,浮点),字符串,布尔,None的时候,在函数体内改变参数的值不影响外面的值,说明是值传递,不是参数传递。 当然传 列表,字典,集合的时候可以改变参数内部的值的,如果是重新赋值,也不会改变函数外面的值的。 元组本来就不会改变的。
传参:
方式一:传统的按照位置
方式二:用*加上列表或者元祖 进行传值,形参三个参数,列表第一层也要是三个元素,元组也是一样的。
参数的个数需要和列表和元组第一层元素的个数一样。
方式三:根据形参的参数名传参,不用考虑位置对应关系,比如函数test(a,b,c),
调用的时候可以是test(b=1,c=12,a="3"),参数名要一样的,不能多传,不能少传
方式四:用**加一个字典,字典的键和形参的名一样,不能多传不能少传。
形式参数定义方式
方式一:传统的方式,按照位置写上参数名: test(a,b,c)
方式二:就是给形参默认值,调用的时候可以传参也可以不传,用上米娜方式三的方式,不过这里可以不用全部传。如果是用的字典方式,那么键就不一定都要了。
【注意】:不是所有参数都要有缺省值,不过有一个有的话,右边的参数就必须要有缺省值了。
这样用*列表 和*元组 传参对个数就不一定了,个数必须要小于等于形参的个数,同时要大于等于形参中
没有缺省值的参数的个数。
方式三:形参用 *参数名,默认函数体内这个参数是元组,调用的时候传多个参数test(1,2,3),里面得到的结果是:(1,2,3) 或者传 *元祖 比如 test(*元组名)
方式四:形参用 ** 参数名,这代表的是字典,调用传参的时候用 test(a=1,b=2)的方式,那么里面得到的结果是{"a":1,"b":2} 或者 传参 test(**字典名)
方式五: *元组和形参名混合模式: test(*p1,p2,p3) test(*p1,p2=4) 等混合模式,
test(*,p2)
这种方式的好处:需要调用的时候必须要用 p2=值的方式传参,否则报错。除非有缺省值。
强制嗲用的时候用 p1=的形式传参数。前面的元组参数直接用多个参数就行,1,2,3这种形式的
test(1,2,3,p1=2,p3=3) 或者test(*元组名,p1=,p2=)
【注意】:函数体内部是可以嵌套定义函数的。