Python3基礎(chǔ)之函數(shù)用法
一般來(lái)說(shuō),函數(shù)(function)是組織好的、可重復(fù)使用的、具有一定功能的代碼段。函數(shù)能提高應(yīng)用的模塊性和代碼的重復(fù)利用率,在Python中已經(jīng)提供了很多的內(nèi)建函數(shù),比如print(),同時(shí)Python還允許用戶自定義函數(shù)。
本文就來(lái)實(shí)例總結(jié)一下Python3的函數(shù)用法,具體內(nèi)容如下:
一、定義
定義函數(shù)使用關(guān)鍵字def,后接函數(shù)名和放在圓括號(hào)( )中的可選參數(shù)列表,函數(shù)內(nèi)容以冒號(hào)起始并且縮進(jìn)。一般格式如下:
def 函數(shù)名(參數(shù)列表): """文檔字符串""" 函數(shù)體 return [expression]
注意:參數(shù)列表可選,文檔字符串可選,return語(yǔ)句可選。
示例:
def fib(n): """Print a Fibonacci series""" a, b = 0, 1 while b < n: print(b, end=' ') a, b = b, a+b print() fib(2000) # call f = fib # assignment f(2000)
函數(shù)名的值是一種用戶自定義的函數(shù)類型。函數(shù)名的值可以被賦予另一個(gè)名字,使其也能作為函數(shù)使用。
二、函數(shù)變量作用域
在函數(shù)內(nèi)部定義的變量擁有一個(gè)局部作用域,在函數(shù)外定義的擁有全局作用域。注意:在函數(shù)內(nèi)部可以引用全局變量,但無(wú)法對(duì)其賦值(除非用global進(jìn)行聲明)。
a = 5 # 全局變量a def func1(): print('func1() print a =', a) def func2(): a = 21 # 局部變量a print('func2() print a =', a) def func3(): global a a = 10 # 修改全局變量a print('func3() print a =', a) func1() func2() func3() print('the global a =', a)
三、函數(shù)調(diào)用
1、普通調(diào)用
與其他語(yǔ)言中函數(shù)調(diào)用一樣,Python中在調(diào)用函數(shù)時(shí),需要給定和形參相同個(gè)數(shù)的實(shí)參并按順序一一對(duì)應(yīng)。
def fun(name, age, gender): print('Name:',name,'Age:',age,'Gender:',gender,end=' ') print() fun('Jack', 20, 'man') # call
2、使用關(guān)鍵字參數(shù)調(diào)用函數(shù)
函數(shù)也可以通過keyword=value 形式的關(guān)鍵字參數(shù)來(lái)調(diào)用,因?yàn)槲覀兠鞔_指出了對(duì)應(yīng)關(guān)系,所以參數(shù)的順序也就無(wú)關(guān)緊要了。
def fun(name, age, gender): print('Name:',name,'Age:',age,'Gender:',gender,end=' ') print() fun(gender='man', name='Jack', age=20) # using keyword arguments
3、調(diào)用具有默認(rèn)實(shí)參的函數(shù)
Python中的函數(shù)也可以給一個(gè)或多個(gè)參數(shù)指定默認(rèn)值,這樣在調(diào)用時(shí)可以選擇性地省略該參數(shù):
def fun(a, b, c=5): print(a+b+c) fun(1,2) fun(1,2,3)
注意:通常情況下默認(rèn)值只被計(jì)算一次,但如果默認(rèn)值是一個(gè)可變對(duì)象時(shí)會(huì)有所不同, 如列表, 字典, 或大多類的對(duì)象時(shí)。例如,下面的函數(shù)在隨后的調(diào)用中會(huì)累積參數(shù)值:
def fun(a, L=[]): L.append(a) print(L) fun(1) # 輸出[1] fun(2) # 輸出[1, 2] fun(3) # 輸出[1, 2, 3]
4、調(diào)用可變參數(shù)函數(shù)
通過在形參前加一個(gè)星號(hào)(*)或兩個(gè)星號(hào)(**)來(lái)指定函數(shù)可以接收任意數(shù)量的實(shí)參。
def fun(*args): print(type(args)) print(args) fun(1,2,3,4,5,6) # 輸出: # <class 'tuple'> # (1, 2, 3, 4, 5, 6) def fun(**args): print(type(args)) print(args) fun(a=1,b=2,c=3,d=4,e=5) # 輸出: # <class 'dict'> # {'d': 4, 'e': 5, 'b': 2, 'c': 3, 'a': 1}
從兩個(gè)示例的輸出可以看出:當(dāng)參數(shù)形如*args時(shí),傳遞給函數(shù)的任意個(gè)實(shí)參會(huì)按位置被包裝進(jìn)一個(gè)元組(tuple);當(dāng)參數(shù)形如**args時(shí),傳遞給函數(shù)的任意個(gè)key=value實(shí)參會(huì)被包裝進(jìn)一個(gè)字典(dict)。
5、通過解包參數(shù)調(diào)用函數(shù)
上一點(diǎn)說(shuō)到傳遞任意數(shù)量的實(shí)參時(shí)會(huì)將它們打包進(jìn)一個(gè)元組或字典,當(dāng)然有打包也就有解包(unpacking)。通過 單星號(hào)和雙星號(hào)對(duì)List、Tuple和Dictionary進(jìn)行解包:
def fun(a=1, b=2, c=3): print(a+b+c) fun() # 正常調(diào)用 list1 = [11, 22, 33] dict1 = {'a':40, 'b':50, 'c':60} fun(*list1) # 解包列表 fun(**dict1) # 解包字典 # 輸出: # 6 # 66 # 150
注:*用于解包Sequence,**用于解包字典。解包字典會(huì)得到一系列的key=value,故本質(zhì)上就是使用關(guān)鍵字參數(shù)調(diào)用函數(shù)。
四、lambda表達(dá)式
lambda關(guān)鍵詞能創(chuàng)建小型匿名函數(shù)。lambda函數(shù)能接收任何數(shù)量的參數(shù)但只能返回一個(gè)表達(dá)式的值,它的一般形式如下:
lambda [arg1 [,arg2,.....argn]] : expression
lambda表達(dá)式可以在任何需要函數(shù)對(duì)象的地方使用,它們?cè)谡Z(yǔ)法上被限制為單一的表達(dá)式:
f = lambda x, y: x+y print(f(10, 20)) def make_fun(n): return lambda x: x+n f = make_fun(15) print(f(5))
五、文檔字符串
函式體的第一個(gè)語(yǔ)句可以是三引號(hào)括起來(lái)的字符串, 這個(gè)字符串就是函數(shù)的文檔字符串,或稱為docstring 。我們可以使用print(function.__doc__)輸出文檔:
def fun(): """Some information of this function. This is documentation string.""" return print(fun.__doc__)
文檔字符串主要用于描述一些關(guān)于函數(shù)的信息,讓用戶交互地瀏覽和輸出。建議養(yǎng)成在代碼中添加文檔字符串的好習(xí)慣。
- 零基礎(chǔ)寫python爬蟲之爬蟲編寫全記錄
- Python類的基礎(chǔ)入門知識(shí)
- Python正則表達(dá)式之基礎(chǔ)篇
- Python3基礎(chǔ)之list列表實(shí)例解析
- Python學(xué)習(xí)筆記(一)(基礎(chǔ)入門之環(huán)境搭建)
- python基礎(chǔ)教程之基本數(shù)據(jù)類型和變量聲明介紹
- python基礎(chǔ)教程之lambda表達(dá)式使用方法
- python3爬蟲之入門基礎(chǔ)和正則表達(dá)式
- Python2.5/2.6實(shí)用教程 入門基礎(chǔ)篇
- Python中一些不為人知的基礎(chǔ)技巧總結(jié)
相關(guān)文章
python網(wǎng)絡(luò)爬蟲學(xué)習(xí)筆記(1)
這篇文章主要為大家詳細(xì)介紹了python網(wǎng)絡(luò)爬蟲學(xué)習(xí)筆記的第一篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04python基于搜索引擎實(shí)現(xiàn)文章查重功能
這篇文章主要介紹了python基于搜索引擎實(shí)現(xiàn)文章查重功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05python?使用?with?open()?as?讀寫文件的操作方法
這篇文章主要介紹了python?使用?with?open()as?讀寫文件的操作代碼,寫文件和讀文件是一樣的,唯一區(qū)別是調(diào)用open()函數(shù)時(shí),傳入標(biāo)識(shí)符'w'或者'wb'表示寫文本文件或?qū)懚M(jìn)制文件,需要的朋友可以參考下2022-11-11Pytorch基礎(chǔ)之torch.randperm的使用
這篇文章主要介紹了Pytorch基礎(chǔ)之torch.randperm的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Python操作json數(shù)據(jù)的一個(gè)簡(jiǎn)單例子
這篇文章主要介紹了Python操作json數(shù)據(jù)的一個(gè)簡(jiǎn)單例子,需要的朋友可以參考下2014-04-04tensorflow實(shí)現(xiàn)softma識(shí)別MNIST
這篇文章主要為大家詳細(xì)介紹了tensorflow實(shí)現(xiàn)softma識(shí)別MNIST,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03