Python學(xué)習(xí)筆記四(函數(shù))

函數(shù)

作用

為了 提高編寫(xiě)的效率以及代碼的重用,把具有獨(dú)立功能的代碼塊組織為一個(gè)小模塊,這就是函數(shù)

格式

def 函數(shù)名():
    代碼

調(diào)用函數(shù)

函數(shù)名()  

函數(shù)的文檔說(shuō)明

方便了解函數(shù)的功能,便于維護(hù)

def demo(arg1: int, arg2: str, arg3=None):
    """

    我是函數(shù)的文檔說(shuō)明

    :param arg1: int 參數(shù)1

    :param arg2: str 參數(shù)2

    :param arg3: 默認(rèn)為None

    :return: None

    """

    # 鼠標(biāo)左鍵點(diǎn)一下函數(shù),Ctrl + Q
    pass
    
    
函數(shù)的文檔說(shuō)明

函數(shù)參數(shù)

什么是參數(shù)?參數(shù)的作用?

定義函數(shù)時(shí),在小括號(hào)“()”中間的,使用的標(biāo)識(shí)符,叫做參數(shù),多個(gè)參數(shù)之間使用“,”(逗號(hào))分隔。
作用:為了讓同一個(gè)函數(shù)可以執(zhí)行出不同的結(jié)果,提高函數(shù)的靈活性

定義帶參函數(shù)

def add2num(a, b):  # 參數(shù)根據(jù)需要數(shù)量可變,定義函數(shù)時(shí)的參數(shù),叫做形參
    c = a+b
    print c

調(diào)用帶有參數(shù)的函數(shù)

 # 調(diào)用時(shí)函數(shù)的參數(shù),叫做實(shí)參,
 # 實(shí)參的數(shù)量必須與形參的數(shù)量一樣,且位置一一對(duì)應(yīng)。
 # 如下 實(shí)參11 對(duì)應(yīng)形參a 
add2num(11, 22) 

函數(shù)的返回值

什么是返回值?為什么需要返回值?
在函數(shù)中,使用return 關(guān)鍵字返回的數(shù)據(jù)叫做函數(shù)的返回值。
作用:為了得到函數(shù)的處理結(jié)果,比如希望得到兩個(gè)數(shù)相加的結(jié)果

帶有返回值的函數(shù)

def add2num(a, b): 
    c = a+b
    return c

接收函數(shù)的返回值

# 調(diào)用函數(shù),將函數(shù)的返回值賦值給變量,通過(guò)變量使用返回值
result = add2num(100,98)  

四種函數(shù)形式

通過(guò)參數(shù)與返回值的組合,可以得到四種函數(shù)形式,可以根據(jù)需要靈活使用

無(wú)參數(shù),無(wú)返回值
無(wú)參數(shù),有返回值
有參數(shù),無(wú)返回值
有參數(shù),有返回值

四種函數(shù)形式

局部變量

什么是局部變量?作用是什么?

定義在函數(shù)內(nèi)部的變量,叫做局部變量。在不同函數(shù)內(nèi)部可以有相同名字的局部變量,但是他們之間互不干擾。
作用:在函數(shù)內(nèi)臨時(shí)保存數(shù)據(jù),讓數(shù)據(jù)方便使用。

# a,b,c 都是局部變量
def add2num(a, b):
    c = a+b
    print c

全局變量

什么是全局變量?作用是什么?

定義在函數(shù)外部的變量,叫做全局變量。
作用:全局范圍內(nèi)都可以使用的變量

# 定義全局變量
a = 100

def test1():
    print(a)  # 雖然沒(méi)有定義變量a但是依然可以獲取其數(shù)據(jù)

def test2():
    print(a)  # 雖然沒(méi)有定義變量a但是依然可以獲取其數(shù)據(jù)

局部變量與全局變量同名問(wèn)題

a =100  # 全局變量

def add2num(a, b):   # 局部變量
    c = a+b
    return c
    
  • 函數(shù)內(nèi)部,使用的是局部變量的值
  • 函數(shù)外部,或其他函數(shù)內(nèi)部,使用的全局變量的值

修改全局變量的值

  • 如果在函數(shù)中出現(xiàn)global 全局變量的名字,那么這個(gè)函數(shù)中即使出現(xiàn)和全局變量名相同的 變量名 = 數(shù)據(jù),也理解為對(duì)全局變量進(jìn)行修改,而不是定義局部變量。
  • 如果在一個(gè)函數(shù)中需要對(duì)多個(gè)全局變量進(jìn)行修改,那么可以使用
     # 可以使用一次global對(duì)多個(gè)全局變量進(jìn)行聲明
     global a, b
     # 還可以用多次global聲明都是可以的
     # global a
     # global b

全局變量 與 局部變量的區(qū)別

定義

  • 全局變量定義在函數(shù)外部
  • 局部變量定義在函數(shù)內(nèi)部

使用范圍

  • 全局變量可以在全局范圍內(nèi)使用。(函數(shù)內(nèi)部、函數(shù)外部)
  • 局部變量只能在定義變量的函數(shù)內(nèi)部使用

修改

  • 全局變量
  • 函數(shù)外 可以任意修改
  • 函數(shù)內(nèi) 需要使用global 先聲明之后,才能修改
  • 局部變量
  • 函數(shù)外 不能使用
  • 函數(shù)內(nèi) 可以任意修改

函數(shù)間共享數(shù)據(jù)

  • 全局變量
# 全局變量
a = 0


def func1():
    global a  # 在 func1 里修改全局變量
    a = 100
    print('func1----a=', a)


def func2():
    print('func2----a=', a)  # 在 func2 里可以使用 func1 的計(jì)算結(jié)果


def func3():
    global a  # 使用全局變量,很容易被第三者修改數(shù)據(jù),導(dǎo)致錯(cuò)誤
    a = 300
    print('func3----a=', a)


func1()
func3()
func2()
  • 函數(shù)傳參
#  函數(shù)傳參
def func1():
    a = 100
    print('func1----a=', a)
    return a  # func1 將結(jié)果作為返回值處理


def func2(a):
    print('func2----a=', a)  # 在 func2 里可以使用參數(shù)來(lái)接收 func1 的計(jì)算結(jié)果


def func3():
    global a
    a = 300
    print('func3----a=', a)


tmp = func1()
func3()
func2(tmp) 
  • 函數(shù)的嵌套調(diào)用
# 函數(shù)嵌套
def func1():
    a = 100
    print('func1----a=', a)
    return a  # func1 將結(jié)果作為返回值處理


def func2():
    a = func1()  # 在 func2 里直接調(diào)用 func1 并獲取返回值
    print('func2----a=', a)


def func3():
    global a
    a = 300
    print('func3----a=', a)


func3()
func2()


函數(shù)多返回值以及返回多值

多返回值

一個(gè)函數(shù)根據(jù)情況的不同,會(huì)出現(xiàn)多個(gè)return。

def demo(age):
    if age > 17:
        return "成年了"
    elif age > 12:
        return "青少年"
    else: 
        return "少年郎"

返回多值

同一個(gè)return,可以返回多個(gè)值。這里需要容器,來(lái)存放多個(gè)值。
容器有 String(字符串)、List(列表)、Tuple(元組)、Dictionary(字典)、Set(集合),雖然有這么多容器 推薦使用List(列表)、Tuple(元組)、Dictionary(字典)。

為什么不推薦使用String(字符串)、Set(集合)
?
因?yàn)镾tring(字符串)可以 split() 字符串,可以產(chǎn)生一個(gè)列表,所以不如直接使用列表
Set(集合)不能存儲(chǔ)重復(fù)數(shù)據(jù),而且不能存儲(chǔ)列表,字典,集合

def divid(a, b):
    quotient = a//b
    residue = a%b 
    return quotient, residue  # 默認(rèn)是元組

def divid(a, b):
    quotient = a//b
    residue = a%b 
    return [quotient, residue]  # 使用列表

def divid(a, b):
    quotient = a//b
    residue = a%b 
    return {"quotient":quotient, "residue":residue}  # 使用字典

函數(shù)參數(shù)

缺省參數(shù)

什么是缺省參數(shù)? 調(diào)用函數(shù)時(shí),缺省參數(shù)的值如果沒(méi)有傳入,則取默認(rèn)值。

def demo(args1,args2=""):  # args2 就是缺省參數(shù)
    pass

不定長(zhǎng)參數(shù)

  • *args, 在變量args前使用一個(gè) * (星號(hào)),表示用元組接收無(wú)人接收的位置參數(shù)
  • **kwargs,在變量kwargs前使用一個(gè) ** (兩個(gè)星號(hào)),表示用字典接收無(wú)人接收的關(guān)鍵字參數(shù)
def demo(args1, *args, **kwargs):
    print(args)

    print(kwargs)


demo(1, 2, 3, 4, 5, name="qwer", age=17, sex="gg")
不定長(zhǎng)參數(shù)

拆包

拆包

交換變量的值

  • 中間變量
a = 4
b = 5
c = 0

c = a
a = b
b = c
  • 數(shù)學(xué)運(yùn)算
a = 4
b = 5
a = a+b  # a=9, b=5
b = a-b  # a=9, b=4
a = a-b  # a=5, b=4
  • 打包拆包
a, b = 4, 5
a, b = b, a

引用

變量通過(guò)數(shù)據(jù)在內(nèi)存中的起始地址來(lái)讀取數(shù)據(jù)


引用

不可變類型

什么是不可變類型
不可變,數(shù)據(jù)內(nèi)容不可變。因?yàn)閿?shù)據(jù)內(nèi)容不可變,如果修改變量的值,則引用的地址會(huì)發(fā)生變化

  • Number(數(shù)字)
不可變類型-Number
  • Boolean(布爾)


    不可變類型-Boolean
  • String(字符串)


    不可變類型-String
  • Tuple(元組)
不可變類型-Tuple

可變類型

什么是可變類型

可變,數(shù)據(jù)內(nèi)容可變。因?yàn)閿?shù)據(jù)內(nèi)容可變,如果修改變量的值,則引用的地址不會(huì)發(fā)生變化

  • List(列表)


    可變類型-List
  • Dictionary(字典)


    可變類型-Dictionary
  • Set(集合)


    可變類型-Set

到此結(jié)?DragonFangQy?2018.4.7

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容