用是可以用Python比較寬松,如果是在C語言的話就會警告甚至報錯了。
創(chuàng)新互聯(lián)在網(wǎng)站設(shè)計、網(wǎng)站制作、重慶APP軟件開發(fā)、網(wǎng)站運(yùn)營等方面均有出色的表現(xiàn),憑借多年豐富的經(jīng)驗,我們會仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計、整合,為客戶設(shè)計出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,我們更提供一系列成都全網(wǎng)營銷推廣,網(wǎng)站制作和網(wǎng)站推廣的服務(wù),以推動各中小企業(yè)全面信息化,并利用創(chuàng)新技術(shù)幫助各行業(yè)提升企業(yè)形象和運(yùn)營效率。
Python: 測試函數(shù)是否被調(diào)用
# helper class defined elsewhere
class CallLogger(object):
def __init__(self, meth):
self.meth = meth
self.was_called = False
def __call__(self, code=None):
self.meth()
self.was_called = True
然后assert CallLogger的was_called為True就行了。但是這樣的Callable不是個函數(shù):
isinstance(object, types.FunctionType) # Callable will be False
對于這種Callable獲取參數(shù)個數(shù)需要用:
inspect.getargspec(fn.__call__)
1、函數(shù)定義
①使用def關(guān)鍵字定義函數(shù)
②
def 函數(shù)名(參數(shù)1.參數(shù)2.參數(shù)3...):
"""文檔字符串,docstring,用來說明函數(shù)的作用"""
#函數(shù)體
return 表達(dá)式
注釋的作用:說明函數(shù)是做什么的,函數(shù)有什么功能。
③遇到冒號要縮進(jìn),冒號后面所有的縮進(jìn)的代碼塊構(gòu)成了函數(shù)體,描述了函數(shù)是做什么的,即函數(shù)的功能是什么。Python函數(shù)的本質(zhì)與數(shù)學(xué)中的函數(shù)的本質(zhì)是一致的。
2、函數(shù)調(diào)用
①函數(shù)必須先定義,才能調(diào)用,否則會報錯。
②無參數(shù)時函數(shù)的調(diào)用:函數(shù)名(),有參數(shù)時函數(shù)的調(diào)用:函數(shù)名(參數(shù)1.參數(shù)2.……)
③不要在定義函數(shù)的時候在函數(shù)體里面調(diào)用本身,否則會出不來,陷入循環(huán)調(diào)用。
④函數(shù)需要調(diào)用函數(shù)體才會被執(zhí)行,單純的只是定義函數(shù)是不會被執(zhí)行的。
⑤Debug工具中Step into進(jìn)入到調(diào)用的函數(shù)里,Step Into My Code進(jìn)入到調(diào)用的模塊里函數(shù)。
好像沒有特別的叫法吧,也沒注意手冊上有什么特別的叫法,至于區(qū)別,舉個例子你就清楚了,如下:
假如有個列表aa=[1,4,3,5],對這個列表用sort()進(jìn)行排序,如果第一種方式aa.sort()后aa=[1,3,4,5];
而第二種方式sort(aa)排序后雖然得到了新列表[1,3,4,5],但是aa還是=[1,4,3,5]。
也就是說第一種方式會改變原列表,而第二種不會改變,只是得到了一個新的副本。
GOT IT?!^^
補(bǔ)充一下,如果非要說叫法上的區(qū)別的話,第一種叫做方法調(diào)用,第二種叫做函數(shù)調(diào)用。至于方法和函數(shù)的些微區(qū)別,方法是基于對象的,函數(shù)是基于本身的。如果再詳細(xì)……方法一般不可以單獨(dú)使用,因為大部分方法是基于對象的,調(diào)用也必須基于對象,像上面第一種;而函數(shù)則可以單獨(dú)使用,你可以理解成它是數(shù)據(jù)系統(tǒng)本身的,而不是對象專有的。
PS:至于為什么我換了用sort()而沒有用LZ給的例子函數(shù),是因為..…^o^……LZ第一種方式和第二種方式寫的都不是一個函數(shù)……