十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
使用關(guān)鍵詞 def 聲明這是一個(gè)函數(shù)
創(chuàng)新互聯(lián)建站專(zhuān)注于四子王網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供四子王營(yíng)銷(xiāo)型網(wǎng)站建設(shè),四子王網(wǎng)站制作、四子王網(wǎng)頁(yè)設(shè)計(jì)、四子王網(wǎng)站官網(wǎng)定制、微信小程序定制開(kāi)發(fā)服務(wù),打造四子王網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供四子王網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
1def 函數(shù)名 (參數(shù)):
2 語(yǔ)句塊
參數(shù)可以沒(méi)有,也可以有多個(gè),用逗號(hào)隔開(kāi),第一行稱(chēng)為函數(shù)頭,結(jié)尾一定要加冒號(hào),代表開(kāi)始進(jìn)入函數(shù)體的執(zhí)行。
語(yǔ)句塊也就是函數(shù)體,是關(guān)于這個(gè)函數(shù)要實(shí)現(xiàn)的功能的語(yǔ)句,語(yǔ)句要有返回值即return語(yǔ)句,如果沒(méi)有return語(yǔ)句,就代表return none.
4.6. 定義函數(shù)
我們可以創(chuàng)建一個(gè)用來(lái)生成指定邊界的斐波那契數(shù)列的函數(shù):
def fib(n): # write Fibonacci series up to n
... """Print a Fibonacci series up to n."""
... a, b = 0, 1
... while a n:
... print(a, end=' ')
... a, b = b, a+b
... print()
...
# Now call the function we just defined:
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
關(guān)鍵字 def 引入了一個(gè)函數(shù) 定義。在其后必須跟有函數(shù)名和包括形式參數(shù)的圓括號(hào)。函數(shù)體語(yǔ)句從下一行開(kāi)始,必須是縮進(jìn)的。
函數(shù)體的第一行語(yǔ)句可以是可選的字符串文本,這個(gè)字符串是函數(shù)的文檔字符串,或者稱(chēng)為 docstring。(更多關(guān)于 docstrings 的信息請(qǐng)參考 文檔字符串) 有些工具通過(guò) docstrings 自動(dòng)生成在線的或可打印的文檔,或者讓用戶通過(guò)代碼交互瀏覽;在你的代碼中包含 docstrings 是一個(gè)好的實(shí)踐,讓它成為習(xí)慣吧。
函數(shù) 調(diào)用 會(huì)為函數(shù)局部變量生成一個(gè)新的符號(hào)表。確切的說(shuō),所有函數(shù)中的變量賦值都是將值存儲(chǔ)在局部符號(hào)表。變量引用首先在局部符號(hào)表中查找,然后是包含函數(shù)的局部符號(hào)表,然后是全局符號(hào)表,最后是內(nèi)置名字表。因此,全局變量不能在函數(shù)中直接賦值(除非用 global 語(yǔ)句命名),盡管他們可以被引用。
函數(shù)引用的實(shí)際參數(shù)在函數(shù)調(diào)用時(shí)引入局部符號(hào)表,因此,實(shí)參總是 傳值調(diào)用 (這里的 值 總是一個(gè)對(duì)象 引用 ,而不是該對(duì)象的值)。[1] 一個(gè)函數(shù)被另一個(gè)函數(shù)調(diào)用時(shí),一個(gè)新的局部符號(hào)表在調(diào)用過(guò)程中被創(chuàng)建。
一個(gè)函數(shù)定義會(huì)在當(dāng)前符號(hào)表內(nèi)引入函數(shù)名。函數(shù)名指代的值(即函數(shù)體)有一個(gè)被 Python 解釋器認(rèn)定為 用戶自定義函數(shù) 的類(lèi)型。 這個(gè)值可以賦予其他的名字(即變量名),然后它也可以被當(dāng)作函數(shù)使用。這可以作為通用的重命名機(jī)制:
fib
f = fib
f(100)
0 1 1 2 3 5 8 13 21 34 55 89
如果你使用過(guò)其他語(yǔ)言,你可能會(huì)反對(duì)說(shuō):fib 不是一個(gè)函數(shù),而是一個(gè)方法,因?yàn)樗⒉环祷厝魏沃怠J聦?shí)上,沒(méi)有 return 語(yǔ)句的函數(shù)確實(shí)會(huì)返回一個(gè)值,雖然是一個(gè)相當(dāng)令人厭煩的值(指 None )。這個(gè)值被稱(chēng)為 None (這是一個(gè)內(nèi)建名稱(chēng))。如果 None 值是唯一被書(shū)寫(xiě)的值,那么在寫(xiě)的時(shí)候通常會(huì)被解釋器忽略(即不輸出任何內(nèi)容)。如果你確實(shí)想看到這個(gè)值的輸出內(nèi)容,請(qǐng)使用 print() 函數(shù):
Python中定義函數(shù)格式為,def+函數(shù)名:代碼塊
如:
def print_hello():
print("hello")
定義一個(gè)A類(lèi),然后實(shí)例化一個(gè)A對(duì)象,通過(guò)setattr函數(shù)來(lái)給當(dāng)前類(lèi)添加一個(gè)變量,值是test函數(shù)。調(diào)用haha函數(shù),就相當(dāng)于調(diào)用了test函數(shù)。 例2,定義一個(gè)模塊,通過(guò)另一個(gè)模塊函數(shù)調(diào)用函數(shù)來(lái)增加變量,值是test2函數(shù)。調(diào)用haha函數(shù),就相當(dāng)于調(diào)用了test2函數(shù)。
原理
python系統(tǒng)會(huì)維護(hù)一個(gè)變量的字典,可以通過(guò)locals()或者globals()獲取到該字典。由于字典是可變對(duì)象,那么,就可以動(dòng)態(tài)的增加變量。由于函數(shù)也是一個(gè)對(duì)象,那么就可以將變量指向函數(shù)。這樣就可以達(dá)到動(dòng)態(tài)修改函數(shù)名的目的了。
Python的自定義函數(shù)格式中規(guī)中矩,用def引導(dǎo)自定義函數(shù)名,用括號(hào)給出該函數(shù)的參數(shù),在冒號(hào)后換行通過(guò)縮進(jìn)確定函數(shù)體。在格式上和條件判斷語(yǔ)句有些相似。
如果函數(shù)名和變量名沖突了,相當(dāng)于重新賦值。而python解釋是從上到下的,也就是說(shuō)此時(shí)誰(shuí)在下面誰(shuí)占用這個(gè)變量名。剩下的那個(gè)就只能在內(nèi)存中等待垃圾回收了。
自定義函數(shù)的參數(shù):
按道理來(lái)說(shuō),即使Python不嚴(yán)格要求定義函數(shù)參數(shù),但這方面的知識(shí)有助于理解自定義函數(shù)中參數(shù)操作的情況,還是應(yīng)該說(shuō)明一下的。
可以簡(jiǎn)單地理解為在定義函數(shù)時(shí)括號(hào)中聲明的參數(shù)是我們?cè)诤瘮?shù)使用中會(huì)用到的參數(shù),在調(diào)用函數(shù)時(shí)括號(hào)中的變量就是參加函數(shù)運(yùn)算用到的變量,換個(gè)名字參數(shù)(用于定義)和變量(用于調(diào)用)就足以理解了。
給你這樣一個(gè)例子吧,這個(gè)例子里面有動(dòng)態(tài)增加類(lèi)的函數(shù)。
聲明一個(gè)類(lèi),類(lèi)初始化的時(shí)候讀取配置文件,根據(jù)配置列表加載特定目錄下的模塊下的函數(shù),函數(shù)和模塊同名,將此函數(shù)動(dòng)態(tài)加載為類(lèi)的成員函數(shù)。
代碼如下所示:
class WinBAS(Bas):
def __init__(self):
self.__baslist = {}
self.__Init_Modules()
pass
def __Init_Modules(self):
import modplugs
for m in modplugs.__moduleset__:
mh = __import__('modules.' + m)# + '.' + m)
ma = getattr(mh, m)# + '.' + m)
ma = getattr(ma, m)
setattr(self.__class__, m, ma)
modplugs.py是模塊配置文件如下:
__moduleset__ = [
'BAS_GetUserList',
]
然后建立目錄modules下面建立一個(gè)空的__init__.py文件,把目錄變?yōu)橐粋€(gè)包,在modules目錄下建立真正的BAS_GetUserList實(shí)現(xiàn):BAS_GetUserList文件中有個(gè)BAS_GetUserList函數(shù)如下:
def BAS_GetUserList(self, strs):
return [0, strs]
這樣WinBAS類(lèi)就可以動(dòng)態(tài)加入了BAS_GetUserList函數(shù)。