日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python之函数名称空间,作用域,嵌套函数

發(fā)布時(shí)間:2024/9/5 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python之函数名称空间,作用域,嵌套函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 嵌套函數(shù)
    • 定義
  • 名稱空間的三大類(只存變量名)
    • 名稱空間加載順序
    • 變量名的查找順序?yàn)?/li>
  • 作用域

嵌套函數(shù)

定義

函數(shù)內(nèi)部定義的函數(shù),無(wú)法在函數(shù)外部使用內(nèi)部定義的函數(shù)。

def f1():def f2():print('from f2')f2()f2() # NameError: name 'f2' is not defineddef f1():def f2():print('from f2')f2()f1()''' from f2 '''

名稱空間的三大類(只存變量名)

  • 內(nèi)置名稱空間

    • 定義:python解釋器自帶的方法,如:int,float,len等。==類似小整數(shù)池==
    • 生命周期:在python解釋器啟動(dòng)時(shí),就開(kāi)始生效。直到python解釋器關(guān)閉
  • 全局名稱空間

    • 定義:除了內(nèi)置和局部的名字之外,其余都存在全局名稱空間。如下面的代碼x,func,z

      x = 1def func():passif x > 11:z = 20000 else:z = 555 print(z)
    • 生命周期:在文件執(zhí)行時(shí)生效,文件執(zhí)行完后失效

  • 局部名稱空間

    • 定義:在函數(shù)內(nèi)部的都叫局部,也就是說(shuō)在函數(shù)內(nèi)部定義的變量 就是局部變量。如下圖的x ,f2等等

      def test_one():x = 1def max_num():print("from max_num")max_num()test_one()
    • 生命周期:在調(diào)用函數(shù)時(shí)生效,當(dāng)函數(shù)執(zhí)行結(jié)束后失效

  • 名稱空間加載順序

    內(nèi)置名稱空間 --> 全局名稱空間 --> 局部名稱空間

    作用域

  • 全局作用域

    • 定義:全局有效,全局存活,包含內(nèi)置名稱空間和全局名稱空間.如x,test_one

      x = 1def test_one():print(x)test_one()
  • 局部作用域

    • 定義:局部有效,臨時(shí)存儲(chǔ),只包含局部名稱空間。如x

      def test_one()x = 1print(x)test_one()
    • PS:當(dāng)局部名稱空間沒(méi)有對(duì)應(yīng)的變量時(shí),系統(tǒng)會(huì)自動(dòng)去全局名稱空間查找。沒(méi)有找到就會(huì)報(bào)錯(cuò)。

      # 第一種情況 x = 1 def one():print(x)def two():x = 10one() two()''' 1 '''# 第二種情況 x = 1 def one():x = 10print(x)def two():x = 5one()two()''' 10 ''''''總結(jié):對(duì)于第一種情況,程序調(diào)用了two函數(shù),在two函數(shù)中調(diào)用了one函數(shù),而one函數(shù)中沒(méi)有定義x變量,對(duì)于one函數(shù)而言,它屬于局部名稱空間,變量x既然沒(méi)有定義,那么就直接去上一級(jí)找,因此x=1對(duì)于第二種情況,one函數(shù)中定義了x變量,因此直接使用即可,所以x=10'''
    • 函數(shù)對(duì)象+作用域應(yīng)用

    • 補(bǔ)充知識(shí)點(diǎn)

      • global關(guān)鍵字:修改全局作用域中的變量

        x = 1def f1():x = 2def f2():# global x # 修改全局x = 3f2()f1() print(x)''' 1 '''x = 1def f1():x = 2def f2():global x # 修改全局x = 3f2()f1() print(x)''' 3 '''
      • nonlocal關(guān)鍵字

        x = 1def f1():x = 2def f2():# nonlocal xx = 3f2()print(x)f1()''' 2 '''x = 1def f1():x = 2def f2():nonlocal xx = 3f2()print(x)f1()''' 3 '''
      • 注意

        • 在局部名稱空間中想要修改全局的可變類型,不需要任何聲明,可以直接修改

          lis = []def f1():lis.append(1)print(f"調(diào)用函數(shù)前: {lis}") f1() print(f"調(diào)用函數(shù)后: {lis}")
        • 在局部如果想要修改全局的不可變類型,需要借助global聲明,聲明為全局的變量,即可直接修改

    轉(zhuǎn)載于:https://www.cnblogs.com/plf-Jack/p/10951730.html

    總結(jié)

    以上是生活随笔為你收集整理的python之函数名称空间,作用域,嵌套函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。