python中定義函數(shù)的關(guān)鍵字是def。
在成都網(wǎng)站建設(shè)、做網(wǎng)站過(guò)程中,需要針對(duì)客戶的行業(yè)特點(diǎn)、產(chǎn)品特性、目標(biāo)受眾和市場(chǎng)情況進(jìn)行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計(jì)方向。創(chuàng)新互聯(lián)公司還需要根據(jù)客戶的需求進(jìn)行功能模塊的開發(fā)和設(shè)計(jì),包括內(nèi)容管理、前臺(tái)展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計(jì)和安全保護(hù)等功能。
Python使用def關(guān)鍵字開始函數(shù)定義,緊接著是函數(shù)名,括號(hào)內(nèi)部為函數(shù)的參數(shù),內(nèi)部為函數(shù)的具體功能實(shí)現(xiàn)代碼,如果想要函數(shù)有返回值, 在expressions中的邏輯代碼中用return返回。
上面我們定義了一個(gè)名字為 function 的函數(shù),函數(shù)沒有不接受參數(shù),所以括號(hào)內(nèi)部為空,緊接著就是 函數(shù)的功能代碼。
如果執(zhí)行該腳本,發(fā)現(xiàn)并沒有輸出任何輸出,因?yàn)槲覀冎欢x了函數(shù),而并沒有執(zhí)行函數(shù)。 這時(shí)我們?cè)赑ython命令提示符中輸入函數(shù)調(diào)用 function(), 注意這里調(diào)用函數(shù)的括號(hào)不能省略。
python的學(xué)習(xí)
如果我們用代碼實(shí)現(xiàn)了一個(gè)小功能,但想要在程序代碼中重復(fù)使用,不能在代碼中到處粘貼這些代碼,因?yàn)檫@樣做違反了軟件工程中DRY原則。 Python提供了函數(shù)功能,可以將我們這部分功能抽象成一個(gè)函數(shù)以方便程序調(diào)用,或者提供給其他模塊使用。
函數(shù)是組織好的,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。(推薦學(xué)習(xí):Python視頻教程)函數(shù)必須先定義,才能調(diào)用,否則會(huì)報(bào)錯(cuò),無(wú)參數(shù)時(shí)函數(shù)的調(diào)用函數(shù)名()。
有參數(shù)時(shí)函數(shù)的調(diào),不要在定義函數(shù)的時(shí)候在函數(shù)體里面調(diào)用本身,否則會(huì)出不來(lái),陷入循環(huán)調(diào)用,函數(shù)需要調(diào)用函數(shù)體才會(huì)被執(zhí)行,單純的只是定義函數(shù)是不會(huì)被執(zhí)行的。
嚴(yán)格的說(shuō),象你這么用是絕對(duì)屬于沒有復(fù)定義的。
不過(guò)有時(shí)候又可以是因?yàn)?,如果你在程序開頭函數(shù)前面定義一些變量,原則上它會(huì)自動(dòng)變成global的。
除非你另外啟線程,或者是有可能有與它重名的變量,否則可以直接制在函數(shù)體內(nèi)使用,當(dāng)然也可以在后面的語(yǔ)句中使用。
函數(shù)式編程要記著IPO這個(gè)準(zhǔn)則。就是每個(gè)百函數(shù)最好都是有輸入input有輸出output。函數(shù)體就是處理process。盡量不要使用全局變量度,也不要使用默認(rèn)值。一個(gè)正規(guī)的做法是這樣:
def
example(a):
a=0
return
a
a=1
example(a)
這是一個(gè)標(biāo)準(zhǔn)用法,你就不用為global變量頭痛了。
1、函數(shù)定義
①使用def關(guān)鍵字定義函數(shù)
②
def 函數(shù)名(參數(shù)1.參數(shù)2.參數(shù)3...):
"""文檔字符串,docstring,用來(lái)說(shuō)明函數(shù)的作用"""
#函數(shù)體
return 表達(dá)式
注釋的作用:說(shuō)明函數(shù)是做什么的,函數(shù)有什么功能。
③遇到冒號(hào)要縮進(jìn),冒號(hào)后面所有的縮進(jìn)的代碼塊構(gòu)成了函數(shù)體,描述了函數(shù)是做什么的,即函數(shù)的功能是什么。Python函數(shù)的本質(zhì)與數(shù)學(xué)中的函數(shù)的本質(zhì)是一致的。
2、函數(shù)調(diào)用
①函數(shù)必須先定義,才能調(diào)用,否則會(huì)報(bào)錯(cuò)。
②無(wú)參數(shù)時(shí)函數(shù)的調(diào)用:函數(shù)名(),有參數(shù)時(shí)函數(shù)的調(diào)用:函數(shù)名(參數(shù)1.參數(shù)2.……)
③不要在定義函數(shù)的時(shí)候在函數(shù)體里面調(diào)用本身,否則會(huì)出不來(lái),陷入循環(huán)調(diào)用。
④函數(shù)需要調(diào)用函數(shù)體才會(huì)被執(zhí)行,單純的只是定義函數(shù)是不會(huì)被執(zhí)行的。
⑤Debug工具中Step into進(jìn)入到調(diào)用的函數(shù)里,Step Into My Code進(jìn)入到調(diào)用的模塊里函數(shù)。
1. print()函數(shù):打印字符串
2. raw_input()函數(shù):從用戶鍵盤捕獲字符
3. len()函數(shù):計(jì)算字符長(zhǎng)度
4. format(12.3654,'6.2f'/'0.3%')函數(shù):實(shí)現(xiàn)格式化輸出
5. type()函數(shù):查詢對(duì)象的類型
6. int()函數(shù)、float()函數(shù)、str()函數(shù)等:類型的轉(zhuǎn)化函數(shù)
7. id()函數(shù):獲取對(duì)象的內(nèi)存地址
8. help()函數(shù):Python的幫助函數(shù)
9. s.islower()函數(shù):判斷字符小寫
10. s.sppace()函數(shù):判斷是否為空格
11. str.replace()函數(shù):替換字符
12. import()函數(shù):引進(jìn)庫(kù)
13. math.sin()函數(shù):sin()函數(shù)
14. math.pow()函數(shù):計(jì)算次方函數(shù)
15. 3**4: 3的4次方
16. pow(3,4)函數(shù):3的4次方
17. os.getcwd()函數(shù):獲取當(dāng)前工作目錄
18. listdir()函數(shù):顯示當(dāng)前目錄下的文件
19. socket.gethostbyname()函數(shù):獲得某主機(jī)的IP地址
20. urllib.urlopen(url).read():打開網(wǎng)絡(luò)內(nèi)容并存儲(chǔ)
21. open().write()函數(shù):寫入文件
22. webbrowser.open_new_tab()函數(shù):新建標(biāo)簽并使用瀏覽器打開指定的網(wǎng)頁(yè)
23. def function_name(parameters):自定義函數(shù)
24. time.sleep()函數(shù):停止一段時(shí)間
25. random.randint()函數(shù):產(chǎn)生隨機(jī)數(shù)
第一個(gè)那個(gè)*x是*args的意思,就是任意個(gè)參數(shù),C++里的 va_arg,...符號(hào)這種,python函數(shù)里可以有*args和**kwargs。
*args之后可以隨便放有默認(rèn)值的和沒有默認(rèn)值的。
因?yàn)檫@之后的任何東西都得用”y=1“”z=1“這種來(lái)賦值。
比如說(shuō)第一個(gè)函數(shù),def fun(*x, y=4, z),我寫fun(1,2,3,4,5),這五個(gè)數(shù)全跑到*x里了。我想給y和z賦值必須要寫fun(1,2,3,4,5,y=6,z=7)。相當(dāng)于z跟有默認(rèn)值的那種也差不多了。所以規(guī)定可以把z放在*x后面的任何位置,包括y=4后面,它們的位置關(guān)系已經(jīng)沒有用了。
規(guī)定def fun(x=4, y) y必須放在x前,就是要保留這種位置關(guān)系,要不我寫fun(1),你說(shuō)這個(gè)1是給x的還是y的?就有了歧義。所以必須要有正確的位置關(guān)系。但是*x后面所有東西都是用參數(shù)名賦值的,位置關(guān)系不起作用了,所以可以任意順序了。
要理解規(guī)定背后的原因。同理,**kwargs放在最后,也是這個(gè)原因。消除歧義性。
上一期我們學(xué)習(xí)參數(shù)傳遞怎么傳遞,也了解了參數(shù)的幾種類型。
首先,我們?cè)賮?lái)回顧一下,形參和實(shí)參:
形參是在定義函數(shù)時(shí)定義的,放在函數(shù)名后面的圓括號(hào)里,可為空
實(shí)參是調(diào)用函數(shù)時(shí)為形參傳入具體的參數(shù)值
簡(jiǎn)單總結(jié)一下,誰(shuí)調(diào)用函數(shù),誰(shuí)就負(fù)責(zé)傳入?yún)?shù)。
好吶,本期我們來(lái)詳細(xì)學(xué)習(xí)函數(shù)幾種參數(shù)類型,大綱如下:
python函數(shù)的參數(shù)名是無(wú)意義的,Python允許在調(diào)用函數(shù)時(shí)通過(guò)通過(guò)名字來(lái)傳入?yún)?shù)值。
位置參數(shù):按照形參位置傳入的參數(shù)
調(diào)用函數(shù)時(shí),實(shí)參默認(rèn)按位置順序傳遞的。同時(shí)實(shí)參個(gè)數(shù)也要和形參匹配
舉一個(gè)小栗子
如果實(shí)參的個(gè)數(shù)與形參不匹配時(shí),調(diào)用函數(shù)運(yùn)行就會(huì)報(bào)錯(cuò)
Python中,形參與調(diào)用函數(shù)緊密聯(lián)系在一起的。
關(guān)鍵字參數(shù):調(diào)用函數(shù)時(shí),使形參名稱來(lái)傳遞參數(shù),形式為“形參名=實(shí)參”
關(guān)鍵字參數(shù),又叫命名參數(shù),傳遞時(shí)無(wú)需考慮參數(shù)位置和順序
舉一個(gè)小栗子
默認(rèn)參數(shù):定義函數(shù)時(shí),我們可以為形參提前設(shè)置具體的值。
在定義函數(shù)時(shí),默認(rèn)參數(shù)要放到位置等其他參數(shù)后面
在調(diào)用函數(shù)時(shí),默認(rèn)參數(shù)是可選的。如果傳入新值,則會(huì)覆蓋默認(rèn)值
舉一個(gè)小栗子
注意,默認(rèn)值不能位于位置參數(shù)前面,否則程序會(huì)報(bào)錯(cuò)誤
不定長(zhǎng)參數(shù)又名可變參數(shù)。
不定長(zhǎng)參數(shù)指的是可變數(shù)量的參數(shù),分兩種情況:
如果不定長(zhǎng)參數(shù)后面,可以新增參數(shù)嗎?
我們通過(guò)例子來(lái)看,會(huì)發(fā)生什么?
運(yùn)行上面的程序,Python解釋器會(huì)報(bào)錯(cuò)
原因是,形參a已經(jīng)是不定長(zhǎng)參數(shù),我們調(diào)用的test(2,3,4)傳入的三個(gè)實(shí)參,系統(tǒng)自動(dòng)把它們屬于形參a的值,形參b 和形參c就等于沒有值傳入,這時(shí)候系統(tǒng)就認(rèn)為,調(diào)用函數(shù)的對(duì)象,參數(shù)沒有傳夠。
為了解決這一報(bào)錯(cuò),python引入了 強(qiáng)制命名參數(shù)
規(guī)定,調(diào)用不定參數(shù)后面有跟位置參數(shù)的函數(shù)時(shí),傳入給位置參數(shù)時(shí),必須要強(qiáng)制命名參進(jìn)行傳參。
逆向參數(shù)收集針對(duì)的對(duì)象傳入函數(shù)的實(shí)參
調(diào)用函數(shù)時(shí),如果實(shí)參是元組,列表或者字典,通過(guò)在實(shí)參前面加入星號(hào),可以自動(dòng)把元素進(jìn)行隔開,然后再轉(zhuǎn)入給函數(shù)進(jìn)行處理
舉一個(gè)小栗子
本期,我們?cè)敿?xì)學(xué)習(xí)了參數(shù)幾種類型,為后面我們學(xué)習(xí)函數(shù),打好基礎(chǔ)。
實(shí)踐是檢驗(yàn)真理的過(guò)程,大家多動(dòng)手練習(xí)練習(xí),會(huì)有不一樣的奇妙旅程~
好吶,以上是本期內(nèi)容,歡迎大佬們?cè)u(píng)論區(qū)指正~