一.函数的定义
def 函数名(参数列表): 函数体 return语句
return语句不写或后边不加任何对象即为return None
二.函数的参数
无参数
def func1(): print("没有参数")
一个参数
def func1(a): return a
多个参数
def func1(a,b,c): return a+b+c
必须参数
必须按照正确顺序和数量传入参数
def func1(name,age,job): print("name:%s age:%d job:%s"%(name,age,job)) func1("sfencs",20,"IT")
关键字参数
def func1(name,age,job): print("name:%s age:%d job:%s"%(name,age,job)) func1(age=20,name="sfencs",job="IT")
默认参数
默认参数必须放在必须参数的后面
def func1(name,age,job="IT"): print("name:%s age:%d job:%s"%(name,age,job)) func1("sfencs",20) func1("Alan",25,"teacher")
不定长参数
参数带一个星号*
def func1(*args): print(args) func1(1,2,3,"sfencs")#(1, 2, 3, 'sfencs')以元组形式保存
参数带两个星号**
def func1(**kwargs): print(args) func1(age=20,name="sfencs",job="IT")#{'age': 20, 'name': 'sfencs', 'job': 'IT'}以字典形式保存
定义函数的参数时请以必须参数、默认参数、带一个星号的不定长参数、带两个星号的不定长参数的顺序定义形参
三.参数传递
不可变类型
def func1(a): a=5 b=10 func1(b) print(b)#输出为10
可变类型
def func1(list1): list1.append("sfencs") list2=[1,2,3] func1(list2) print(list2)#[1, 2, 3, 'sfencs']list2会改变
四.变量作用域
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域
按照L-->E-->G-->B的顺序查找
内部作用域修改外部作用域变量
global
count=20 def function() : global count#不加这句话会报错 print (count)#20 count=5 print(count)#5 function() print(count)#5
nonlocal
修改嵌套作用域
def function1() : count=20 def function2(): nonlocal count count=5 print(count)#5 function2() print(count)#r此时输出为5,若不加nonlocal count则输出为20 function1()
五.递归函数
#斐波那契数列为0,1,1,2,3,5,8,13,21,34....... def fibon(n): if n<=2 : return n-1 return fibon(n-1)+fibon(n-2) print(fibon(7))#输出数列中第七个数,为8