1. 程式人生 > >俗人說Python函式,果然通俗易懂!

俗人說Python函式,果然通俗易懂!

俗人說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. 走你

函式的執行流程

俗人說Python函式,果然通俗易懂!

 

現在就實現了約一次,我想要約幾次我就只需要

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)
結果:
約你
約我
約他
美女一枚

肯定好多朋友還是不明白上邊怎麼就列印美女一枚了,莫慌看下圖:

俗人說Python函式,果然通俗易懂!

 

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. 預設值引數(大多數傳進來的引數都是一樣的, 一般用預設引數