1、基本语法及特性
基本语法
def test():#定义函数名
print("x")
test()#调用函数
带参数
def test(x,y):
print(x+y)
test(1,2)
返回值
返回值=0:返回None
返回值=1:返回object
返回值>1:返回tuple
?为什么要有返回值:因为需要整个函数执行的结果
def test1(x,y):
print(x+y)
return 1
print(test1(1,2))#返回1
def test2(x,y):
print(x+y)
print(test2(1,2))#返回None
2、参数与局部变量
形参:
变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参:
可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
默认参数
默认参数非必选
关键参数
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数。
关键参数必须放在位置参数后。
def test(x,y=2):
print(x,y)
test(y=1,x=2)#与形参顺序无关
test(1,2)#与形参一一对应
test(3,y=2)
参数组
元组
def test1(x,*args):
print(x,args)
test1(1,2,3,4,5,6)
字典:将关键字参数转换
def test2(**kwargs):
print(kwargs)
print(kwargs["name"])
test2(name='alex',age=8)
全局与局部变量
局部变两:作用于是定义该变量的子程序
全局变量:在整个代码的顶层定义的变量,都叫全局变量
全局变量可在函数中直接声明,但建议不要这样做。
只有字符串,整型不能在函数内改全局变量。
重名时:在定义局部变量的子程序内,局部变量起作用;在其他地方变量起作用。
def change_name(name):
print("before",name)
name="alex li"
print("after",name)
name="alex"
change_name(name)
print(name)
school="123"
def change_name(name):
global school #声明全局变量
school="mage linux"
print("before",name,school)
name="alex li"
print("after",name)
name="alex"
change_name(name)
print(name)
print(school)
递归
最大递归数999次
必须要有一个明确的结束条件
递归效率不高
结果会溢出:
def calc(n):
print(n)
return calc(n/2)
calc(10)
def calc(n):
print(n)
if int(n/2) > 0:
return calc(int(n/2))
print("->",n)
calc(10)
高阶函数
定义:变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数
def add(x,y,f):
return f(x)+f(y)
res=add(3,-6,abs)
print(res)
来源:https://www.cnblogs.com/abyssce/p/7159751.html