中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python函數的返回值與嵌套函數是什么

發布時間:2021-08-26 15:49:22 來源:億速云 閱讀:209 作者:chen 欄目:編程語言

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

1.什么是返回值
  • 返回值指的是函數返回的結果;

  • return執行完畢后面的語句將不會再執行;

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

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

  • 如果沒有return語句,默認返回None,是隱式返回;

3.函數多值返回
  • 如果返回多個值通過逗號分開,會把值進行壓縮,封裝成一個元組;

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

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

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

5.函數作用域
  • 作用域指的是,一個標識符的作用范圍就是這個標識符的作用域;

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

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

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

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

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

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

x=1
def add():
    global x  # 使用global關鍵字,指定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,原本這里應該引用的是全局變量x = 100 的,因此global關鍵字污染了全局變量 x
  • nonlocal關鍵字:可以申明內部函數的變量引用的是外部函數變量的值(作用域在外部函數),不是全局作用域的值,因此不會污染全局作用域;

def outer_function():
    x = 100
    def inner_function():
        x = x + 1       # 這樣會報錯,函數內部重新定義了x的值,但是還沒有完成定義就被引用了
        print(x)
    return inner_function
ret = outer_function()
ret()
def outer_function():
    x = 1
    def inner_function():
        nonlocal x   # 使用nonlocal關鍵字聲明x 為外層函數的x的值
        x = x + 1    #所以這里使用的x 是外層函數的x
        print(x)   #輸出:2
    return inner_function
ret = outer_function()
ret()
8.函數默認值的作用域
  • 同一個函數的生命周期相同,函數的默認值會綁定在函數的整個生命周期上,不會因為函數內部對默認值的操作而發生改變;

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

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

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.函數銷毀
def add():
    print('add')
del add
add()
  • 可以通過 del 函數名 的方式來刪除函數,再調用函數時,就會報錯不存在;

到此,關于“Python函數的返回值與嵌套函數是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳新县| 庆安县| 泾阳县| 张家港市| 东辽县| 正定县| 元谋县| 年辖:市辖区| 乌拉特中旗| 长子县| 攀枝花市| 宁陵县| 石楼县| 红安县| 宜川县| 荔浦县| 尖扎县| 石河子市| 务川| 改则县| 教育| 乐山市| 思南县| 敖汉旗| 多伦县| 城市| 凌海市| 招远市| 穆棱市| 黄浦区| 五家渠市| 靖远县| 南陵县| 曲松县| 罗江县| 山东省| 祁东县| 河源市| 霍林郭勒市| 禹州市| 阿合奇县|