真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python函數(shù)的返回值與嵌套函數(shù)是什么

這篇文章主要介紹“Python函數(shù)的返回值與嵌套函數(shù)是什么”,在日常操作中,相信很多人在Python函數(shù)的返回值與嵌套函數(shù)是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Python函數(shù)的返回值與嵌套函數(shù)是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司主營(yíng)連云網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開發(fā),連云h5小程序開發(fā)搭建,連云網(wǎng)站營(yíng)銷推廣歡迎連云等地區(qū)企業(yè)咨詢

1.什么是返回值
  • 返回值指的是函數(shù)返回的結(jié)果;

  • return執(zhí)行完畢后面的語(yǔ)句將不會(huì)再執(zhí)行;

def add(x, y):
    print(x, y)   #輸出:10 20
    return x + y   # 返回值, return以后的語(yǔ)句將不會(huì)再執(zhí)行
    print(x)
    print(y)
add(10,20)
  • 如果一個(gè)函數(shù)里面有兩個(gè)return,前面return執(zhí)行完畢,后面的return也不會(huì)執(zhí)行;

def add(x, y):
    print(x, y)    # 輸出:1 2
    return x + y   # 函數(shù)體內(nèi),碰到return語(yǔ)句,函數(shù)執(zhí)行完畢,之后的語(yǔ)句將不會(huì)再執(zhí)行
    return x - y   # 不會(huì)再次執(zhí)行
add(1,2)
2.函數(shù)的隱式返回和顯示返回
  • Python函數(shù)都有返回值,如果有return語(yǔ)句,是顯式返回;

  • 如果沒有return語(yǔ)句,默認(rèn)返回None,是隱式返回;

3.函數(shù)多值返回
  • 如果返回多個(gè)值通過逗號(hào)分開,會(huì)把值進(jìn)行壓縮,封裝成一個(gè)元組;

def get_data(x,y,z):
    return x + 1, y + 1, z + 1
print(get_data(1,2,3)) # 得到的是一個(gè)元組(2, 3, 4)
  • 如果返回一個(gè)列表,得到的就是一個(gè)列表;

def get_data(x,y,z):
    return [x + 1, y + 1, z + 1]
print(get_data(1,2,3))  # 得到的是一個(gè)列表[2, 3, 4]
4.什么是嵌套函數(shù)
def outer_function():
    # 內(nèi)部函數(shù)
    def inner_function():
        print("inner_function")  # 輸出:inner_function
    print("outer_function")      # 輸出:outer_function
    # 內(nèi)部調(diào)用
    inner_function()
outer_function()
# 注意:inner_function函數(shù)只能在outer_function函數(shù)內(nèi)部調(diào)用,無法再outer_function函數(shù)外部被調(diào)用
  • 嵌套函數(shù)的內(nèi)部函數(shù)只能在包含它的函數(shù)的直接父級(jí)調(diào)用,也就是只能在包含它的外部函數(shù)中調(diào)用;

  • 嵌套函數(shù)層數(shù)不宜過深,一般3層以內(nèi)即可,太深不夠直觀,容易造成代碼混亂;

5.函數(shù)作用域
  • 作用域指的是,一個(gè)標(biāo)識(shí)符的作用范圍就是這個(gè)標(biāo)識(shí)符的作用域;

  • 在函數(shù)里面定義的變量(即局部作用域)只能在函數(shù)體內(nèi)部被訪問,函數(shù)外部不能訪問;

def add(x, y):
    z = 100
    print(x, y , z)  #輸出:1 2 100
add(1,2)
print(z)  #報(bào)錯(cuò):NameError: name 'z' is not defined
  • 在函數(shù)外部定義的變量(即全局作用域)能在函數(shù)體外部被訪問,也能在函數(shù)體內(nèi)部被訪問;

z = 100
def add(x, y):
    print(x, y, z)# 輸出:1 2 100
add(1, 2)
print(z)  # 輸出:100
6.函數(shù)的閉包
  • 閉包:內(nèi)部函數(shù)引用了外部函數(shù)的變量,這就是閉包的定義;

  • 如果函數(shù)體想訪問變量,只能在變量定義之后才能訪問;

# 例1
x=5
def add():
    y = x + 1
    print(y)  #輸出:6
add()
# 例2
x=5
def add():
    x = x + 1  # 報(bào)錯(cuò):local variable 'x' referenced before assignment
add()
# 報(bào)錯(cuò)原因分析:
# 在例1中,函數(shù)內(nèi)部引用的x為函數(shù)外部的x, 因此x的值為5
# 在例2中,函數(shù)內(nèi)部重新定義了x的值,那么整個(gè)函數(shù)內(nèi)部都會(huì)使用這個(gè)內(nèi)部x,
# 因此在運(yùn)算x + 1的時(shí)候,x還沒有完成定義就被引用了,這里的x引用的一定是內(nèi)部正在定義的 x,不是函數(shù)外部的 x=5這個(gè)x;
# 例3:
x=5
def add():
    print(x) # 這里的x引用的是x = 1的x,但是執(zhí)行print(x)時(shí),x還沒有被定義,所以報(bào)錯(cuò):local variable 'x' referenced before assignment
    x =  1
add()
  • 如果要訪問函數(shù)體內(nèi)部的函數(shù),可以先把內(nèi)部函數(shù)的函數(shù)名作為外部函數(shù)的返回值,把外部函數(shù)的引用賦值給變量,再調(diào)用變量;

# 例4:
def outer_function():
    x = 100
    def inner_function():
        print(x)        # 內(nèi)部函數(shù)引用了外部函數(shù)的自由變量  輸出:100
    return inner_function
ret = outer_function()
ret()
7.關(guān)鍵字
  • global關(guān)鍵字:可以指定變量為全局變量,但是global關(guān)鍵字會(huì)污染全局變量,也就是會(huì)覆蓋之前全局變量的值,所以最好慎用;

x=1
def add():
    global x  # 使用global關(guān)鍵字,指定x的引用全局的x變量
    x = x + 1
    print(x)  #輸出:2
add()
x = 100
def foo():
    global x  # x被聲明了全局變量
    x = 10
    x += 1
    print(x)  # x的值為11
foo()
print(x)      # 輸出x的值為:11,原本這里應(yīng)該引用的是全局變量x = 100 的,因此global關(guān)鍵字污染了全局變量 x
  • nonlocal關(guān)鍵字:可以申明內(nèi)部函數(shù)的變量引用的是外部函數(shù)變量的值(作用域在外部函數(shù)),不是全局作用域的值,因此不會(huì)污染全局作用域;

def outer_function():
    x = 100
    def inner_function():
        x = x + 1       # 這樣會(huì)報(bào)錯(cuò),函數(shù)內(nèi)部重新定義了x的值,但是還沒有完成定義就被引用了
        print(x)
    return inner_function
ret = outer_function()
ret()
def outer_function():
    x = 1
    def inner_function():
        nonlocal x   # 使用nonlocal關(guān)鍵字聲明x 為外層函數(shù)的x的值
        x = x + 1    #所以這里使用的x 是外層函數(shù)的x
        print(x)   #輸出:2
    return inner_function
ret = outer_function()
ret()
8.函數(shù)默認(rèn)值的作用域
  • 同一個(gè)函數(shù)的生命周期相同,函數(shù)的默認(rèn)值會(huì)綁定在函數(shù)的整個(gè)生命周期上,不會(huì)因?yàn)楹瘮?shù)內(nèi)部對(duì)默認(rèn)值的操作而發(fā)生改變;

def add(lst = []):
    lst.append('hello')
    print(lst)
add() # 輸出:['hello']
print('id={}'.format(id(add)))   # 函數(shù)對(duì)象的id值不變,調(diào)用的是同一個(gè)函數(shù)  id=1837000
add() # 輸出['hello', 'hello']
print('id={}'.format(id(add)))   # 函數(shù)對(duì)象的id值不變,調(diào)用的是同一個(gè)函數(shù)  id=1837000
# 查看函數(shù)的位置參數(shù)的默認(rèn)值
print(add.__defaults__)    #輸出:(['hello', 'hello'],)
# 查看函數(shù)的關(guān)鍵字參數(shù)的默認(rèn)值
print(add.__kwdefaults__)  #輸出:None
  • 可以使用淺拷貝copy(簡(jiǎn)寫[:])來清空默認(rèn)值,那每次調(diào)用函數(shù),默認(rèn)值都為初始值;

def add(lst = []):
    lst = lst[:]
    lst.append('hello')
    print(lst)
add() # 輸出:['hello']
add() # 輸出:['hello']
  • 也可以通過參數(shù)值判斷來給默認(rèn)值重新賦值,那每次調(diào)用函數(shù),默認(rèn)值都為初始值;

def add(lst=None):
    if lst is None:
        lst = []
    lst.append(1)
    print(lst)
add()    # 輸出:[1]
print(add.__defaults__)  # 輸出: (None,)
add([1, 2, 3])    # 輸出: [1, 2, 3, 1]
print(add.__defaults__)  # 輸出:(None,)
add([4, 5, 6])     # 輸出:[4, 5, 6, 1]
print(add.__defaults__)    # 輸出:(None,)
9.函數(shù)銷毀
def add():
    print('add')
del add
add()
  • 可以通過 del 函數(shù)名 的方式來刪除函數(shù),再調(diào)用函數(shù)時(shí),就會(huì)報(bào)錯(cuò)不存在;

到此,關(guān)于“Python函數(shù)的返回值與嵌套函數(shù)是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!


當(dāng)前題目:Python函數(shù)的返回值與嵌套函數(shù)是什么
當(dāng)前地址:http://weahome.cn/article/ipeess.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部