全國咨詢/投訴熱線:400-618-4000

Python函數詳細教程,頂你看2天的視頻課!

更新時間:2020年01月13日16時25分 來源:傳智播客 瀏覽次數:

本文目錄

1、什么是函數?
2、如何定義函數?
3、如何調用函數?
4、函數參數傳遞
5、函數默認參數
6、不定長參數
7、函數的返回值
8、函數的四種類型



傳智播客



在實際開發中,如果有若干段代碼的執行邏輯完全相同,那么可以考慮將這些代碼抽取成一個函數,這樣不僅可以提高代碼的重用性,而且條理會更加清晰,可靠性更高。
函數是指組織好的,可重復使用的,用來實現單一或相關聯功能的代碼段,它能夠提高應用的模塊化和代碼的重復利用率。
Python提供了很多內建函數,如print()。除此之外,我們還可以自己創建函數,也就是自定義函數。接下來,看一段代碼:
print("*")
print("**")
print("****")
上述代碼中,使用多個print()函數輸出了一個三角形。如果需要在一個程序的不同位置輸出這個圖形,那么每次都使用print()函數輸出的做法是不可取的。為了提高編寫的效率以及代碼的重用性,我們可以把具有獨立功能的代碼塊組織成一個小模塊,這就是函數。


在Python中,你可以定義一個自己想要功能的函數,自定義函數的語法格式如下所示
def 函數名(參數列表):

         “函數_文檔字符串”

         函數體

return 表達式

基于上述格式,下面對函數定義的規則進行說明:
(1)函數代碼塊以def開頭,后面緊跟的是函數名和圓括號()。
(2)函數名的命名規則跟變量的命名規則是一樣的,即只能是字母、數字和下劃線的任何組合,但是不能以數字開頭,并且不能跟關鍵字重名。
(3)函數的參數必須放在圓括號中。
(4)函數的第1行語句可以選擇性地使用文檔字符串來存放函數說明。
(5)函數內容以冒號起始,并且縮進。
(6) return表達式結束函數,選擇性地返回一個值給調用方。不帶表達式的retu相當于返回None。

定義了函數之后,就相當于有了一段具有特定功能的代碼,要想讓這些代碼能夠執行,需要調用函數。調用函數的方式很簡單,通過“函數名()”即可完成調用。
# 定義一個函數,能夠完成打印信息功能
def print_info():
    print("-"*20)
    print("人生苦短,我用python!")
    print("-"*20)
# 調用函數
print_info()
在介紹函數的參數之前,我們先來解決一個問題。現在要求定義一個函數,這個函數用于計
算兩個數的和,并把計算的結果打印出來。把上述要求轉換為代碼,示例代碼如下:
def add():
    c = 11 + 22
    print(c)
以上函數的功能是計算11和22的和。此時,無論調用這個函數多少次,得到的結果永遠都是一樣的,而且只能計算固定的兩個數字的和,使得這個函數的局限性很大。
為了能讓定義的函數更加通用,即計算任意兩個數字的和,可以在定義函數的時候添加兩個參數,讓兩個參數來接收傳遞給函數的值。接下來,通過一個案例來演示函數是如何傳遞參數的。
def add(a, b):
    c = a + b
    print(c)

上面案例中,定義了能接收兩個參數的函數。其中,a為第一個參數,用于接收函數傳遞的第1個數值;b為第二個參數,接收的是函數的第2個數值。這時,如果想調用add函數,則需要給函數的參數傳遞兩個數值,如下所示為完整代碼:
def add(a, b):
    c = a + b
    print(c)
# 調用帶有參數的函數時,需要在小括號中傳遞數據。
add(35, 25)

上面代碼運行結果為:
50
需要注意的是,如果函數定義了多個參數,那么在調用函數的時候,傳輸的數據要和定義的參數一一對應。上面的案例中a=35,b=25,c=50。

定義函數時,可以給函數的參數設置默認值,這個參數就被稱為默認參數。當調用參數的時候,由于貓人參數在定義時已經被賦值,所以可以直接忽略,而其它參數是必須要傳入值的。
如果默認參數沒有傳入值,則直接使用默認的值;如果默認參數傳入了值,則使用傳入的新值替代。
下面我們通過一個案例來介紹。
def print_info(name, age=35):
    # 打印任何傳入的字符串
    print("Name:", name)
    print("age:", age)
# 調用print_info(name="miki")
print_info(name="miki")
print_info(name="miki", age=9)
運行結果為:
Name: miki
age: 35
Name: miki
age: 9

在上面案例,第1~4行代碼定義了帶有兩個參數的print_info函數。其中,name參數沒有設置默認值,age作為默認參數已經設置了默認值。在第6行調用print_into函數時,由于只傳入了name參數的值,所以程序會使用age參數的默認值;在第7行調用print_info函數時,同時傳入了name和age兩個參數的值,所以程序會使用傳給age參數的新值。
需要注意的是,帶有默認值的參數一定要位于參數列表的最后面,否則程序會報錯。例如,給 print_info函數添加一個參數sex,放在參數列表的最后面,則報錯信息如下圖所示:

python報錯


通常在定義一個函數時,若希望函數能夠處理的參數個數比當初定義的參數個數多,此時可以在函數中使用不定長參數。其基本的語法格式如下:
def 函數名([forml_args,] *args, **kwargs):
    "函數_文檔字符串"
    函數體
return 表達式

在上述格式中,函數共有3個參數。其中,formal_args為形參(也就是前面所用的參數,如(a,b),*args和** kwargs為不定長參數。當調用函數的時候,函數傳入的參數個數會優先匹配formal_args參數的個數。如果傳入的參數個數和formal_args參數的個數相同,不定長參數會返回空的元組或字典;如果傳入參數的個數比formal_args參數的個數多,可以分為如下兩種情況:
(1)如果傳入的參數沒有指定名稱,那么*args會以元組的形式存放這些多余的參數
(2)如果傳入的參數指定了名稱,如m=1,那么* kwargs會以字典的形式存放這些被命名的參數,如{m:1}。
為了大家更好地理解,先通過一個簡單的案例進行演示,具體如下所示。
def test(a, b, *args):
    print(a)
    print(b)
    print(args)
test(11, 12)


運行結果如下:
11
12
()
在上面案例中,第1~4行代碼定義了帶有多個參數的test函數。其中,args為不定長參數。當在第5行中調用test函數時,由于只傳入11和122這兩個數,所以這兩個數會從左向右依次匹配test函數定義時的參數a和b,此時,args參數沒有接收到數據,所以為一個空元組。
如果在調用test函數時,傳入多個參數(這里指的是大于2個參數)情況又是什么樣的呢?
下面看一段實例代碼:
def test(a, b, *args):
    print(a)
    print(b)
    print(args)
test(11, 12, 13, 14, 15, 16, 17, 18)
運行結果如下:
11
12
(13, 14, 15, 16, 17, 18)
如果在參數列表的末尾使用* kwargs參數,示例代碼如下
def test(a, b, *args, **kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)
test(11, 12, 13, 14, 15, 16, 17, 18)
運行結果:
11
12
(13, 14, 15, 16, 17, 18)
{}
從兩次運行的結果可以看出,如果在調用test函數時傳入多個數值,那么這些數值會從左向
右依次匹配函數test定義時的參數。如果跟formal_args參數的個數匹配完,還有多余的參數,則這些多余的參數會組成一個元組,和不定長參數args進行匹配。此時,kwargs參數沒有接受到數據,所以為一個空字典。
在調用函數時,什么情況下傳入的數據會匹配參數kwargs呢?看下面案例:
def test(a, b, *args, **kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)
test(11, 12, 13, 14, 15, 16, 17, 18, m=22, n=33)
運行結果為:
11
12
(13, 14, 15, 16, 17, 18)
{'m': 22, 'n': 33}
從上述運行結果可以看出,如果參數是以鍵值對的形式傳入的,則使用** kwargs參數來接收。

所謂“返回值”,就是程序中的函數完成一件事情后,最后給調用者的結果。比如,定義一
個函數來獲取室內的溫度,一旦調用這個函數,函數就會把拿到的溫度值返回給調用者,這個溫暖值就是函數的返回值。在Python中,函數的返回值是使用 return語句來完成的。接下來,看一段示例代碼。
def add(a, b):
    c = a + b
    return c

或者
def add(a, b):
    return a + b
上面的代碼中,函數add中包含了return語句,意味著這有個函數的返回值,其返回值就是a和b相加的結果。


根據有沒有參數和返回值,函數大概可以分為以下四種類型:
(1)函數無參數,無返回值。
(2)函數無參數,有返回值。
(3)函數有參數,無返回值。
(4)函數有采參數,有返回值。
下面我們分別介紹。

1)無參數、無返回值的參數
無參數、無返回值的函數,既不能接受參數,也沒有返回值。
接下來,我們通過打印提示的函數來演示這類函數的使用。
def print_menu():
    print("-"*20)
    print("   xx涮鍋 點菜系統")
    print("    1. 羊肉涮鍋")
    print("    2. 牛肉涮鍋")
    print("    3. 豬肉涮鍋")
    print("-" * 20)
print_menu()

運行結果為:
無參數無返回值python函數


2)無參數、有返回值的函數
此類函數不能接收參數,但是可以返回某個數據,一般情況下,采集數據時會用此類函數。接下來,我們通過一個示例來演示,如下所示:
# 獲取溫度

def get_temperature():

    # 這里是溫度獲取的一些處理過程
    # 為了簡單起見,先模擬返回一個數據
    return 24
temperture = get_temperature()
print('當前的溫度為:', temperture)

運行結果為:
當前的溫度為: 24
3)有參數、無返回值的函數
在實際開發中,有參數、無返回值的函數用的極少,這是因為函數作為功能模塊,既然傳入了參數,絕大多數情況是希望使用返回值的。這里,大家對有參數、無返回值的函數有所了解即可,實例代碼如下:
def test(number_one, number_two):
    result = number_one + number_two
    print('計算結果為: %d'%result)
4)有參數、有返回值得函數
此類函數不能接收參數,但是可以返回某個數據,一般情況下,采集數據時會用此類函數。
接下來,我們通過一個示例來演示。
# 計算1~number的累積和
def calculate(nuber):
    result = 0
    i = 1
    while i <= nuber:
        result = result +i;
        i +=1
    return result
result = calculate(100)
print('1~100的累積和為:', result)
運行結果為: 
1~100的累積和為: 5050





猜你喜歡:

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校區

    14天免費試學

    基礎班入門課程限時免費

    申請試學名額

    15天免費試學

    基礎班入門課程限時免費

    申請試學名額

    15天免費試學

    基礎班入門課程限時免費

    申請試學名額

    15天免費試學

    基礎班入門課程限時免費

    申請試學名額

    20天免費試學

    基礎班入門課程限時免費

    申請試學名額

    8天免費試學

    基礎班入門課程限時免費

    申請試學名額

    20天免費試學

    基礎班入門課程限時免費

    申請試學名額

    5天免費試學

    基礎班入門課程限時免費

    申請試學名額

    0天免費試學

    基礎班入門課程限時免費

    申請試學名額

    12天免費試學

    基礎班入門課程限時免費

    申請試學名額

    5天免費試學

    基礎班入門課程限時免費

    申請試學名額

    5天免費試學

    基礎班入門課程限時免費

    申請試學名額

    10天免費試學

    基礎班入門課程限時免費

    申請試學名額
    彩票大奖得主家破人亡 天中图库好运彩精选 江西11选五5有规律吗 河北20选五好运三 佳永配资app官网版 河北十一选五 吉林11选五专家推荐 彩票投注技巧分析 最新广西快乐双彩开奖结果 新股票交易规则 河南481出号规律 山东11选五预测计划 股票融资融劵是什么意思 韩国快乐8开奖官网 陕西11选五一定有 股票指数实时数据接口 江西十一选五走势图定牛