2013-10-02 45 views

回答

13

當你「調用」一個函數時,你基本上只是告訴程序執行該函數。所以,如果你有這樣的添加兩個數字,如函數:

def add(a,b): 
    return a + b 

你會這樣調用該函數:

add(3,5) 

這將返回8.你可以把任何兩個數值在括號中這個案例。你也可以調用這樣的函數:

answer = add(4,7) 

在這種情況下,將設置變量答案等於11。

2

「調用」是指在您的代碼中引用其他地方寫入的函數。這個函數「call」可以在標準的Python庫(隨Python安裝的東西),第三方庫(其他人寫的你想使用的東西)或你自己的代碼(你寫的東西)上進行。例如:

#!/usr/env python 

import os 

def foo(): 
    return "hello world" 

print os.getlogin() 
print foo() 

我創建了一個名爲「foo」和稱爲它後來與print語句的功能。我導入了標準的「os」Python庫,然後我在該庫中的「getlogin」函數中調用

0

當你調用一個函數時,它被稱爲'調用'一個函數。 對於例如,假設你已經定義了發現平均兩個數字像這 -

def avgg(a,b) : 
     return (a+b)/2; 

現在是一個函數,調用的函數,你這個樣子。

x=avgg(4,6) 
print x 

x的值將爲5。

11

我給一個稍微高級的答案。在Python中,函數是first-class objects。這意味着它們可以「動態創建,銷燬,傳遞給函數,作爲值返回,並具有編程語言中其他變量的所有權限」。

在Python中調用函數/類實例意味着調用該對象的__call__方法。對於舊式類,類實例也是可調用的,但前提是創建它們的對象具有__call__方法。新風格的類也是如此,除了沒有新風格類的「實例」概念。相反,他們是「類型」和「對象」。

Python 2 Data Model page所述,對於函數對象,類實例(舊式類)和類對象(新式類),「x(arg1, arg2, ...)x.__call__(arg1, arg2, ...)的簡寫」。

因此每當你定義一個def funcname(parameters):你真的只是一個方法__call__和速記創建一個對象__call__是剛剛命名實例,並含有參數調用括號遵循它的速記功能。因爲函數是Python中的第一類對象,所以它們可以用動態參數隨時創建(並因此接受動態參數)。這將與裝飾器函數/類派上用場,您將在稍後閱讀。

現在我建議您閱讀Official Python Tutorial

+0

這不完全正確。例如,你可以創建一個函數,然後嘗試對其__call__'屬性進行僞代碼處理,但這不會阻止它被正常語法調用。 – ely

+0

對於內置的'功能'對象,細節比較模糊。 ['_PyFunction_FastCallKeywords'](https://github.com/python/cpython/blob/2ebc5ce42a8a9e047e790aefbf9a94811569b2b6/Objects/call.c#L385) - 基本上檢查函數對象的字節碼並使用參數和關鍵字參數進行評估一個堆棧框架 - 永遠不會停留在'__call__'機制的開銷之上。 – ely

相關問題