第5天-python基礎(chǔ)-函數(shù)與模塊

定義函數(shù)

Python中每個函數(shù)都有自己的名字冈绊、自變量和因變量。我們通常把Python中函數(shù)的自變量稱為函數(shù)的參數(shù)埠啃,而因變量稱為函數(shù)的返回值死宣。

在Python中可以使用def關(guān)鍵字來定義函數(shù),和變量一樣每個函數(shù)也應(yīng)該有一個漂亮的名字碴开,命名規(guī)則跟變量的命名規(guī)則是一致的毅该。在函數(shù)名后面的圓括號中可以放置傳遞給函數(shù)的參數(shù)博秫,就是我們剛才說到的函數(shù)的自變量,而函數(shù)執(zhí)行完成后我們會通過return關(guān)鍵字來返回函數(shù)的執(zhí)行結(jié)果眶掌,就是我們剛才說的函數(shù)的因變量挡育。一個函數(shù)要執(zhí)行的代碼塊(要做的事情)也是通過縮進(jìn)的方式來表示的,跟之前分支和循環(huán)結(jié)構(gòu)的代碼塊是一樣的朴爬。大家不要忘了def那一行的最后面還有一個:即寒,之前提醒過大家,那是在英文輸入法狀態(tài)下輸入的冒號召噩。

參數(shù)的默認(rèn)值

"""
Three_Day-參數(shù)默認(rèn)值


Author: kk
Date: 2022/6/12
"""
def add(a=0, b=0, c=0):
    return a + b + c

#調(diào)用add函數(shù)母赵,沒有傳入?yún)?shù),那么a具滴、b凹嘲、c都使用默認(rèn)參數(shù)0
print(add())
#調(diào)用add函數(shù),傳入一個參數(shù)抵蚊,那么該參數(shù)賦值給a施绎,b、c使用默認(rèn)參數(shù)0
print(add(1))
#調(diào)用add函數(shù)贞绳,傳入二個參數(shù)谷醉,那么該參數(shù)賦值給a、b冈闭,c使用默認(rèn)參數(shù)0
print(add(1, 2))
#調(diào)用add函數(shù)俱尼,傳入三個參數(shù),那么該參數(shù)復(fù)制給a萎攒、b遇八、c
print(add(1, 2, 3))
#傳遞參數(shù)時可以不按照設(shè)定的順序進(jìn)行傳遞,但是要用“參數(shù)名=參數(shù)值”的形式
print(add(c=100, b=200, a=300))

注意:帶默認(rèn)值的參數(shù)必須放在不帶默認(rèn)值的參數(shù)之后耍休,否則將產(chǎn)生SyntaxError錯誤刃永,錯誤消息是:non-default argument follows default argument,翻譯成中文的意思是“沒有默認(rèn)值的參數(shù)放在了帶默認(rèn)值的參數(shù)后面”羊精。

可變參數(shù)

接下來斯够,我們還可以實(shí)現(xiàn)一個對任意多個數(shù)求和的add函數(shù),因?yàn)镻ython語言中的函數(shù)可以通過星號表達(dá)式語法來支持可變參數(shù)喧锦。所謂可變參數(shù)指的是在調(diào)用函數(shù)時读规,可以向函數(shù)傳入0個或任意多個參數(shù)。將來我們以團(tuán)隊(duì)協(xié)作的方式開發(fā)商業(yè)項(xiàng)目時燃少,很有可能要設(shè)計(jì)函數(shù)給其他人使用束亏,但有的時候我們并不知道函數(shù)的調(diào)用者會向該函數(shù)傳入多少個參數(shù),這個時候可變參數(shù)就可以派上用場阵具。下面的代碼演示了用可變參數(shù)實(shí)現(xiàn)對任意多個數(shù)求和的add函數(shù)碍遍。

"""
four-可變參數(shù)

Author: kk
Date: 2022/6/12
"""
# 用星號表達(dá)式來表示args可以接收0個或任意多個參數(shù)
def add(*args):
    total = 0
    for x in args:
        total += x
    return total
# 在調(diào)用add函數(shù)時可以傳入0個或任意多個參數(shù)
print(add())
print(add(1))
print(add(1, 2, 3, 4))

用模塊管理函數(shù)

不管用什么樣的編程語言來寫代碼定铜,給變量、函數(shù)起名字都是一個讓人頭疼的問題雀久,因?yàn)槲覀儠龅矫麤_突這種尷尬的情況宿稀。最簡單的場景就是在同一個.py文件中定義了兩個同名的函數(shù),如下所示赖捌。

"""
five-

Author: kk
Date: 2022/6/12
"""
def foo():
    print("Hello World!")

def foo():
    print("Goodbye祝沸,World!")

foo()#打印后者

當(dāng)然上面的這種情況我們很容易就能避免越庇,但是如果項(xiàng)目是團(tuán)隊(duì)協(xié)作多人開發(fā)的時候罩锐,團(tuán)隊(duì)中可能有多個程序員都定義了名為foo的函數(shù),這種情況下怎么解決命名沖突呢卤唉?答案其實(shí)很簡單涩惑,Python中每個文件就代表了一個模塊(module),我們在不同的模塊中可以有同名的函數(shù)桑驱,在使用函數(shù)的時候我們通過import關(guān)鍵字導(dǎo)入指定的模塊再使用完全限定名的調(diào)用方式就可以區(qū)分到底要使用的是哪個模塊中的foo函數(shù)竭恬,代碼如下所示。

"""
five-

Author: kk
Date: 2022/6/12
"""
#module1.py
def foo():
    print("Hello World!")


#module2.py
def foo():
    print("Goodbye熬的,World痊硕!")


#test.py
import module1
import module2

# 用“模塊名.函數(shù)名”的方式(完全限定名)調(diào)用函數(shù),
module1.foo()    # Hello World!
module2.foo()    # Goodbye押框,World岔绸!

在導(dǎo)入模塊時,還可以使用as關(guān)鍵字對模塊進(jìn)行別名橡伞,這樣我們可以使用更為簡短的完全限定名盒揉。

#test.py
import module1 as m1
import module2 as m2

m1.foo()    # Hello World!
m2.foo()    # Goodbye,World兑徘!

上面的代碼我們導(dǎo)入了定義函數(shù)的模塊刚盈,我們也可以使用from...import...語法從模塊中直接導(dǎo)入需要使用的函數(shù),代碼如下所示挂脑。

#test.py
from module1 import foo
foo()# Hello World!

from module2 import foo
foo()# Goodbye扁掸,World!

但是最域,如果我們?nèi)绻麖膬蓚€不同的模塊中導(dǎo)入了同名的函數(shù),后導(dǎo)入的函數(shù)會覆蓋掉先前的導(dǎo)入锈麸,就像下面的代碼中镀脂,調(diào)用foo會輸出hello, world!,因?yàn)槲覀兿葘?dǎo)入了module2的foo忘伞,后導(dǎo)入了module1的foo 薄翅。如果兩個from...import...反過來寫沙兰,就是另外一番光景了。

#test.py
from module2 import foo
from module1 import foo
foo()# # Hello World!

如果想在上面的代碼中同時使用來自兩個模塊中的foo函數(shù)也是有辦法的翘魄,大家可能已經(jīng)猜到了鼎天,還是用as關(guān)鍵字對導(dǎo)入的函數(shù)進(jìn)行別名,代碼如下所示暑竟。

#test.py
from module1 import foo as f1
from module2 import foo as f2
f1()# Hello World!
f2()# Goodbye斋射,World!

標(biāo)準(zhǔn)庫中的模塊和函數(shù)

Python標(biāo)準(zhǔn)庫中提供了大量的模塊和函數(shù)來簡化我們的開發(fā)工作但荤,我們之前用過的random模塊就為我們提供了生成隨機(jī)數(shù)和進(jìn)行隨機(jī)抽樣的函數(shù)罗岖;而time模塊則提供了和時間操作相關(guān)的函數(shù);上面求階乘的函數(shù)在Python標(biāo)準(zhǔn)庫中的math模塊中已經(jīng)有了腹躁,實(shí)際開發(fā)中并不需要我們自己編寫桑包,而math模塊中還包括了計(jì)算正弦、余弦纺非、指數(shù)哑了、對數(shù)等一系列的數(shù)學(xué)函數(shù)。隨著我們進(jìn)一步的學(xué)習(xí)Python編程知識烧颖,我們還會用到更多的模塊和函數(shù)弱左。

Python標(biāo)準(zhǔn)庫中還有一類函數(shù)是不需要import就能夠直接使用的,我們將其稱之為內(nèi)置函數(shù)倒信,這些內(nèi)置函數(shù)都是很有用也是最常用的科贬,下面的表格列出了一部分的內(nèi)置函數(shù)。


v2.jpeg

簡單的總結(jié)

函數(shù)是功能相對獨(dú)立且會重復(fù)使用的代碼的封裝鳖悠。學(xué)會使用定義和使用函數(shù)榜掌,就能夠?qū)懗龈鼮閮?yōu)質(zhì)的代碼。當(dāng)然乘综,Python語言的標(biāo)準(zhǔn)庫中已經(jīng)為我們提供了大量的模塊和常用的函數(shù)憎账,用好這些模塊和函數(shù)就能夠用更少的代碼做更多的事情。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卡辰,一起剝皮案震驚了整個濱河市胞皱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌九妈,老刑警劉巖反砌,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異萌朱,居然都是意外死亡宴树,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門晶疼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酒贬,“玉大人又憨,你說我怎么就攤上這事《Ф郑” “怎么了蠢莺?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長零如。 經(jīng)常有香客問我躏将,道長,這世上最難降的妖魔是什么埠况? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任耸携,我火速辦了婚禮,結(jié)果婚禮上辕翰,老公的妹妹穿的比我還像新娘夺衍。我一直安慰自己,他們只是感情好喜命,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布沟沙。 她就那樣靜靜地躺著,像睡著了一般壁榕。 火紅的嫁衣襯著肌膚如雪矛紫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天牌里,我揣著相機(jī)與錄音颊咬,去河邊找鬼。 笑死牡辽,一個胖子當(dāng)著我的面吹牛喳篇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播态辛,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼麸澜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奏黑?” 一聲冷哼從身側(cè)響起炊邦,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熟史,沒想到半個月后馁害,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹂匹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年碘菜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡炉媒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昆烁,到底是詐尸還是另有隱情吊骤,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布静尼,位于F島的核電站白粉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鼠渺。R本人自食惡果不足惜鸭巴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拦盹。 院中可真熱鬧鹃祖,春花似錦、人聲如沸普舆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沼侣。三九已至祖能,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛾洛,已是汗流浹背养铸。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留轧膘,地道東北人钞螟。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像扶供,于是被迫代替她去往敵國和親筛圆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容