一.爲何要使用函數
函數
1.避面代碼重用spa
2.提高可讀性遞歸
3.使程序變得易維護內存
二.函數的定義與調用get
def helloword(): #函數定義,括號中可加參數ast
print("get out!")匿名函數
helloword() #調用函數變量
三.函數參數與局部變量 lambda
形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。所以,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變量map
實參能夠是常量、變量、表達式、函數等,不管實參是何種類型的量,在進行函數調用時,它們都必須有肯定的值,以便把這些值傳送給形參。所以應預先用賦值,輸入等辦法使參數得到肯定值
def calc(x,y): #其中x,y就是形參
print(x+y)
calc(a,b) #a,b爲實參
1.默認參數:
def cout(name,sex,country = "CN"):
print(name,sex,country)
cout("yungexing","f")
2.關鍵參數
cout(sex="f",name""feilie) #關鍵參數要在默認參數以後
3.非固定參數
def user_info(name,age,*args):
print(name,age,args)
user_info("link",1000,"pig","GoodGame")
>>>link 1000 ('pig', 'GoodGame')
另外一種非固定參數
def user_info(name,age,**kwargs):
print(name,age,kwargs)
user_info("link",1000,pet= "pig",total = "GoodGame")
>>>link 1000 {'pet': 'pig', 'total': 'GoodGame'}
args和kwargs在調用函數時均可以不填
4.局部變量
name = "link"
def cout_name():
print("before change",name)
name = "zelda"
print("after change",name)
cout_name(name)
print(name)
>>>
before change linkafter
change zelda
link
在函數內改變全局變量,方法以下
name = "link"
def cout_name():
global name
print("before change",name)
name = "zelda"
print("after change",name)
cout_name()
print(name)
>>>
before change link
after change zelda
zelda
三.嵌套函數
def func1():
def func2():
print("the first")
func2()
print("the second")
func1()
print("the last")
>>>
the first
the second
the last
不能夠在最外層調用func2,不然會報錯。由於函數只有被調用時纔會執行
四.遞歸
在一個函數內調用自身自己就是遞歸函數
def calc(n):
print(n)
if int(n/2) == 0:
return
else:
return calc(int(n/2))
calc(10)
>>>
10
5
2
1
五.高階函數
高階函數就是將函數名做爲參數傳入另外一個函數之中,或者返回值之中有函數名,例子以下
def func1(name,fun2): fun2(name)
def func2(eg):
print(eg)
func1("Fate",func2)
>>>Fate
六.匿名函數
匿名函數就是不須要顯示的指定函數
res = map(lambda x:x*x,[1,3,5,7,9])
for i in res:
print(i)
>>>
19254981