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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python操作符op_详解python中的 is 操作符

發布時間:2025/3/15 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python操作符op_详解python中的 is 操作符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家可以與Java中的 == 操作符相互印證一下,加深一下對引用和對象的理解。原問題: Python為什么直接運行和在命令行運行同樣語句但結果卻不同,他們的緩存機制不同嗎?

其實,高票答案已經說得很詳細了。我只是再補充一點而已。

is 操作符是Python語言的一個內建的操作符。它的作用在于比較兩個變量是否指向了同一個對象。

與 == 的區別

class A():

def __init__(self, v):

self.value = v

def __eq__(self, t):

return self.value == t.value

a = A(3)

b = A(3)

print a == b

print a is b

這個結果是True,False。因為我們重寫了__eq__方法就使得a, b在比較的時候,只比較它們的value即可。只要它們的value相等,那么a, b就是相等的。

而 is 操作符是判斷兩個變量是否引用了同一個對象。

同一個對象?

is 的用法說起來其實挺簡單的,但是真正用起來,它的難點恰恰就在于判斷哪些對象是同一個對象。

看下面的幾個測試,先不看結果,自己能答對多少?

a = 10

b = 10

print a is b

a = 10.0

b = 10.0

print a is b

a = 10

def f():

return 10

print f() is a

a = 1000

def f():

return 1000

print f() is a

a = 10.0

def f():

return 10.0

print f() is a

嗯。這個結果是True, True, True, False, False。你答對了嗎?

這個結果中牽扯到兩個問題:第一,就是小整數的緩存,第二,就是pyc文件中CodeObject的組織問題。

Python中把-127到128這些小整數都緩存了一份。這和Java的Integer類是一樣的。所以,對于-127到128之間的整數,整個Python虛擬機中就只有一個實例。不管你什么時候,什么場景下去使用 is 進行判斷,都會是True,所以我們知道了這兩個測試一定會是True:

a = 10

b = 10

print a is b

a = 10

def f():

return 10

print f() is a

接著,我們重點看下,這兩個測試:

a = 10.0

b = 10.0

print a is b

a = 10.0

def f():

return 10.0

print f() is a

為什么一個是True,一個是False。要探究這個問題,就要從字節碼的角度去分析了。我們先把這個文件編譯一下:

python -m compileall testis.py

然后再使用這個工具查看一下字節碼文件:

https:// github.com/hinus/railgu n/blob/master/src/main/python/rgparser/show.py

得到這樣的輸出:

0

0

2

0040

6400005a00006400005a01006500006501006b080047486400005a000064

01008400005a02006502008300006500006b0800474864020053

1 0 LOAD_CONST 0 (10.0)

3 STORE_NAME 0 (a)

2 6 LOAD_CONST 0 (10.0)

9 STORE_NAME 1 (b)

3 12 LOAD_NAME 0 (a)

15 LOAD_NAME 1 (b)

18 COMPARE_OP 8 (is)

21 PRINT_ITEM

22 PRINT_NEWLINE

5 23 LOAD_CONST 0 (10.0)

26 STORE_NAME 0 (a)

6 29 LOAD_CONST 1 ()

32 MAKE_FUNCTION 0

35 STORE_NAME 2 (f)

8 38 LOAD_NAME 2 (f)

41 CALL_FUNCTION 0

44 LOAD_NAME 0 (a)

47 COMPARE_OP 8 (is)

50 PRINT_ITEM

51 PRINT_NEWLINE

52 LOAD_CONST 2 (None)

55 RETURN_VALUE

('a', 'b', 'f')

()

()

()

'testis.py'

''

1

10.0

0

0

1

0043

64010053

7 0 LOAD_CONST 1 (10.0)

3 RETURN_VALUE

()

()

()

()

'testis.py'

'f'

6

None

10.0

0001

None

060106010b0206010902

大家注意看,整個python文件其實就是一個大的對象,f 所對應的那個函數也是一個對象,這個code對象做為整體是大的對象的consts域里的一個const項。再注意,在大對象里,有10.0這樣的一個const項,f 這個對象所對應的conts里呢,也有一個10.0這個浮點數。

當python在加載這個文件的時候,就會完成主里的10.0這個浮點數的加載,生成一個PyFloatObject。也就是說靜態的pyc文件的常量表在被加載以后,就變成了內存中的常量表,文件的表里的10.0就變成了內存中的一個PyFloatObject。所以,a, b兩個變量都會引用這個PyFloatObject。

但是 f 里的那個10.0呢?它是要等到MAKE_FUNCTION被調用的時候才會真正地初始化。做為 f 方法的返回值,它必然與我們之前所說的主里的10.0不是同一個對象了。

本質上講,這是Python的一個設計缺陷(例如Java以一個文件為編譯單元,共享同一個常量池就會減輕這個問題。但如果跨文件使用 == 操作符,也會出現同樣的問題。仍然沒有解決這個問題。實際上,我自己也不知道該怎么解決這個問題。)我們應該盡量避免 is 的這種用法。始終把 is 的用法限制在本文的第一個例子中。這樣相對會安全一些。

本文標題: 詳解python中的 is 操作符

本文地址: http://www.cppcns.com/jiaoben/python/215755.html

總結

以上是生活随笔為你收集整理的python操作符op_详解python中的 is 操作符的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品久久久久久久久毛片 | 亚洲欧美国产日韩精品 | 日韩欧美国产一区二区三区 | 黄色大片网站在线观看 | 成人午夜免费网站 | 国产精品久久久久久久久久久久久久久久 | 欧美国产日韩在线 | 日本人和亚洲人zjzjhd | 久久精品99久久 | 人妻无码一区二区三区久久 | 琪琪五月天| 夜夜爽夜夜操 | 免费视频www在线观看网站 | 操少妇视频| 精品视频一区二区三区四区 | 小泽玛利亚一区二区三区在线观看 | av一区二区在线观看 | 欧美变态口味重另类在线视频 | 久久九精品 | 久久精品国产亚洲av麻豆图片 | 久久久久国产精品 | 中文字幕导航 | 老司机av影院 | 丰满人妻av一区二区三区 | 看毛片网 | 色老板最新地址 | 亚洲成人日韩在线 | www中文字幕在线观看 | 在线色播 | 韩国av在线播放 | 日本黄色小说 | 免费一区二区三区视频在线 | 四虎成人永久免费视频 | 女同性做爰全过程 | 99综合色 | 日韩免费观看视频 | 成人精品福利 | 波多野吉衣毛片 | 亚洲高清视频网站 | 久久久91精品国产一区二区三区 | 欧美日本一道 | 国语精品 | 姑娘第5集在线观看免费好剧 | 亚洲色图激情小说 | 免费成人高清视频 | 欧美一级淫片 | 奇米四色网 | 永久免费看片在线观看 | 欧美精品在线一区二区三区 | 国产91绿帽单男绿奴 | 91丨九色丨国产 | 91亚洲精| 午夜免费网 | av在线网址大全 | 午夜爱 | 国产露脸150部国语对白 | 国产18毛片 | 伊人狠狠干 | 国产精品久久久久永久免费看 | 精品偷拍一区 | 狠狠干青青草 | 日日艹夜夜艹 | 欧美大片一级 | 一区二区三区资源 | 爱av导航| 人妻互换一区二区激情偷拍 | 日本一区二区三区四区五区 | 中文字幕在线观看一区二区 | 日韩极品视频 | 亚洲精品久久久久久久久久 | 欧美日韩在线免费观看 | 国产尤物| 亚洲成人自拍 | 深爱婷婷 | 另类欧美亚洲 | 日夜夜操| h片大全 | 91精品久久久久久久99蜜桃 | 午夜网站在线 | 超碰69| 一区二区三区四区在线 | 色呦呦麻豆 | 国产一区视频在线观看免费 | 久久精品牌麻豆国产大山 | 国产午夜精品一区二区三区欧美 | 日本国产在线观看 | 国产视频福利 | 激情福利网 | 国产成人日韩 | 91精品影视| 午夜看片在线 | 中国一级特黄毛片 | 精品亚洲乱码一区二区 | 超碰97干| 99色综合 | 国产精品av免费观看 | 影音先锋亚洲成aⅴ人在 | 中文字幕超碰在线 | 日本成人综合 |