99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python中的那些坑

馬哥Linux運(yùn)維 ? 來源:博客園 ? 2024-07-16 17:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

問題來了,這三組代碼的運(yùn)行結(jié)果分別是什么呢?答案是True、False和True。第一組和第三組結(jié)果是True好像沒問題,那為什么第二組的結(jié)果是False呢?這里先用id()來查看一下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)?a href="http://www.socialnewsupdate.com/tags/python/" target="_blank">Python為了避免重復(fù)的創(chuàng)建和回收,就把那些常用的整數(shù)緩存起來,每次需要使用時(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è)試:

#Python學(xué)習(xí)交流群:778463939
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)簽都替換為空,沒什么好說的,這里可以用一段html代碼來測(cè)試一下:

html = """


Document

"""
print(remove_tag(html))
# Document

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

html = """
Document


h1標(biāo)題

h2標(biāo)題

h3標(biāo)題

""" print(remove_tag(html))

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

Document

 


h1標(biāo)題h2標(biāo)題h3標(biāo)題

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

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

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

import re

print(re.S)
# 16

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

3.字符串的lstrip()

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

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

這很簡單,也沒什么問題,但是看下面這個(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ā)生變化。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    590

    瀏覽量

    22246
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70705
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86704

原文標(biāo)題:Python中的那些“坑”

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何避開智能硬件創(chuàng)業(yè)的那些!

    大數(shù)據(jù)等附加價(jià)值。今天我們邀請(qǐng)到幻響神州創(chuàng)始人兼CEO張總,為大家解答如何避開智能硬件創(chuàng)業(yè)的那些。專家介紹:張昕尉是十年創(chuàng)業(yè)老兵,2016年2月帶領(lǐng)幻響新三板上市,堅(jiān)持原創(chuàng)態(tài)度,以虔誠之心做企業(yè)做產(chǎn)品
    發(fā)表于 03-14 10:13

    python2和python3同時(shí)安裝的詳細(xì)步驟

    整理下python2和python3同時(shí)安裝詳細(xì)步驟希望對(duì)大家有幫助已踩過(親測(cè)可用!?。。?/div>
    發(fā)表于 10-27 09:31

    運(yùn)放那些——第二篇

    運(yùn)放那些——第二篇
    的頭像 發(fā)表于 08-31 11:37 ?1.5w次閱讀
    運(yùn)放<b class='flag-5'>中</b>的<b class='flag-5'>那些</b><b class='flag-5'>坑</b>——第二篇

    運(yùn)放那些——第一篇

    運(yùn)放那些——第一篇
    的頭像 發(fā)表于 08-31 11:40 ?4.6w次閱讀
    運(yùn)放<b class='flag-5'>中</b>的<b class='flag-5'>那些</b><b class='flag-5'>坑</b>——第一篇

    Python程序員必須掌握從Python2到Python3的轉(zhuǎn)型

    本書的目標(biāo)讀者是那些正在使用 Python,又想熟悉 Python 3 的程序員。如果你懂 Python2,但是想遷移到 Python 3.
    發(fā)表于 09-14 10:54 ?10次下載

    如何讓你的Python編程不出現(xiàn)反模式?避免初學(xué)Python常見的錯(cuò)誤

    篇文章收集了我在Python新手開發(fā)者寫的代碼中所見到的不規(guī)范但偶爾又很微妙的問題。本文的目的是為了幫助那些新手開發(fā)者渡過寫出丑陋的Python代碼的階段。
    的頭像 發(fā)表于 09-24 10:38 ?3039次閱讀

    如何快速學(xué)習(xí)Python?學(xué)習(xí)Python有哪些

    此外,作為人工智能的主要編程語言,未來的幾年,Python勢(shì)必繼續(xù)高歌。而近期,數(shù)據(jù)科學(xué)網(wǎng)站KDnuggets,發(fā)布的2018數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)工具調(diào)查結(jié)果也顯示:Python榮登第一,成為最受青睞
    的頭像 發(fā)表于 11-29 10:11 ?4279次閱讀
    如何快速學(xué)習(xí)<b class='flag-5'>Python</b>?學(xué)習(xí)<b class='flag-5'>Python</b>有哪些<b class='flag-5'>坑</b>?

    關(guān)于 STM32 時(shí)鐘配置的那些

    關(guān)于STM32時(shí)鐘配置的那些
    的頭像 發(fā)表于 03-08 12:06 ?6479次閱讀

    python的優(yōu)缺點(diǎn)有哪些

    Python的定位是“優(yōu)雅”、“明確”、“簡單”,所以Python程序看上去總是簡單易懂,初學(xué)者學(xué)Python,不但入門容易,而且將來深入下去,可以勝任那些非常非常復(fù)雜的應(yīng)用程序開發(fā)。
    的頭像 發(fā)表于 01-16 09:20 ?3734次閱讀

    “I2C”的那些

    “I2C”的那些 一般情況下, i2c 設(shè)備焊接沒什么問題,按照設(shè)備手冊(cè)一步步來,基本上就順風(fēng)順?biāo)軌蛴闷饋?。如果這么一個(gè)簡單的東西,有時(shí)候想要的結(jié)果死活不出來,反復(fù)的檢查問題的原因,查詢解決辦法
    發(fā)表于 11-06 10:05 ?8次下載
    “I2C”的<b class='flag-5'>那些</b><b class='flag-5'>坑</b>

    Arduino-IDE配置ESP32-CAM開發(fā)環(huán)境踩過的那些

    Arduino-IDE配置ESP32-CAM開發(fā)環(huán)境踩過的那些
    發(fā)表于 11-30 18:36 ?24次下載
    Arduino-IDE配置ESP32-CAM開發(fā)環(huán)境踩過的<b class='flag-5'>那些</b><b class='flag-5'>坑</b>

    EFM32PG1B使用時(shí)遇到那些

    EFM32PG1B使用時(shí)遇到那些的坑坑一:引腳功能定義二:外部中斷的使用官網(wǎng)鏈接一:引腳功能定義?公司項(xiàng)目需要用到EFM32系列的單片機(jī),初看芯片手冊(cè),看到引腳定義的時(shí)候著實(shí)有些疑惑?初看的第一
    發(fā)表于 12-03 15:06 ?3次下載
    EFM32PG1B使用時(shí)遇到<b class='flag-5'>那些</b>的<b class='flag-5'>坑</b>

    EFM32PG1B關(guān)于RTCC和EM4的那些

    EFM32PG1B關(guān)于RTCC和EM4的那些EFM32PG1B關(guān)于RTCC和EM4的那些坑坑一:RTCC初始化二:EM4低功耗模式的初始化
    發(fā)表于 12-04 19:36 ?10次下載
    EFM32PG1B關(guān)于RTCC和EM4的<b class='flag-5'>那些</b><b class='flag-5'>坑</b>

    pythonnumber代表什么

    Python,number(數(shù)字)是一種內(nèi)置的數(shù)據(jù)類型,用于表示數(shù)值。Python提供了幾種不同的number類型,分別是整數(shù)(int)、浮點(diǎn)數(shù)(float)、復(fù)數(shù)(complex)和布爾值
    的頭像 發(fā)表于 11-22 09:50 ?2595次閱讀

    pythontext的用法

    Python的text是一個(gè)常見的數(shù)據(jù)類型,它用于存儲(chǔ)和處理文本數(shù)據(jù)。在Python,文本常常被表示為字符串(string),字符串是一系列Unicode字符的有序序列。 在
    的頭像 發(fā)表于 11-23 15:46 ?4897次閱讀