函數與函數之間的調用
3.1 第一種情況 程序代碼如下:
def x(f):
def y():
print(1)
return y
def f():
print(2)
x(f)
運行結果:
無結果
分析:因為第9行中的x(f)中的f沒有帶括號,f只是一個普通的參數,所以程序只調用執行了x(f)函數,沒有調用執行f()函數。x(f)函數中雖然也定義了y()函數,但是x(f)函數中沒有調用執行y()函數,只是執行了return y。而y變量也沒有值,所以整個程序的返回值就為無結果。
3.2 第二種情況 程序代碼如下:
def x(f):
def y():
print(1)
return y
def f():
print(2)
x(f())
運行結果:
2
分析:因為第9行中的x(f())中的f()帶括號,所以程序先調用執行f()函數,先輸出2。然后2作為參數傳入到x(f)函數中,程序開始調用執行x(f)函數。x(f)函數中雖然也定義了y()函數,但是x(f)函數中沒有調用執行y()函數,只是執行了return y。而y變量也沒有值,所以調用執行x(f)函數沒有產生任何結果。因此該程序最終只輸出了2。
3.3 第三種情況 程序代碼如下:
def x(f):
def y():
print(1)
return y()
def f():
print(2)
x(f)
運行結果:
1
分析:因為第9行中的x(f)中的f沒有帶括號,f只是一個普通的參數,所以程序只調用執行了x(f)函數,沒有調用執行f()函數。x(f)函數中也定義了y()函數,并且返回是y()函數。因此程序調用執行了y()函數,輸出結果是1。
3.4 第四種情況
def x(f):
def y():
print(1)
return y()
def f():
print(2)
x(f())
運行結果:
2
1
分析:因為第9行中的x(f())中的f()帶括號,所以程序調用執行了f()函數,先輸出2。然后2作為參數傳入到x(f)函數中,程序開始調用執行x(f)函數。x(f)函數中也定義了y()函數,并且返回是y()函數。因此程序也調用執行了y()函數,也輸出了1。最終該程序先后輸出了2和1。
3.5 第五種情況 程序代碼如下:
def x(f):
def y():
print(1)
print(f())
return y()
def f():
#print(2)
return 2
x(f)
運行結果:
1
2
分析:因為第9行中的x(f)中的f沒有帶括號,f只是一個普通的參數,所以程序只是先調用執行了x(f)函數。在x(f)函數中也定義了y()函數,而且返回值是y()函數,所以程序會調用執行y()函數。在y()函數中先是執行print(1)語句,輸出1,接著執行print(f())語句,所以程序在這時也會調用執行f()函數,輸出2。最終該程序先后輸出了1和2。
-
程序
+關注
關注
117文章
3785瀏覽量
81004 -
函數
+關注
關注
3文章
4327瀏覽量
62573 -
變量
+關注
關注
0文章
613瀏覽量
28360 -
python
+關注
關注
56文章
4792瀏覽量
84628
發布評論請先 登錄
相關推薦
評論