python自學成才之路 函數詳細用法

函數簡介

python函數定義格式如下:

def function_name(params):
	'''
	函數體
	'''

和java定義函數不一樣的地方在於,java對於無返回值的函數需要使用void修飾,有返回值的函數需要顯示的指定返回值類型。而python則不需要添加這些修飾符,在python函數體中可以隨時通過return語句返回值而不需要添加任何修飾符。例如像下面這樣:

def function1():
    print("hello world")

def function2():
    return "hello world"

function1()
print(function2())

因此,在python函數中,玩法比較多的地方就在函數參數這一塊了。

函數參數

實參和形參

如下列所示,其中在定義function3時的username就稱爲形參,而在調用function3方法時的傳遞的參數peter則稱爲實參。

def function3(username):
    print(username)

function3("peter")

參數傳遞

在一個函數中可以有多個形參,那在傳遞實參時,實參時如何和形參對應上的呢,有以下幾種方法。

1.位置配對

python默認會按照傳遞的位置順序一一配對,所以在傳遞實參時位置很重要。

def function4(username,age):
    print("username = " + username + " , age = " + str(age))

function4("peter",12)
# 這樣傳遞就會出錯
function4(12,"peter")

2.通過關鍵字配對

還是上面那個function4,可以通過形參的關鍵字來做配對,使用關鍵字來做配對的時候,實參的順序就不重要了。

function4(username='peter',age=12)
function4(age=12,username='peter')

注意:關鍵字配對和位置配對不能混合使用。

# 下面這種寫法是錯誤的
function4(username='peter',12)

函數默認值

在聲明函數的時候,可以給函數形參指定默認值,這樣在傳遞實參的時候,有默認值的形參可以選擇性的傳遞。python語法規定默認值形參必須放在非默認值形參後邊。如下定義一個帶有默認值的形參addr,addr必須放在username和age後面。

def function4(username,age,addr = 'shanghai'):
    print("username = " + username + " , age = " + str(age) + ',addr = ' + addr)

function4(username='peter',age=12,addr = 'beijing')
function4(age=12,username='peter')

任意數量的實參

有時候不知道會傳遞多少參數,python通過在形參前加上一個*來表示可以傳遞任意數量的實參,如下所示:

def function5(*args):
    for arg in args:
        print(arg)

function5('peter',12,'shanghai')

也可以像下面這樣用,將任意個數的形參和其它形參結合在一起使用,但是要注意,像下面function6這樣的函數,size參數必須按照位置配對的方式傳遞,不能按照關鍵字配對的方式傳遞。

def function6(size,*args):
    print(size)
    for arg in args:
        print(arg)
function6(3,'peter',12,'shanghai')

如果想要按照關鍵字的方式傳遞,需要修改函數爲如下形式,下面這種形式的function6只能使用關鍵字配對的方式使用給size傳遞實參,不能按照位置方式配對。

def function6(*args,size):
    print(size)
    for arg in args:
        print(arg)
function6('peter',12,'shanghai',size = 3)

任意數量的實參其實可以直接通過列表的形式傳遞

function6(['peter',12,'shanghai'],size=3)

任意數量關鍵實參

如果要想在傳遞參數時,要求必須帶上關鍵字,則可以在定義形參時在形參前面加上**,如下所示:

def function7(** args):
    for k,v in args.items():
        print('key : ' + str(k) + ', v = ' + str(v))

function7(age = 7,name = 'peter',addr = 'shanghai')

其實質就是將關鍵字都封裝在一個字典當中,雖然說是通過一個字典來實現的任意數量關鍵字參數,但是在傳遞參數時不能直接傳遞一個字典,向下面這種傳遞方式就是錯誤的

function7({"age": 7, "name": 'peter', "addr": "shanghai"})

在定義任意數量的關鍵字參數的函數時也可以加上其它關鍵字形參

def function7(size,**args):
    print(size)
    for k, v in args.items():
        print('key : ' + str(k) + ', v = ' + str(v))
# 在傳遞參數時可以按照位置來配對也可以按照關鍵字來配對
function7(age=7, name='peter', addr='shanghai',size = 3) # 按照關鍵字來配對,順序不重要
function7(3,age=7, name='peter', addr='shanghai') # 按照位置來配對,size必須放在正確位置上

函數的導入

有時候我們希望所寫的函數能夠在其它模塊中被複用,這時候就可以在其它模塊中使用import來導入我們所寫的函數。
比如在functions.py文件中定義瞭如下函數:

def function1():
	'''

def funtion2():
	'''

def function3():
	'''

如果要在test.py文件中使用functions.py文件中的函數,可以使用下面幾種方法

1.導入整個模塊

import functions

#使用如下
functions.function1()

可以通過as來給導入的模塊自定義別名

import functions as fun

#使用如下
fun.function1()

2.導入特定函數

from functions import function1,function2

# 使用如下
function1()

也可以通過as給函數自定義別名

from functions import function1 as fun1,function2

#使用如下
fun1()

可以通過*來表示從模塊中導入所有的函數

from functions import *
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章