目錄
- 一 初識(shí)函數(shù)
- 二. 函數(shù)的結(jié)構(gòu)與調(diào)用
- 三. 函數(shù)的返回值
- 四. 函數(shù)的參數(shù)
一 初識(shí)函數(shù)
大家都有沒有玩過陌陌,探探這種軟件?這種軟件是專門為你們沒有對(duì)象的男士設(shè)置的,這是一款合理合法的約炮,哦不對(duì),交友軟件,那么現(xiàn)在我們用Python代碼簡(jiǎn)單模擬一下:
print("拿出手機(jī)")
print("打開陌陌")
print('左滑一下')
print('右滑一下')
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
ok so easy我們已經(jīng)完成了我們模擬探探的需求,其實(shí)我們做的這個(gè)就是一個(gè)功能,什么功能呢?就是交友的功能,那么問題來了, 我還想在約一次整么搞,是不是就是在寫一遍
# 約一次
pint("拿出手機(jī)")
print("打開陌陌")
print('左滑一下')
print('右滑一下')
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
# 再約一次
pint("拿出手機(jī)")
print("打開陌陌")
print('左滑一下')
print('右滑一下')
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
那么這樣寫好么? 當(dāng)然不好了,為什么呢? 重復(fù)代碼太多了。 所以我們能否將這些代碼放到一個(gè)地方,想用這些代碼了,我就通過一個(gè)指令,調(diào)用過來,不想用就不寫這個(gè)指令就行了,這樣就能極大限度的減少代碼的重復(fù)率,那么咱們看下面:
def date():
print("拿出手機(jī)")
print("打開陌陌")
print('左滑一下')
print('右滑一下')
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
那么這里,我寫了一個(gè)約會(huì)的功能,我將上面的那些重復(fù)代碼封裝到這個(gè)所謂的函數(shù)中,這樣,我什么時(shí)候需要使用這個(gè)功能,我通過一個(gè)指令調(diào)用即可。
def date():
print("拿出手機(jī)")
print("打開陌陌")
print('左滑一下')
print('右滑一下')
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
date() # 調(diào)用函數(shù)
上面這個(gè)就是一個(gè)函數(shù),那么接下來我們就來研究一下這個(gè)函數(shù)。
從上面的對(duì)比我們看一下函數(shù)的優(yōu)勢(shì):
1,減少代碼的重復(fù)性。
2,使代碼可讀性更好。
二. 函數(shù)的結(jié)構(gòu)與調(diào)用
2.1函數(shù)的結(jié)構(gòu)
首先咱們先看一下函數(shù)的結(jié)構(gòu):
def 函數(shù)名():
函數(shù)體
def 關(guān)鍵詞開頭,空格之后接函數(shù)名稱和圓括號(hào)(),最后還有一個(gè)":"。
def 是固定的,不能變,他就是定義函數(shù)的關(guān)鍵字。
空格 為了將def關(guān)鍵字和函數(shù)名分開,必須空(四聲),當(dāng)然你可以空2格、3格或者你想空多少都行,但正常人還是空1格。
函數(shù)名:函數(shù)名只能包含字符串、下劃線和數(shù)字且不能以數(shù)字開頭。雖然函數(shù)名可以隨便起,但我們給函數(shù)起名字還是要盡量簡(jiǎn)短,并且要具有可描述性
括號(hào):是必須加的,先別問為啥要有括號(hào),總之加上括號(hào)就對(duì)了(下面就會(huì)講到)!
下面的函數(shù)體一定全部都要縮進(jìn),這代表是這個(gè)函數(shù)的代碼。
我們現(xiàn)在就來實(shí)現(xiàn)剛剛我們說的定義一個(gè)約會(huì)功能:
def date():
print("拿出手機(jī)")
print("打開陌陌")
print('左滑一下')
print('右滑一下')
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
哦了,這就定義完了,但是這個(gè)時(shí)候我們?nèi)?zhí)行,會(huì)發(fā)生什么現(xiàn)象? 什么都沒有發(fā)生.因?yàn)槲抑欢x了一個(gè)函數(shù).但是還沒有執(zhí)行過這個(gè)函數(shù).
2.2函數(shù)的調(diào)用
使用函數(shù)名加小括號(hào)就可以調(diào)用了 寫法:函數(shù)名() 這個(gè)時(shí)候函數(shù)的函數(shù)體會(huì)被執(zhí)行
通過上面的動(dòng)態(tài)圖大家可知,只有解釋器讀到函數(shù)名() 時(shí),才會(huì)執(zhí)行此函數(shù),如果沒有這條指令,函數(shù)里面即使有10萬(wàn)行代碼也是不執(zhí)行的。
而且是這個(gè)指令你寫幾次,函數(shù)里面的代碼就運(yùn)行幾次,就好比你在部隊(duì),我喊你名字,喊幾次,你就得 到 幾次,這就是指令。
直接調(diào)用定義好的函數(shù)就可以了 咱們約完之后的得有個(gè)結(jié)果吧, 比如是約的蘿莉,還是大媽啊總得有個(gè)結(jié)果,那么這個(gè)結(jié)果
怎么來描述和獲得呢? 這就涉及到函數(shù)的返回值啦
三. 函數(shù)的返回值
一個(gè)函數(shù)就是封裝一個(gè)功能,這個(gè)功能一般都會(huì)有一個(gè)最終結(jié)果的,比如你寫一個(gè)登錄函數(shù),最終登錄成功與否是不是需要返回你一個(gè)結(jié)果?還有咱們是不是都用過len這個(gè)函數(shù),他是獲取一個(gè)對(duì)象的元素的總個(gè)數(shù),最終肯定會(huì)返回一個(gè)元素個(gè)數(shù)這樣的結(jié)果:
s1 = 'abfdas'
print(len(s1)) # 6
那么這個(gè)返回值如何設(shè)置呢?這就得用到python中的一個(gè)關(guān)鍵字:return
def date():
print("拿出手機(jī)")
print("打開陌陌")
print('左滑一下')
print('右滑一下')
print("找個(gè)漂亮的妹子")
return
print("問她,約不約啊!")
print("ok 走起")
- 函數(shù)中遇到return,此函數(shù)結(jié)束.不在繼續(xù)執(zhí)行
那么函數(shù)的返回值,既然叫做返回值,他就是返回一些數(shù)據(jù),那么返回給誰(shuí)呢?
跟我們之前使用的len一樣,函數(shù)的返回值返回給了 函數(shù)名() 這個(gè)整體,也就是這個(gè)執(zhí)行者。
- return 會(huì)給函數(shù)的執(zhí)行者返回值。
當(dāng)然,也可以返回多個(gè)值。
如果返回多個(gè)值,是以元組的形式返回的。
總結(jié)一下:
1.遇到return,函數(shù)結(jié)束,return下面的(函數(shù)內(nèi))的代碼不會(huì)執(zhí)行。
2.return 會(huì)給函數(shù)的執(zhí)行者返回值。
如果return后面什么都不寫,或者函數(shù)中沒有return,則返回的結(jié)果是None
如果return后面寫了一個(gè)值,返回給調(diào)用者這個(gè)值
如果return后面寫了多個(gè)結(jié)果,,返回給調(diào)用者一個(gè)tuple(元組),調(diào)用者可以直接使用元組的解構(gòu)獲取多個(gè)變量。
def date():
print("拿出手機(jī)")
print("打開陌陌")
print('左滑一下')
print('右滑一下')
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
return '漂亮的妹子','小蘿莉', '成熟女性'
g1,g2,g3 = date()
print(g1, g2, g3) # 漂亮的妹子 小蘿莉 成熟女性
四. 函數(shù)的參數(shù)
我們上面研究了,函數(shù)的結(jié)構(gòu),函數(shù)的執(zhí)行,以及函數(shù)的返回值。對(duì)函數(shù)有一個(gè)初步的了解,那么接下來就是一個(gè)非常重要的知識(shí)點(diǎn),函數(shù)的參數(shù)。函數(shù)是以功能為導(dǎo)向的,上面我們寫的函數(shù)里面的代碼都是寫死的,也就是說,這個(gè)函數(shù)里面的更改起來很麻煩,試想一下,我們使用探探,陌陌等軟件,可不可以進(jìn)行篩選,比如選擇性別,年齡等,導(dǎo)出結(jié)果? 再拿我們之前學(xué)過的len 這個(gè)len是不是可以獲取字符串的總個(gè)數(shù)?是不是可以獲取列表的總個(gè)數(shù)?你更改了len函數(shù)內(nèi)部的代碼了?沒有吧?你看下面的例子:
s1 = 'sfdas'
l1 = [1, 3, 7]
print(len(s1)) # 5
print(len(l1)) # 3
那么我們寫的函數(shù)也是可以將一些數(shù)據(jù)傳到函數(shù)里面的,然后讓里面的代碼利用上這個(gè)數(shù)據(jù)產(chǎn)生我們想要的結(jié)果,在返回。
舉個(gè)例子:
def date(sex):
print("拿出手機(jī)")
print("打開陌陌")
print('設(shè)置篩選條件:性別: %s' %sex)
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
date('女')
上面就是函數(shù)傳參的示例,函數(shù)的參數(shù)可以從兩個(gè)角度劃分:
1.形參
寫在函數(shù)聲明的位置的變量叫形參,形式上的一個(gè)完整.表示這個(gè)函數(shù)需要xxx
2.實(shí)參
在函數(shù)調(diào)用的時(shí)候給函數(shù)傳遞的值.加實(shí)參,實(shí)際執(zhí)行的時(shí)候給函數(shù)傳遞的信息.表示給函數(shù)xxx
函數(shù)的傳參就是函數(shù)將實(shí)際參數(shù)交給形式參數(shù)的過程.
def date(sex): # 函數(shù)定義時(shí)(參數(shù)) 這個(gè)就是形參
print("拿出手機(jī)")
print("打開陌陌")
print('設(shè)置篩選條件:性別: %s' %sex)
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
date('女') # 函數(shù)執(zhí)行時(shí)(參數(shù)) 這個(gè)就是實(shí)參
# 這個(gè)過程就是:代碼運(yùn)行到date('女')開始執(zhí)行此函數(shù)同時(shí)將字符串'女'這個(gè)數(shù)據(jù)傳遞給變量sex,然后執(zhí)行函數(shù)中的代 # 碼。如果遇到sex,其實(shí)就是使用'女'這個(gè)數(shù)據(jù)。
我們先從實(shí)參角度學(xué)習(xí)函數(shù)的參數(shù)。
實(shí)參角度
1, 位置參數(shù)
位置參數(shù)就是從左至右,實(shí)參與形參一一對(duì)應(yīng)。
def date(sex, age, hobby):
print("拿出手機(jī)")
print("打開陌陌")
print('設(shè)置篩選條件:性別: %s,年齡:%s,愛好:%s' %(sex, age, hobby))
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
date('女','25~30','唱歌')
date('人妖','20~25','蘿莉音')
練習(xí)
編寫函數(shù),給函數(shù)傳遞兩個(gè)參數(shù)a,b a,b相加 返回a參數(shù)和b參數(shù)相加的和
def f(a,b):
c = a+b
return c
num_sum = f(5,8)
print(num_sum)
結(jié)果: 13
編寫函數(shù),給函數(shù)傳遞兩個(gè)參數(shù)a,b 比較a,b的大小 返回a,b中最大的那個(gè)數(shù)
def f(a,b):
if a>b:
return a
else:
return b
num_sum = f(5,8)
print(num_sum)
結(jié)果:8
比較大小的這個(gè)寫法有點(diǎn)麻煩,我們?cè)谶@里學(xué)一個(gè)三元運(yùn)算符
def f(a,b):
c = a if a > b else b #當(dāng)a>b就把a(bǔ)賦值給c,否則就把b賦值給c
return c
msg = f(5,7)
print(msg)
結(jié)果:
7
2, 關(guān)鍵字參數(shù)
位置參數(shù)好不好呢? 如果是少量的參數(shù)還算OK, 沒有問題. 但是如果函數(shù)在定義的時(shí)候參數(shù)非常多怎么辦? 程序員必須記住, 我有哪些參數(shù), 而且還有記住每個(gè)參數(shù)的位置, 否則函數(shù)就不能正常調(diào)用了. 那則么辦呢? python提出了一種叫做關(guān)鍵字參數(shù). 我們不需要記住每個(gè)參數(shù)的位置. 只要記住每個(gè)參數(shù)的名字就可以了
def date(sex, age, hobby):
print("拿出手機(jī)")
print("打開陌陌")
print('設(shè)置篩選條件:性別: %s,年齡:%s,愛好:%s' %(sex, age, hobby))
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
date(hobby='唱歌',sex='女',age='25~30',)
搞定, 這樣就不需要記住繁瑣的參數(shù)位置了.
3, 混合參數(shù)
可以把上面兩種參數(shù)混合著使用. 也就是說在調(diào)用函數(shù)的時(shí)候即可以給出位置參數(shù), 也可以指定關(guān)鍵字參數(shù).
混合參數(shù)一定要記住:關(guān)鍵字參數(shù)一定在位置參數(shù)后面。
def date(sex, age, hobby):
print("拿出手機(jī)")
print("打開陌陌")
print('設(shè)置篩選條件:性別: %s,年齡:%s,愛好:%s' %(sex, age, hobby))
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
date('女',hobby='唱歌',age='25~30',)
綜上: 在實(shí)參的?角度來看參數(shù)分為三種:
1. 位置參數(shù)
2. 關(guān)鍵字參數(shù)
3. 混合參數(shù), 位置參數(shù)必須在關(guān)鍵字參數(shù)前面
接下來我們從形參角度分析,函數(shù)的參數(shù)
形參角度
1, 位置參數(shù)
位置參數(shù)其實(shí)與實(shí)參角度的位置參數(shù)是一樣的,就是按照位置從左至右,一一對(duì)應(yīng)
def date(sex, age, hobby):
print("拿出手機(jī)")
print("打開陌陌")
print('設(shè)置篩選條件:性別: %s,年齡:%s,愛好:%s' %(sex, age, hobby))
print("找個(gè)漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
date('女','25~30','唱歌')
2, 默認(rèn)值參數(shù)
在函數(shù)聲明的時(shí)候, 就可以給出函數(shù)參數(shù)的默認(rèn)值. 默認(rèn)值參數(shù)一般是這個(gè)參數(shù)使用率較高,才會(huì)設(shè)置默認(rèn)值參數(shù),可以看看open函數(shù)的源碼,mode=‘r’就是默認(rèn)值參數(shù). 比如, 我們錄入咱們班學(xué)生的基本信息. 通過調(diào)查發(fā)現(xiàn). 我們班大部分學(xué)生都是男生. 這個(gè)時(shí) 候就可以給出?一個(gè)sex='男'的默認(rèn)值.
def stu_info(name, age, sex='男'):
print("錄入學(xué)生信息")
print(name, age, sex)
print("錄入完畢")
stu_info("張強(qiáng)", 18)
注意:必須先聲明在位置參數(shù),才能聲明關(guān)鍵字參數(shù)
綜上:在形參的角度來看
- 位置參數(shù)
- 默認(rèn)認(rèn)值參數(shù)(大多數(shù)傳進(jìn)來的參數(shù)都是一樣的, 一般用默認(rèn)參數(shù)
函數(shù)的形參角度參數(shù)還有兩種,親看下一篇博客
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

