久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

Python中遇到的“坑”

本篇文章給大家分享的是有關(guān)Python中遇到的“坑”,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)虛擬主機(jī)、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、慶元網(wǎng)站維護(hù)、網(wǎng)站推廣。

1.哪個(gè)是True,哪個(gè)是False?

這里要看三組代碼:

# 第一組:

>>>a = 256
>>>b = 256
>>>a is b
# 第二組:
>>>a = 257
>>>b = 257
>>>a is b
# 第三組:
>>>a = 257,b = 257
>>>a is b

問(wèn)題來(lái)了,這三組代碼的運(yùn)行結(jié)果分別是什么呢?答案是True、False和True。第一組和第三組結(jié)果是True好像沒(méi)問(wèn)題,那為什么第二組的結(jié)果是False呢?這里先用id()來(lái)查看一下a和b的地址是什么:

# 第一組:
>>>id(a)
>>>1426657040
>>>id(b)
>>>1426657040
# 第二組:
>>>id(a)
>>>363389616
>>>id(b)
>>>363392912
# 第三組:
>>>id(a)
>>>5722000
>>>id(b)
>>>5722000

可以看到第一組和第三組的a和b的id值是相同的,但是第二組是不同的。出現(xiàn)這種情況是因?yàn)镻ython為了避免重復(fù)的創(chuàng)建和回收,就把那些常用的整數(shù)緩存起來(lái),每次需要使用時(shí)直接從緩存中拿,而不是重新創(chuàng)建,這些整數(shù)的范圍是[-5, 256],不在這個(gè)范圍之中的數(shù)字就要重新創(chuàng)建了。那為什么第三組的a和b是一樣的呢?這是因?yàn)镻ython內(nèi)部做了優(yōu)化,對(duì)于在同一個(gè)代碼塊中的代碼,如果出現(xiàn)兩個(gè)值相同的整數(shù),那么它們將被重用。這里可以用下面的代碼進(jìn)行測(cè)試:

a = 257
b = 257
def func():
    c = 257
    print(a is c)  # False
print(a is b)  # True
func()

這段代碼中a和b的id值是一樣的,和c的id值不同。這是因?yàn)閍和b在同一個(gè)代碼塊,而c處在func函數(shù)里,屬于局部變量,和a不在同一個(gè)代碼塊。所以在創(chuàng)建c的時(shí)候會(huì)重新創(chuàng)建,但是創(chuàng)建b的時(shí)候會(huì)重用a這個(gè)對(duì)象。

在Python的交互式命令行中,每單獨(dú)一行都視為一個(gè)代碼塊,因此第三組中的a和b處在同一個(gè)代碼塊中,所以后者重用了前者,因此,兩個(gè)變量的id是相同的。

2.關(guān)于正則表達(dá)式re.sub()

都知道正則表達(dá)式中的re.sub()是用于字符串替換的,比如:

import re
def remove_tag(html):
  text = re.sub('<.*?>', '', html, re.S)
  return text

這段代碼的功能就是將html中的標(biāo)簽都替換為空,沒(méi)什么好說(shuō)的,這里可以用一段html代碼來(lái)測(cè)試一下:

html = """
<!DOCTYPE html><html>
<head><meta charset="UTF-8">
<title>Document</title>
</head><body></body></html>
"""
print(remove_tag(html))
# Document

運(yùn)行結(jié)果和我們想象的一樣,但是如果html代碼再長(zhǎng)一點(diǎn)呢?比如下面:

html = """
<!Dtp-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head><bodOCTYPE html><html><head><meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta hty><h2>h2標(biāo)題</h2><h3>h3標(biāo)題</h3><h4>h4標(biāo)題</h4></body></html>
"""
print(remove_tag(html))

運(yùn)行結(jié)果如下:

Document
h2標(biāo)題h3標(biāo)題h4標(biāo)題</body></html>

為什么最后會(huì)多出來(lái)"</body></html>"呢?這兩個(gè)標(biāo)簽不應(yīng)該被替換掉嗎?問(wèn)題在于re.sub()的第四個(gè)參數(shù),這里先看下sub()函數(shù)的原型:

re.sub(pattern, repl, string, count=0, flags=0)

那為什么我們把re.S放在count的位置也沒(méi)有報(bào)錯(cuò)呢?難道說(shuō)re.S是一個(gè)數(shù)字?打印出來(lái)看一下:

import re
print(re.S)
# 16

原來(lái)re.S還可以當(dāng)數(shù)字用!這時(shí)候數(shù)一下上面那段html代碼中的標(biāo)簽個(gè)數(shù),發(fā)現(xiàn)"</body></html>"是第17和第18個(gè),而因?yàn)閞e.S被當(dāng)做16傳給count參數(shù)了,就導(dǎo)致最后兩個(gè)標(biāo)簽沒(méi)有被替換掉。

3.字符串的lstrip()

相信很多人都用過(guò)lstrip(),在處理字符串的時(shí)候很有用,比如:

print("aabbcc".lstrip('aa'))
# bbcc

這很簡(jiǎn)單,也沒(méi)什么問(wèn)題,但是看下面這個(gè)例子:

print("ababacac".lstrip("ab"))
# cac

為什么結(jié)果不是acac呢?這是因?yàn)楫?dāng)lstrip()中傳入一個(gè)字符串后,lstrip()會(huì)把這個(gè)字符串拆成一個(gè)個(gè)字符,然后才從左往右進(jìn)行檢查,如果匹配到就刪除,直到出現(xiàn)第一個(gè)不同的字符,所以最后"ababa"被刪掉了,結(jié)果也就是"cac"了。要避免這種情況的話,可以用replace()方法進(jìn)行替換。

4.嵌套列表

如果要你創(chuàng)建一個(gè)包含三個(gè)空列表的列表,你會(huì)怎么做呢?

# 選項(xiàng)1
li =[[] for i in range(3)]
# 選項(xiàng)2
li = [[]*3]
# 選項(xiàng)3
li = [[]]*3

如果你運(yùn)行一下,就會(huì)知道選項(xiàng)1和選項(xiàng)3能夠得到我們想要的結(jié)果。這時(shí)候再運(yùn)行一下下面這段代碼:

li = [[]]*3
li[0].append(1)
print(li)
# [[1], [1], [1]]

為什么我們明明只給第一個(gè)列表增加了一個(gè)1,但是其他兩個(gè)列表也增加了一個(gè)1呢?這是因?yàn)閇[]]*3并不是創(chuàng)建了三個(gè)不同的列表,而是創(chuàng)建了三個(gè)指向同一個(gè)列表的對(duì)象,所以,當(dāng)我們操作第一個(gè)列表時(shí),其他兩個(gè)列表內(nèi)容也會(huì)發(fā)生變化。

以上就是Python中遇到的“坑”,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前文章:Python中遇到的“坑”
文章鏈接:http://sd-ha.com/article32/pepppc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站導(dǎo)航、面包屑導(dǎo)航、虛擬主機(jī)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)