1.函数的定义和调用
函数是指在开发程序时,为了提高编写的效率以及代码的重用,把具有独立功能的代码块组织为一个小模块。
# 定义函数 def 函数名(): 代码 # 定义一个函数,能够完成打印信息的功能 def printInfo(): print( '----------------------') print(' Hello World ') print( '----------------------') # 调用函数很简单,通过 函数名() 即可完成调用,定义完函数后,函数是不会自动执行的,需要调用它才可以 printInfo()
为了让一个函数更通用,在定义函数的时候可以给函数设置参数,接受数据
# 定义带有参数的函数 def add2num(a, b): c = a+b print(c) # 调用带有参数的函数,在小括号里传递数据 add2num(11, 22) # 调用函数时参数的顺序 def test(a,b): print(a,b) test(1,2) -> 1 2 test(b=1,a=2) -> 2 1 # 缺省参数(调用函数时,缺省参数的值如果没有传入,则取默认值。带有默认值的参数一定要位于参数列表的最后面。) # 定义一个printinfo函数 def printinfo( name, age = 35 ): print("Name: ", name) print("Age ", age) # 调用printinfo函数 printinfo(name="miki" ) printinfo( age=9,name="miki" ) # 以上实例输出结果: Name: miki Age 35 Name: miki Age 9 # 不定长参数(有时可能需要一个函数能处理比声明时更多的参数,这些参数叫做不定长参数,声明时不会命名。) def functionname([formal_args,] *args, **kwargs): "函数_文档字符串" function_suite return [expression] # 加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数,kwargs为字典。 # 定义一个fun函数 def fun(a, b, *args, **kwargs): ... # 调用fun函数 fun(1, 2, 3, 4, 5, m=6, n=7, p=8) #注意传递的参数对应 a = 1 b = 2 args = (3, 4, 5) kwargs: p = 8,m = 6,n = 7 # 引用传参 # 可变类型与不可变类型的变量分别作为函数参数时,Python中函数参数是引用传递(注意不是值传递)。对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。
2.函数返回值
返回值是程序中函数完成一件事情后,最后给调用者的结果。想要在函数中把结果返回给调用者,需要在函数中使用return关键字。
def add2num(a, b): c = a+b return c
按照函数有没有参数,有没有返回值,可以组合4种情况:无参数,无返回值;无参数,有返回值;有参数,无返回值;有参数,有返回值。
3.函数的嵌套调用
一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用
# 定义一个testB函数 def testB(): print('---- testB start----') print('......') print('---- testB end----') # 定义一个testA函数 def testA(): print('---- testA start----') testB() print('---- testA end----') # 调用testA函数 testA() ---- testA start---- ---- testB start---- ...... ---- testB end---- ---- testA end----
4.局部变量和全局变量
局部变量,就是在函数内部定义的变量。不同的函数,可以定义相同的名字的局部变量,不会产生影响。局部变量是为了在函数中临时保存数据而定义的。
全局变量是指在函数外面定义的变量,能够在所有的函数中进行访问。如果在函数中修改全局变量,那么就需要使用global进行声明。如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的
#全局变量 a = 100 def test1(): global a a = 300 print(a) # a=300 def test2(): print(a) # a=100
对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。
对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。
list=[1,2] def func(): list.append(3) print(list) #调用func函数的结果 [1,2,3]