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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python类中变量作用域_Python中的变量作用域

發布時間:2024/7/5 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python类中变量作用域_Python中的变量作用域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、塊級作用域

1 if 1 == 1:2 name = "lzl"

3

4 print(name) //輸出lzl5

6

7 for i in range(10):8 age =i9

10 print(age) //輸出9

在Java/C#中,執行上面的代碼會提示name,age沒有定義,而在Python中可以執行成功,這是因為在Python中是沒有塊級作用域的,代碼塊里的變量,外部可以調用,所以可運行成功

2、局部作用域

1 deffunc():2 name = "lzl"

3

4 print(name) //拋出異常

name變量只在func()函數內部中生效,所以在全局中是沒法調用的

3、作用域鏈

1 name = "lzl"

2 deff1():3 name = "Eric"

4 deff2():5 name = "Snor"

6 print(name)7 f2()8 f1() //輸出Snor

Python中有作用域鏈,變量會由內到外找,先去自己作用域去找,自己沒有再去上級去找,直到找不到報錯

4、終極版作用域o( ̄▽ ̄)d

1 name = "lzl"

2

3 deff1():4 print(name)5

6 deff2():7 name = "eric"

8 f1()9

10 f2() //輸出lzl

這一段代碼可以做如下理解:

1 name = "lzl"

2

3 deff1():4 print(name)5

6 deff2():7 name = "eric"

8 returnf19

10 ret =f2()11 ret()

f2()執行結果為函數f1的內存地址,即ret=f1;執行ret()等同于執行f1(),執行f1()時與f2()沒有任何關系,name=“lzl”與f1()在一個作用域鏈,函數內部沒有變量是會向外找,所以此時變量name值為“lzl”

5、面試題一道

1 li = [lambda :x for x in range(10)]

判斷下li的類型?li里面的元素為什么類型?

1 print(type(li))2 print(type(li[0]))3

4 #

5 #

可以看到li為列表類型,list里面的元素為函數,那么打印list里面第一個元素的返回值,此時返回值為多少?

1 li = [lambda :x for x in range(10)]2

3 res =li[0]()4 print(res)5

6 #輸出:9

li第一個函數的返回值為9還不是0,記住:函數在沒有執行前,內部代碼不執行;

解析:這是一個列表解析表達式,每個元素都是一個函數,每個函數返回的是x的值。for x in range(10)會循環10次,直到x=9結束,所以x的值是9,然后生成一個函數列表,每個函數的功能是返回x的值。

res = li[0]()

此時,調用函數列表中的第一個函數,也就是返回x的值,而x的值上面已經知道了就是9

所以最后輸出的是9

所以最重要的一點就是,在列表解析式中,循環10次生成的只是函數,她不會返回x的值因為它還沒有調用~也就是還沒執行~

總結

以上是生活随笔為你收集整理的python类中变量作用域_Python中的变量作用域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。