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

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
