Python函數(shù)的定義與調(diào)用方法實(shí)例
1.定義和調(diào)用函數(shù)
Python 中使用def語(yǔ)句創(chuàng)建函數(shù),其一般的格式如下所示:
def name(arg1, arg2, ...,argN):
statements下面這段代碼定義了一個(gè)簡(jiǎn)單函數(shù)。
def repeator(s, n):
result = s * n
print(result)這段代碼僅僅是對(duì)函數(shù)的定義,并沒有調(diào)用執(zhí)行。這條定義語(yǔ)句運(yùn)行后會(huì)新建一個(gè)名為repeator的變量名,其類型為function,即函數(shù)。
def repeator(s, n):
result = s * n
print(result)
print(type(repeator))
# <class 'function'> 與內(nèi)置函數(shù)一樣,定義完函數(shù)后,可以通過函數(shù)名調(diào)用執(zhí)行。
def repeator(s, n):
result = s * n
print(result)
repeator('嗷', 3)
# 嗷嗷嗷在很多情況下,函數(shù)需要將計(jì)算的結(jié)果返回到調(diào)用處。在這類函數(shù)的函數(shù)體中,通常包含一條return語(yǔ)句:
def name(arg1, arg2, ...,argN):
statements
return value在創(chuàng)建函數(shù)時(shí), 沒有在函數(shù)體中添加return語(yǔ)句,Python 也會(huì)默默地在函數(shù)體最后添加一條return None。
def repeator(s, n):
result = s * n
print(result)
value = repeator('嗷', 3)
# 嗷嗷嗷
print(value)
# None函數(shù)如果以返回值來(lái)輸出:
def repeator(s, n):
result = s * n
return result
print(repeator('嗷', 3))
# 嗷嗷嗷在 Python 中, 還允許在函數(shù)中返回多個(gè)值。 只需將返回值以逗號(hào)隔開, 放在return關(guān)鍵字后面即可。
def calculator(m, n):
return m+n, m-n, m*n, m/n
i, j = 2, 4
r1, r2, r3, r4 = calculator(i, j)
print(f'{i} 和 {j} 的加減乘除運(yùn)算結(jié)果是:{r1},{r2},{r3},{r4}')
# 2 和 4 的加減乘除運(yùn)算結(jié)果是:6,-2,8,0.5在這里總結(jié)一下函數(shù)調(diào)用的四個(gè)步驟:
- 程序執(zhí)行到函數(shù)調(diào)用時(shí),在調(diào)用處暫停,等待函數(shù)執(zhí)行完畢;
- 將實(shí)參賦值給函數(shù)的形參;
- 執(zhí)行函數(shù)體中的語(yǔ)句;
- 調(diào)用結(jié)束后,回到調(diào)用前暫停處繼續(xù)執(zhí)行,如果函數(shù)體中執(zhí)行了
return語(yǔ)句,return關(guān)鍵字后的值會(huì)返回到暫停處,供程序使用,否則函數(shù)返回None值。
2.函數(shù)參數(shù)
2.1 參數(shù)傳遞
參數(shù)的傳遞過程,實(shí)際上是一個(gè)賦值的過程。在調(diào)用函數(shù)時(shí),調(diào)用者的實(shí)際參數(shù)自動(dòng)賦值給函數(shù)的形式參數(shù)變量。
def avg(m, n):
return (m + n) /2
print(avg(5, 2))
# 3.52.2 不可變和可變類型參數(shù)
目前我們所學(xué)習(xí)的不可變類型包括:整型、浮點(diǎn)型、字符串和元組,可變類型有:列表、字典和集合等。這些都可以作為參數(shù)的類型。但參數(shù)在函數(shù)中使用時(shí),這兩種類型的表現(xiàn)有所不同。
下面的代碼調(diào)用時(shí),傳遞的是不可變類型的參數(shù):
def priceChanger(p):
p = p + 10
print('改變后的價(jià)格:{:.2f}'.format(p))
price = 10.8
priceChanger(price)
# 改變后的價(jià)格:20.80
print(price)
# 10.8在使用可變參數(shù)時(shí),函數(shù)體中可以改變參數(shù)的元素:
def contentChanger(name_list):
name_list[0], name_list[1] = name_list[1], name_list[0]
print('函數(shù)中的 name_list:', name_list)
language_name = ['C', 'Python']
contentChanger(language_name)
# 函數(shù)中的 name_list: ['Python', 'C']
print('調(diào)用函數(shù)后的 language_name:', language_name)
# 調(diào)用函數(shù)后的 language_name: ['Python', 'C']因此,在使用可變類型參數(shù)時(shí)需要特別注意,如果在函數(shù)中修改了參數(shù)的元素,這種修改會(huì)影響調(diào)用者的變量。 如果想消除這種影響,可以使用列表copy方法或者使用分片操作創(chuàng)建新列表。
2.3 位置參數(shù)
位置參數(shù)是調(diào)用函數(shù)為形參賦值的一種默認(rèn)方式。實(shí)參與形參按照從左到右的位置順序依次賦值。
def myMinus(num1, num2):
return num1 - num2
print(myMinus(5, 2))
# 3賦值順序改變將得到不同的結(jié)果。
def myMinus(num1, num2):
return num1 - num2
print(myMinus(2, 5))
# -32.4 關(guān)鍵字參數(shù)
為了避免位置參數(shù)賦值帶來(lái)的混亂,Python 允許調(diào)用函數(shù)時(shí)通過關(guān)鍵字參數(shù)的形式指定形參與實(shí)參的對(duì)應(yīng)關(guān)系。 調(diào)用者使用name=value的形式來(lái)指定函數(shù)中的哪個(gè)形參接受某個(gè)值:
def myMinus(num1, num2):
return num1 - num2
print(myMinus(num1=5, num2=2))
# 3
print(myMinus(num2=2, num1=5))
# 32.5 指定默認(rèn)參數(shù)值
在函數(shù)定義時(shí),可以為參數(shù)指定值。這樣當(dāng)函數(shù)調(diào)用者沒有提供對(duì)應(yīng)參數(shù)值時(shí),就可以使用指定的默認(rèn)值。 指定默認(rèn)參數(shù)值在 Python 的函數(shù)中廣泛存在。例如,打印函數(shù)print,在查看其幫助時(shí),其函數(shù)的部分描述如下:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.可以看到,print函數(shù)的sep、end、file和flush參數(shù)都指定了默認(rèn)值。
print('C', 'C++', 'Java', 'Python')
# C C++ Java Python如果調(diào)用時(shí)指定了sep參數(shù)的值,則會(huì)使用該值來(lái)連接每個(gè)打印的值。
print('C', 'C++', 'Java', 'Python', sep='_')
# C_C++_Java_Python在定義函數(shù)時(shí), 為形參指定默認(rèn)值, 就可以讓該形參在調(diào)用時(shí)變?yōu)榭蛇x:
def myMod(x, y=2):
return x % y
print(myMod(13,4))
# 1
print(myMod(13))
# 12.6 任意數(shù)量參數(shù)
Python 允許在定義函數(shù)時(shí)使用單星號(hào)*來(lái)收集位置參數(shù),雙星號(hào)**收集關(guān)鍵字參數(shù)。
2.6.1 單星號(hào)*收集位置參數(shù)
單個(gè)星號(hào)將一組可變數(shù)量的位置參數(shù)組合成參數(shù)值的元組。在函數(shù)內(nèi)部可以通過訪問元組中的每個(gè)元素來(lái)使用參數(shù)。
def m_value(*values):
max_value = max(values)
min_value = min(values)
print(f'最大值: {max_value}, 最小值: {min_value}')
m_value(8, 6, 7, 4, 3, 9)
# 最大值: 9, 最小值: 32.6.2 雙星號(hào)**收集關(guān)鍵字參數(shù)
針對(duì)形參的關(guān)鍵字參數(shù)賦值形式, 利用 Python 定義函數(shù)時(shí), 在形參前面加上雙星號(hào)**來(lái)定義收集關(guān)鍵字參數(shù)的形參。此時(shí)形參是字典類型。
def f(**info):
if 'name' not in info.keys():
print('必須擁有名稱信息。')
else:
print(info['name'] + '的誕生年份:' + info.get('time', '不詳'))
f(name = 'C', time = '1972')
# C的誕生年份:1972
f(name = 'Python')
# Python的誕生年份:不詳2.7 解包參數(shù)
在調(diào)用函數(shù)時(shí),實(shí)參也可以使用*和**語(yǔ)法。此時(shí)不是收集參數(shù),正好相反, 實(shí)參前加上*或**執(zhí)行的是參數(shù)解包。 通常來(lái)說(shuō), 在列表、元組等類型的實(shí)參值前加上*, 將這些類型的元素解包成位置參數(shù)的形式;在字典類型的實(shí)參值前加上**,將字典的元組解包成關(guān)鍵字參數(shù)的形式。
當(dāng)調(diào)用者的數(shù)據(jù)存儲(chǔ)在列表中時(shí), 可以通過在列表前加上*對(duì)列表解包來(lái)實(shí)現(xiàn)位置參數(shù)形式的調(diào)用。
當(dāng)調(diào)用者的數(shù)據(jù)存儲(chǔ)在字典中時(shí), 可以通過在字典前加上**對(duì)字典解包來(lái)實(shí)現(xiàn)關(guān)鍵字參數(shù)形式的調(diào)用。
def f(name, time='不詳'):
if name and len(name) > 0:
print(name + '的誕生年份:' + str(time))
else:
print('必須擁有名稱信息。')
info1 = ['C', '1972']
f(*info1)
# C的誕生年份:1972
info2 = {'name': 'Python', 'time': '1989'}
f(**info2)
# Python的誕生年份:1989總結(jié)
到此這篇關(guān)于Python函數(shù)的定義與調(diào)用方法的文章就介紹到這了,更多相關(guān)Python函數(shù)定義與調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python打造高效便捷的目錄結(jié)構(gòu)生成器
這篇文章主要為大家詳細(xì)介紹了如何使用Python開發(fā)一個(gè)目錄結(jié)構(gòu)生成器,它不僅能夠幫助用戶高效地生成文件夾目錄結(jié)構(gòu),還具備了很多智能化的功能,感興趣的小伙伴可以了解下2025-04-04
使用Nginx+uWsgi實(shí)現(xiàn)Python的Django框架站點(diǎn)動(dòng)靜分離
這篇文章主要介紹了使用Nginx+uWsgi實(shí)現(xiàn)Python的Django框架站點(diǎn)動(dòng)靜分離的部署實(shí)例,即靜態(tài)由Nginx處理而Python頁(yè)面由Django自帶的HTTP服務(wù)器處理,需要的朋友可以參考下2016-03-03
解決pygal.style的LightColorizedStyle參數(shù)問題
這篇文章主要介紹了解決pygal.style的LightColorizedStyle參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Python使用SymSpell打造簡(jiǎn)單的極速拼寫檢查引擎
在自然語(yǔ)言處理(NLP)領(lǐng)域,拼寫檢查是提升文本質(zhì)量的關(guān)鍵環(huán)節(jié),SymSpell是一個(gè)基于對(duì)稱刪除算法的Python庫(kù),下面小編就和大家詳細(xì)講講如何使用SymSpell打造簡(jiǎn)單的極速拼寫檢查引擎吧2026-04-04
基于Python開發(fā)輕量級(jí)Markdown筆記管理器
Markdown作為一種輕量級(jí)標(biāo)記語(yǔ)言,因其簡(jiǎn)潔的語(yǔ)法和出色的兼容性,已經(jīng)成為技術(shù)文檔撰寫和日常筆記記錄的事實(shí)標(biāo)準(zhǔn),下面我們就來(lái)看看如何使用Python開發(fā)一個(gè)輕量級(jí)Markdown筆記管理器吧2025-07-07
Python實(shí)現(xiàn)將字典內(nèi)容寫入json文件
這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)將字典內(nèi)容寫入json文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08

