函數
計算機中的函數和數學中的函數不是一回事,而是一個subroutine 、子程序、procedures、過程。
作用:
1、減少重復代碼;
2、方便修改,更易擴展;
3、保持代碼的一致性。
最簡單的一個函數程序:
def f(): #函數名的命名規則與變量的命名規則相同
print("ok")
f() #調用的時候一定要記得加括號,因為定義一個函數的時候,如果不加括號
那它只是一個變量
def add(a,b) #這里的a,b就是形參,下面的7和5是實參,都是一一對應的
print(a+b) 在函數沒有被調用的時候,它只是被print到了內存里 >>>>>>12
add(7,5)
如何實現動態效果呢?
def f(index):
print("function %s"% index)
f(5) >>>>>>function 5 #這就實現了動態輸入,index是幾就輸入幾
這里要強調一下格式化輸出:
f.write("%s end action %s \n"%(time_current,n))
簡單的函數代碼,避免重復代碼的:
def action1 (n): print("starting action1...") with open ("日志記錄","a") as f: f.write("end action %s \n"% n) def action2 (n): print("starting action2...") with open ("日志記錄","a") as f: f.write("end action %s \n"% n) def action3 (n): print("starting action3...") with open ("日志記錄","a") as f: f.write("end action %s \n"% n) action1(1) action2(2) action3(3)
這個代碼就顯得用點啰嗦,因為每一個函數里面都包含
with open ("日志記錄","a") as f:
f.write("end action %s \n"% n)這樣的重復代碼,這時就可以將重復的代碼寫成函數。
import time def function(n): time_format="%Y-%m-%d %X" #格式化輸出 time_current=time.strftime(time_format) #輸出當前的時間 with open ("日志記錄","a") as f: f.write("%s end action %s \n"% (time_current,n)) def action1 (n): print("starting action1...") function(n) def action2 (n): print("starting action2...") function(n) def action3 (n): print("starting action3...") function(n) action1(1) action2(2) action3(3)
效果是一樣的,都是新建一個日志記錄的文檔,在里面輸入
函數的相關參數:
def print_info(name,age):
print ("Name:%s"% name)
print("Age:%s"% age) >>>>>>name:menheng
print_info("mengheng",25) age:25 #必須參數
print_info(name="mengheng",age="25") #關鍵字參數
不定長參數:
高大上的加法器:
def add(*args): #參數前面加個*表示不定長參數,用來存無命名的參數 print(args) Sum=0 for i in args: Sum+=i print(Sum) add(1,2,3,4,5)
請注意一般正常輸入的不定長參數*arg都是以元組的形式輸出,而如果在輸入一個列表為[1,2,3]
輸出的只能是([1,2,3],)為元組的一個元素,如果非要輸出(1,2,3),則要在后面引用的f(*[1,2,3])
在括號里面加入*,同理**kwargs則是以字典的形式輸出在下面的有命名參數中f(**{"name":"mengheng"})
這樣就是傳了字典過去。
def print_info(*args,**kwargs): print(args) print(kwargs) print_info(*["alex","18","male"],job="IT",hobby="girls",height="188") #分為有命名的和沒有命名的
>>>>>>('alex', '18', 'male')
{'job': 'IT', 'hobby': 'girls', 'height': '188'}
關于不定長的位置:*args放在左邊,**kwargs參數放在右邊。
所以函數參數的優先級就是從左到右
def func (name,age=22,*args,**kwargs) #從左到右就是關鍵字參數,默認參數,不定長參數
函數的返回值:
def f():
print("ok")
return 10
a=f()
print(a)
>>>>>>ok
10 #返回值的作用:1、結束函數 2、返回某個對象
注意點:1、如果函數沒有返回值,那它的返回值就是none
2、如果return多個對象,那么python會幫我們把多個對象封裝成一個元組返回。
函數的作用域:
python使用的LEGB的順序來查一個符號對應的對象
locals-->enclosing-->globals-->builtins
對應的是:局部變量--》閉包空間--》全局變量--》內建模塊
低級----》高級 低級只能看和輸出,但是并不能改變高級變量
count=10 #定義了一個全局變量 def outer(): global count #在改全局變量的時候必須要聲明一下 print(count) count=5 print(count) outer()
找變量的時候必須是從里到外找(只能看和輸出,不能改),不能從外向里找,如果要改就要聲明一下。
def outer(): count = 10 def inner(): nonlocal count print(count) count=5 print(count) inner() print(count) outer()
>>>>>>10
5
5
浙公網安備 33010602011771號