函数
1.定义格式:
def abc(形式参数1,形式参数2,...):
return "ij2f98sdf9dff"
函数里设置返回值,然后函数调用可以直接赋值,赋的值是返回值,若没有设置返回值,默认是None
def abc(形式参数=123)
默认参数,调用时不传参就用默认123
def abc(参数1,参数2=123)
没有默认的参数要放在有默认的前面,不然语法会报错
调用函数传的参数可以是字符串,列表,等和其他数据类型
2.执行格式:
a = abc(实际参数1,实际参数2,...)
执行时按照顺序传参
a = abc(形参2=实参2,...)
执行时指定传参,可以不按顺序传参
注意:如果指定传参和顺序传参混合使用,那么指定传参不能写在顺序传参前面,而且顺序传参了后,后面的指定传参不能写重复的形参,例如abc(实参1,形参1=实参2)
3.动态参数:
格式:
def abc(*a)
在形参前面加一个*号,这样变成动态参数,调用的时候可以传多个参数,传入后a变成了以传入参数为各元素的元组
def abc(**aa)
在形参前面加两个*号,这样也是动态参数,调用传参格式是abc(k1=123,k2=456,...),这样传入后a变成了一个字典
def abc(*a,**aa)
两种动态参数结合,两种传参都可以使用,,但是写法要求*a要在**a的前面。当然在最前面加一个形式参数也是可以的
def abc(*args,**kwargs)
一般动态参数是这样命名的,当然用其他表示也没错
4.动态传列表、元组、字典:
传入列表(元组)li
abc(li)
li传入,把这个列表整体作为元组的一个元素
abc(*li)
这样传入参数,是将列表里的每个元素作为元组的各个元素组成元组
传入字典dic
abc(**dic)
不加*会报错,因为两*的传入格式是如同key=value的,所以在传入字典时前面加**就可以将字典传入进去
5.全局变量和局部变量:
若在局部里(定义的函数里)修改全局变量,则要在局部修改语句前添加一语句:global 变量名
全局变量都用大写,局部变量都用小写,这样好区分
补充:
函数作为参数
>>>def f(arg):
arg()
>>>def x():
print("xxxxx")
>>>f(x)