現(xiàn)在,我們在交互模式下分別定義兩個變量:a,b,他們的值都等于200:
是不是覺得我在說廢話!!!
下面就是見證奇跡的時候了:
我們再分別定義a和b,他們的值都等于257:
這到底是為什么呢???
現(xiàn)在為你解答:
這其實(shí)是python的整數(shù)緩沖區(qū)導(dǎo)致的結(jié)果。
python在交互模式下,會對比較小的整數(shù)對象進(jìn)行緩存([-5,256])
當(dāng)我們定義的整數(shù)不在這個范圍時,python會新生成一個對象,獨(dú)占一個內(nèi)存地址。
所以,雖然剛剛我們讓a和b都等于了257,但因?yàn)槭欠謩e定義的,兩個257的內(nèi)存地址是不同的,所以a 不是b,返回False。
我們打印兩個a和b的id就會發(fā)現(xiàn),他們是不一樣的:
如果我們判斷a和b的值是否相等,那返回的就會是true:
另外,通過編譯器(Pycharm、idle)或者保存為文件執(zhí)行時,結(jié)果是不一樣的,這是因?yàn)榻忉屍髯隽藘?yōu)化,不會因此分配新的內(nèi)存地址。
現(xiàn)在定義一個變量str1,等于:aabbc,然后打印a的數(shù)量:
str1='aabbc'
print("數(shù)量為:",str1.count("a"))
-----------------輸出結(jié)果-----------------
數(shù)量為: 2
結(jié)果為str1中有兩個a
現(xiàn)在又是見證奇跡的時候了!!!
我們打印空字符串的數(shù)量:
str1='aabbc'
print("數(shù)量為:",str1.count(""))
-----------------輸出結(jié)果-----------------
數(shù)量為: 6
為什str1中有6個空字符串!!!
難道通靈了???
現(xiàn)在把str1的值改為:ab,再打印空字符串的數(shù)量
str1='ab'
print("數(shù)量為:",str1.count(""))
-----------------輸出結(jié)果-----------------
數(shù)量為: 3
怎么又變成3了!!!
我們需要去看python的源碼這種情況是怎么處理的
當(dāng)我們通過count統(tǒng)計(jì)字符的數(shù)量時,會調(diào)用stringlib_count這個函數(shù)
而查詢空字符串的時候,代表下圖的sub_len=0
所以會執(zhí)行下面的代碼,會返回被查詢字符串的長度+1
我們定義一個變量a,它的值為:hello world:
a = 'hello world'
然后打印a[0]:
a = 'hello world'
print('a[0]的值為:',a[0])
-----------------輸出結(jié)果-----------------
a[0]的值為: h
但是輸出a的類型卻是個str:
a = 'hello world'
print(type(a))
-----------------輸出結(jié)果-----------------
a的類型為: <class 'str'>
其實(shí)字符串是字符的有序集合,可以通過其位置來獲得具體的元素。
在 python 中,字符串中的字符是通過索引來提取的,索引從 0 開始。
當(dāng)然也可以輸入負(fù)值,表示從末尾提取,最后一個為 -1,倒數(shù)第二個為 -2:
a = 'hello world'
print('a的末尾字母為:',a[-1])
-----------------輸出結(jié)果-----------------
a的末尾字母為: d
就是這么神奇!!!
python-20行代碼將圖片轉(zhuǎn)素描畫(附源碼和成品下載地址)
python小爬蟲-28行代碼實(shí)現(xiàn)圖形化在線翻譯!
python-85行代碼完成貪吃蛇和關(guān)卡升級:是男人就堅(jiān)持到第10關(guān)!
聯(lián)系客服