精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python中的那些坑

馬哥Linux運維 ? 來源:博客園 ? 2024-07-16 17:52 ? 次閱讀

1.哪個是True,哪個是False?

這里要看三組代碼:

# 第一組:

>>>a=256

>>>b = 256

>>>a is b

# 第二組:

>>>a = 257

>>>b = 257

>>>a is b

# 第三組:

>>>a = 257; b = 257

>>>a is b

問題來了,這三組代碼的運行結果分別是什么呢?答案是True、False和True。第一組和第三組結果是True好像沒問題,那為什么第二組的結果是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值是相同的,但是第二組是不同的。出現這種情況是因為Python為了避免重復的創建和回收,就把那些常用的整數緩存起來,每次需要使用時直接從緩存中拿,而不是重新創建,這些整數的范圍是[-5, 256],不在這個范圍之中的數字就要重新創建了。那為什么第三組的a和b是一樣的呢?這是因為Python內部做了優化,對于在同一個代碼塊中的代碼,如果出現兩個值相同的整數,那么它們將被重用。這里可以用下面的代碼進行測試:

#Python學習交流群: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值不同。這是因為a和b在同一個代碼塊,而c處在func函數里,屬于局部變量,和a不在同一個代碼塊。所以在創建c的時候會重新創建,但是創建b的時候會重用a這個對象。
在Python的交互式命令行中,每單獨一行都視為一個代碼塊,因此第三組中的a和b處在同一個代碼塊中,所以后者重用了前者,因此,兩個變量的id是相同的。

2.關于正則表達式re.sub()

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

import re


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

這段代碼的功能就是將html中的標簽都替換為空,沒什么好說的,這里可以用一段html代碼來測試一下:

html = """


Document

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

運行結果和我們想象的一樣,但是如果html代碼再長一點呢?比如下面:

html = """
Document


h1標題

h2標題

h3標題

""" print(remove_tag(html))

運行結果如下:

Document

 


h1標題h2標題h3標題

為什么最后會多出來呢?這兩個標簽不應該被替換掉嗎?問題在于re.sub()的第四個參數,這里先看下sub()函數的原型:

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

那為什么我們把re.S放在count的位置也沒有報錯呢?難道說re.S是一個數字?打印出來看一下:

import re

print(re.S)
# 16

原來re.S還可以當數字用!這時候數一下上面那段html代碼中的標簽個數,發現是第17和第18個,而因為re.S被當做16傳給count參數了,就導致最后兩個標簽沒有被替換掉。

3.字符串的lstrip()

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

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

這很簡單,也沒什么問題,但是看下面這個例子:

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

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

4.嵌套列表

如果要你創建一個包含三個空列表的列表,你會怎么做呢?

# 選項1
li =[[] for i in range(3)]

# 選項2
li = [[]*3]

# 選項3
li = [[]]*3

如果你運行一下,就會知道選項1和選項3能夠得到我們想要的結果。這時候再運行一下下面這段代碼:

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

為什么我們明明只給第一個列表增加了一個1,但是其他兩個列表也增加了一個1呢?這是因為[[]]*3并不是創建了三個不同的列表,而是創建了三個指向同一個列表的對象,所以,當我們操作第一個列表時,其他兩個列表內容也會發生變化。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 字符串
    +關注

    關注

    1

    文章

    577

    瀏覽量

    20485
  • 代碼
    +關注

    關注

    30

    文章

    4748

    瀏覽量

    68355
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84453

原文標題:Python中的那些“坑”

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何避開智能硬件創業的那些

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

    python2和python3同時安裝的詳細步驟

    整理下python2和python3同時安裝詳細步驟希望對大家有幫助已踩過(親測可用!!!)
    發表于 10-27 09:31

    運放那些——第二篇

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

    運放那些——第一篇

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

    Python程序員必須掌握從Python2到Python3的轉型

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

    如何讓你的Python編程不出現反模式?避免初學Python常見的錯誤

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

    如何快速學習Python?學習Python有哪些

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

    關于 STM32 時鐘配置的那些

    關于STM32時鐘配置的那些
    的頭像 發表于 03-08 12:06 ?5843次閱讀

    python的優缺點有哪些

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

    “I2C”的那些

    “I2C”的那些 一般情況下, i2c 設備焊接沒什么問題,按照設備手冊一步步來,基本上就順風順水能夠用起來。如果這么一個簡單的東西,有時候想要的結果死活不出來,反復的檢查問題的原因,查詢解決辦法
    發表于 11-06 10:05 ?8次下載
    “I2C”的<b class='flag-5'>那些</b><b class='flag-5'>坑</b>

    Arduino-IDE配置ESP32-CAM開發環境踩過的那些

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

    EFM32PG1B使用時遇到那些

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

    EFM32PG1B關于RTCC和EM4的那些

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

    pythonnumber代表什么

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

    pythontext的用法

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