Python學習之路9——函數剖析
阿新 • • 發佈:2018-05-05
not trac 多個 ESS 模塊 裝飾器 finished scripts 一個
1、函數的調用順序
錯誤的調用方式
1 #!/user/bin/env ptyhon 2 # -*- coding:utf-8 -*- 3 # Author: VisonWong 4 5 # 函數錯誤的調用方式 6 def func(): # 定義函數func() 7 print("in the func") 8 foo() # 調用函數foo() 9 10 func() # 執行函數func() 11 12 def foo(): # 定義函數foo() 13 print("in the foo")
執行結果:
1E:\Python\PythonLearing\venv\Scripts\python.exe E:/Python/PythonLearing/func.py 2 in the func 3 Traceback (most recent call last): 4 File "E:/Python/PythonLearing/func.py", line 11, in <module> 5 func() # 執行函數func() 6 File "E:/Python/PythonLearing/func.py", line 8, in func 7 foo() #調用函數foo() 8 NameError: name ‘foo‘ is not defined 9 10 Process finished with exit code 1
正確的調用方式
1 #!/user/bin/env ptyhon 2 # -*- coding:utf-8 -*- 3 # Author: VisonWong 4 5 #函數正確的調用方式 6 def func(): #定義函數func() 7 print("in the func") 8 foo() #調用函數foo() 9 def foo(): #定義函數foo() 10 print("in the foo") 11 func() #執行函數func()
執行結果:
1 E:\Python\PythonLearing\venv\Scripts\python.exe E:/Python/PythonLearing/func.py 2 in the func 3 in the foo 4 5 Process finished with exit code 0
總結:被調用函數要在執行之前被定義。
2、高階函數
滿足下列條件之一就可成函數為高階函數
-
-
某一函數當做參數傳入另一個函數中
-
函數的返回值包含一個或多個函數
-
剛才調用順序中的函數稍作修改就是一個高階函數
1 #!/user/bin/env ptyhon 2 # -*- coding:utf-8 -*- 3 # Author: VisonWong 4 5 # 高階函數 6 def func(): # 定義函數func() 7 print("in the func") 8 return foo() # 調用函數foo() 9 10 def foo(): # 定義函數foo() 11 print("in the foo") 12 return 100 13 14 res = func() # 執行函數func() 15 print(res) # 打印函數返回值
輸出結果:
1 E:\Python\PythonLearing\venv\Scripts\python.exe E:/Python/PythonLearing/func.py 2 in the func 3 in the foo 4 100 5 6 Process finished with exit code 0
從上面的程序得知函數func的返回值為函數foo的返回值,如果foo不定義返回值的話,func的返回值默認為None;
下面來看看更復雜的高階函數:
1 #!/user/bin/env ptyhon 2 # -*- coding:utf-8 -*- 3 # Author: VisonWong 4 5 # 更復雜的高階函數 6 import time # 調用模塊time 7 8 def bar(): 9 time.sleep(1) 10 print("in the bar") 11 12 def foo(func): 13 start_time = time.time() 14 func() 15 end_time = time.time() 16 print("func runing time is %s" % (end_time - start_time)) 17 18 foo(bar)
執行結果:
1 E:\Python\PythonLearing\venv\Scripts\python.exe E:/Python/PythonLearing/func.py 2 in the bar 3 func runing time is 1.0400593280792236 4 5 Process finished with exit code 0
其實上面這段代碼已經實現了裝飾器一些功能,即在不修改bar()代碼的情況下,給bar()添加了功能;但是改變了bar()調用方式
下面我們對上面的code進行下修改,不改變bar()調用方式的情況下進行功能添加
Python學習之路9——函數剖析