1.定义函数使用关键字def,后接函数名和放在圆括号( )中的可选参数列表,函数内容以冒号起始并且缩进。一般格式如下:
def 函数名(参数列表):
函数体
return [expression]
注意:参数列表可选,文档字符串可选,return语句可选,默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。
例:
def hello(): print("Hello World!") hello()更复杂点的应用,函数中带上参数变量:
def arae(width,height): return width*height w=10 h=10 print(arae(10,10))
2.函数变量作用域
在函数内部定义的变量拥有一个局部作用域,在函数外定义的拥有全局作用域。
注意:在函数内部可以引用全局变量,但无法对其赋值(除非用global进行声明)。
例:
a = 5 # 全局变量a def func1(): print('func1() print a =', a) def func2(): a = 21 # 局部变量a print('func2() print a =', a) def func3(): global a a = 10 # 修改全局变量a print('func3() print a =', a) func1() func2() func3() print('the global a =', a)3.函数调用与其他语言中函数调用一样,Python中在调用函数时,需要给定和形参相同个数的实参并按顺序一一对应。
def fun(name, age, gender): print('Name:', name, 'Age:', age, 'Gender:', gender, end=' ') print() fun('Jack', 20, 'man')
函数也可以通过keyword=value 形式的关键字参数来调用,因为我们明确指出了对应关系,所以参数的顺序也就无关紧要了。
def fun(name, age, gender): print('Name:', name, 'Age:', age, 'Gender:', gender, end=' ') print() fun(gender='man', name='Jack', age=20)Python中的函数也可以给一个或多个参数指定默认值,这样在调用时可以选择性地省略该参数:def fun(a, b, c=5): print(a + b + c) fun(1, 2) fun(1, 2, 3)
1.普通参数就是像下面这段函数传入的参数一样,传入函数,没有默认值
1 def f(a): 2 a = a + 1 3 return a 4 5 b=f(3) 6 print(b)2、指定参数
1 #像这样按照顺序传入的话,如果没有指定参数的值那么就会按照顺序分别给a,b,c赋初始值 2 d=f(3,4,5) 3 print(d) 4 #如果像这样指定a,b,c的值,那么它们就是指定参数,可以不按照它们原来的顺序传入 5 e=f(c=5,b=4,a=3) 6 print(e)3、默认参数
1 #默认参数 2 #像这样在括号里指定b的初始值,那么b就成为默认参数 3 def f(a,b=9): 4 sum = a + b 5 return(sum) 6 7 #从这里可以看到,我们只传入一个参数3,它就会默认按照顺序赋值给第一个变量a,b就等于原来的默认值9 8 c=f(3) 9 print(c) 10 11 #当传入两个参数时,按照顺序分别赋值给a,b,那么a=3,b=4,b被重新赋值了 12 d=f(3,4) 13 print(d)4、动态参数
1 #动态参数 2 #动态参数 *args 是指当我们需要传入多个参数时,可以用*args代表多个参数,不用分别在括号里指定多个参数 3 def f(*args): 4 print(args,type(args)) 5 6 d=f(1,2,3) 7 8 #动态参数 **kwargs, 当我们需要传入键值对类型的参数时就可以用**kwargs 9 def f(**kwargs): 10 print (kwargs,type(kwargs)) 11 12 d=f(a=3,b=4) 13 14 #动态参数之参数的万能模式,这样我们无论怎么传参数几乎都不会报错 15 def f(a,*args,**kwargs): 16 print(a,args,type(args),kwargs,type(kwargs)) 17 18 d=f(22,33,44,k1=55,k2=66)