1. 程式人生 > >Python學習之路9——函數剖析

Python學習之路9——函數剖析

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")

    執行結果:

 1
E:\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——函數剖析