俗人說Python函式,果然通俗易懂!
什麼是函式,如果你覺得本人非常有趣,可以加本人的威:1613161916一起探討python!
我們目前為止,已經可以完成一些軟體的基本功能了,那麼我們來完成這樣一個功能:約pao
pint("拿出手機")
print("開啟陌陌")
print("找個漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
ok so easy我們已經完成了對一個功能的描述,那麼問題來了,我還想在約一次整麼搞,是不是就是在寫一遍
# 約一次
pint("拿出手機")
print("開啟陌陌")
print("找個漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
# 再約一次
pint("拿出手機")
print("開啟陌陌")
print("找個漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
ok 非常簡單搞定了,但是我還想約上個10次8次的,怎麼搞,加個迴圈不就行了嗎?
while True:
pint("拿出手機")
print("開啟陌陌")
print("找個漂亮的妹子")
print("問她,約不約啊!")
print("ok 走起")
這樣不就能實現不停的約了嗎?但是呢 我一直約不幹別的了.人要有節制,有需求了再約,這樣比較好.所以呢這樣寫是不行的
最好是我想什麼時候約就什麼時候約. 好了說的這 我們就這樣做,把約這個事,先計劃好,然後按照安排好的流程.在需要約的時候 把這個約
的流程拿出來執行以下就好了.那麼這裡.我們可以先去定義一個事情或者是功能,等到需要的時候直接去用就好了.那麼這裡定義東西就是一個函式
函式:對程式碼塊和功能的封裝和定義
函式的定義
首先咱們認識一下要實現我們剛說的功能必備的知識點
def 函式名():
函式體
我們使用def關鍵字來定義函式,函式的定義語法,這裡的函式名的命名規則和變數的命名規則一樣.自己回顧一下變數的命名規則
函式體:就是函式被執行之後要執行的程式碼
我們現在就來實現剛剛我們說的定義一個約pao功能:
def yue():
print("拿出手機")
print("開啟陌陌")
print("找一個漂亮的妹子")
print("問她,約不約啊")
print("ok 走起")
哦了,這就定義完了,但是這個時候我們去執行,會發生什麼現象? 什麼都沒有發生.因為我只定義了一個函式.但是還沒有執行過這個函式.
函式的呼叫
使用函式名加小括號就可以呼叫了 寫法:函式名() 這個時候函式的函式體會被執行
# 呼叫yue函式
def yue():
print("拿出手機")
print("開啟陌陌")
print("找一個漂亮的妹子")
print("問 約不約啊")
print("ok 走起")
yue() # 這是yue函式的呼叫
結果:
拿出⼿手機
開啟陌陌
找個漂亮的妹⼦
問她, 約不約啊
ok. 走你
函式的執行流程
現在就實現了約一次,我想要約幾次我就只需要
yue()
yue()
yue()
yue()
yue()
yue()
直接呼叫定義好的函式就可以了 咱們約完之後的得有個結果吧, 比如是約的蘿莉,還是大媽啊總得有個結果,那麼這個結果
怎麼來描述和獲得呢? 這就涉及到函式的返回值啦
函式的返回值
執行完函式之後,我們可以使用return來返回結果
def yue():
print("約你")
print("約我")
print("約他")
return
print("約誰呀") # 這句話不會被執行
yue()
函式中遇到return,此函式結束.不在繼續執行
我們現在有return返回值,我們試試返回個東西
def yue():
print("約你")
print("約我")
print("約他")
return "美女一枚"
yue()
我們現在返回了一個字串,但是返回給誰了呢? 這個返回值返回給函式的呼叫者了,我們來看一下
def yue():
print("約你")
print("約我")
print("約他")
return '美女一枚'
girl = yue()
print(girl)
結果:
約你
約我
約他
美女一枚
肯定好多朋友還是不明白上邊怎麼就列印美女一枚了,莫慌看下圖:
1.定義了一個函式yue
2.呼叫函式
3.執行函式裡的約你
4.執行函式裡的約我
5.執行函式裡的約他
6.返回給呼叫者一個字串,這個呼叫者就是yue()
7.將返回的字串通過一個等號賦值給白變數girl
8.列印變數girl的值
函式的返回值可以有多個結果:
def yue():
print("約你")
print("約我")
print("約他")
return "美女一枚", "蘿莉一枚"
girl = yue()
print(type(girl)) # tuple
總結一下:
1.遇到return,此函式結束,函式後面的東西將不會在執行
2.return 返回值
關於返回值:
如果return什麼都不寫或者乾脆就沒寫return,返回的結果就是None
如果return後面寫了一哥值,則呼叫者可以接受一個結果
如果return後面寫了多個結果,則呼叫者可以接受一個tuple,呼叫者可以直接使用解構獲取多個變數
OK,完美 可以得到結果了 但是我們約的方式是不是有點問題啊?陌陌現在還能約到嗎?約不到了 我們換探探 那要是過幾天探探也不行了
是不是會有一個替代品,那你們想有一個替代的,你就需要去改程式碼.是不是有點不合適了 最好的方式是想用什麼約就用什麼約 ok 我們也是可以實現的
我們可以在函式後邊的括號裡搞點事情
函式的引數
引數,也就是函式括號裡的內容 函式在呼叫的時候指定一個具體的變數的值 就是引數.寫法如下:
def 函式名(引數):
函式體
我們應該把程式碼改一下,能夠實現我剛說的那種效果
def yue(chat):
print("拿出⼿手機")
print("開啟"+chat)
print("找個漂亮的妹⼦子")
print("約不不約")
yue("陌陌")
yue("微信")
yue("探探")
結果:
拿出手機
開啟陌陌
找個漂亮的妹⼦
約不約
拿出⼿機
開啟微信
找個漂亮的妹⼦
約不約
拿出手機
開啟探探
找個漂亮的妹⼦
約不約
搞定了. 我們在呼叫yue的時候給chat一個值. 然後再執行函式體.
引數
1.形參
寫在函式宣告的位置的變數叫形參,形式上的一個完整.表示這個函式需要xxx
2.實參
在函式呼叫的時候給函式傳遞的值.加實參,實際執行的時候給函式傳遞的資訊.表示給函式xxx
3.傳參
給函式傳遞資訊的時候將實際引數交給形式引數的過程被稱為傳參.
def yue(chat): # chat 形參
print("拿出手機")
print("開啟"+chat)
print("找個漂亮的妹子")
print("約不約")
yue("陌陌") # 實參
len("字串") # "字串"在這⾥裡裡就是實參
print("麻花藤") # "麻花藤"就是實參
引數的分類
1.位置引數
約到現在,有沒有想過這麼一個問題,啥樣的約麼? 哪裡的都約麼? 不一定吧.比如我現在在北京,我很寂寞,我喜歡小姐姐
濤哥 在哈爾濱,很寂寞 大媽就行了 .需要是不一樣的 而我們現在的函式沒沒有這寫功能 那怎麼辦呢? 很簡單 多來幾個引數就好了
def yue(chat,addr,age): # chat 形參
print("拿出手機")
print("開啟"+chat)
print("找個" + addr +"附近漂亮的" + str(age) + "歲妹子")
print("約不約")
yue("陌陌","北京",18) # 實參
結果:
拿出手機
開啟陌陌
找個北京附近漂亮的18歲妹子
約不約
上述程式碼分析: 在訪問yue()的時候,我們按照位置的順序分別把"陌陌","北京",18賦值給了chat,addr,age,在傳參過程中.系統會按照位置吧實參賦值到形參
練習
編寫函式,給函式傳遞兩個引數a,b a,b相加 返回a引數和b引數相加的和
def f(a,b):
c = a+b
return c
num_sum = f(5,8)
print(num_sum)
結果: 13
編寫函式,給函式傳遞兩個引數a,b 比較a,b的大小 返回a,b中最大的那個數
def f(a,b):
if a>b:
return a
else:
return b
num_sum = f(5,8)
print(num_sum)
結果:8
比較大小的這個寫法有點麻煩,我們在這裡學一個三元運算子
def f(a,b):
c = a if a > b else b #當a>b就把a賦值給c,否則就把b賦值給c
return c
msg = f(5,7)
print(msg)
結果:
7
關鍵字引數
位置引數好不好呢? 如果是少量的引數還算OK, 沒有問題. 但是如果函式在定義的時候引數非常多怎麼辦? 程式設計師必須記住, 我有哪些引數, 而且還有記住每個引數的位置, 否則函式就不能正常呼叫了. 那則麼辦呢? python提出了一種叫做關鍵字引數. 我們不需要記住每個引數的位置. 只要記住每個引數的名字就可以了
def yue(chat, address, age):
print("拿出手機")
print("開啟"+chat)
print("找個"+address+"附近漂亮的"+str(age)+"歲妹子")
print("約不約")
yue(chat="微信", age=18, address="北京") # 關鍵字引數.
結果:
拿出手機
開啟微信
找個北京附近漂亮的18歲妹子
約不約
搞定, 這樣就不需要記住繁瑣的引數位置了.
混合引數
可以把上面兩種引數混合著使用. 也就是說在呼叫函式的時候即可以給出位置引數, 也可以指定關鍵字引數.
# 混合引數
yue("微信", age=18, address="上海")# 正確.第一個位置賦值給chat, 後面的引數開始指定關鍵字.
yue(age="18", "微信", address="廣州") # 錯誤, 最開始使用了關鍵字引數, 那麼後面的 微信的位置就串了, 容易出現混亂
注意: 在使用混合引數的時候, 關鍵字引數必須在位置引數後面
綜上: 在實參的⾓角度來看. 分為三種:
1. 位置引數
2. 關鍵字引數
3. 混合引數, 位置引數必須在關鍵字引數前面
位置引數:
位置引數,按照位置來賦值,到目前為止,我們編寫的函式都是這種
def yue(chat, address, age):
print("拿出⼿手機")
print("開啟"+chat)
print("找個"+address+"附近漂亮的"+str(age)+"歲妹⼦子")
print("約不不約")
預設值引數:
在函式宣告的時候, 就可以給出函式引數的預設值. 在呼叫的時候可以 給出具體的值, 也可以不給值, 使⽤用預設值. 比如, 我們錄入咱們班學生的基本資訊. 通過調查發現. 我們班大部分學生都是男生. 這個時 候就可以給出⼀一個sex='男'的預設值.
def stu_info(name, age, sex='男'):
print("錄⼊入學⽣生資訊")
print(name, age, sex)
print("錄⼊入完畢")
stu_info("張強強", 18)
注意:必須先宣告在位置引數,才能宣告關鍵字引數
綜上:在形參的角度來看
1. 位置引數
2. 預設值引數(大多數傳進來的引數都是一樣的, 一般用預設引數