在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

Python入門應(yīng)該避免什么樣的錯(cuò)誤

Wildesbeast ? 來(lái)源:今日頭條 ? 作者:聞數(shù)起舞 ? 2020-04-06 12:03 ? 次閱讀

在分享每個(gè)Python新手應(yīng)該知道的4個(gè)常見(jiàn)錯(cuò)誤之前,請(qǐng)確保您熟悉以下文章中的一些Python內(nèi)置功能。

1.不使用迭代器

每個(gè)Python新手都會(huì)這樣做,無(wú)論他們是否熟練使用其他編程語(yǔ)言。 跑不了的。

給定一個(gè)列表list_,您將如何使用for循環(huán)逐個(gè)訪問(wèn)列表中的元素? 我們知道Python中的列表已建立索引,因此我們可以通過(guò)list_ [i]訪問(wèn)第i個(gè)元素。 然后,我們可以為for循環(huán)創(chuàng)建一個(gè)介于0到len(list_)之間的整數(shù)的迭代器,如下所示:

for i in range(len(list_)): foo(list_[i])

有用。 代碼沒(méi)有問(wèn)題。 這也是在其他語(yǔ)言(例如C)中構(gòu)造for循環(huán)的標(biāo)準(zhǔn)方法。但是實(shí)際上,我們可以在Python中做得更好。

怎么樣?

您知道Python中的列表是可迭代的嗎? 通過(guò)利用其可迭代的性質(zhì),我們可以生成更具可讀性的代碼,如下所示:

for element in list_: foo(element)

Photo by The Creative Exchange on Unsplash

通過(guò)zip函數(shù)可以在for循環(huán)中并行遍歷多個(gè)列表,而如果您堅(jiān)持在迭代可迭代對(duì)象時(shí)獲取索引號(hào)(即計(jì)數(shù)器),則枚舉可能會(huì)有所幫助。 我希望早先了解的5個(gè)Python功能對(duì)它們進(jìn)行了介紹和解釋。

2.使用全局變量

全局變量是在主腳本中聲明的具有全局范圍的變量,而局部變量是在具有局部范圍的函數(shù)內(nèi)聲明的變量。 在Python中使用global關(guān)鍵字可讓您在函數(shù)中本地訪問(wèn)和更改全局變量。 這是一個(gè)例子:

a = 1 # a variable def increment(): a += 1 return adef increment2(): global a # can make changes to global variable “a” a += 1 return a increment() # UnboundLocalError: local variable ‘a(chǎn)’ referenced before assignmentincrement2() # returns 2

許多初學(xué)者都喜歡它,因?yàn)槭褂胓lobal似乎可以避免傳遞函數(shù)所需的所有參數(shù)。 但這實(shí)際上是不正確的。 它只是隱藏了動(dòng)作。

使用全局變量也不利于調(diào)試。 功能應(yīng)被視為功能塊框,并且應(yīng)可重復(fù)使用。 修改全局變量的函數(shù)可能會(huì)給很難發(fā)現(xiàn)的主腳本帶來(lái)副作用,并且可能導(dǎo)致復(fù)雜的意大利面條式代碼,并且調(diào)試起來(lái)要困難得多。

在局部函數(shù)中修改全局變量是不良的編程習(xí)慣。 您應(yīng)該將變量作為參數(shù)傳遞,對(duì)其進(jìn)行修改,并在函數(shù)末尾將其返回。

Photo by Vladislav Klapin on Unsplash

*不要將全局變量與全局常量混淆,因?yàn)樵诖蠖鄶?shù)情況下使用后者非常好。

3.不了解可變對(duì)象

對(duì)于新的Python學(xué)習(xí)者來(lái)說(shuō),這也許是最常見(jiàn)的驚喜,因?yàn)榇斯δ茉谠撜Z(yǔ)言中非常獨(dú)特。

Python中有兩種對(duì)象。 可變對(duì)象可以在運(yùn)行時(shí)更改其狀態(tài)或內(nèi)容,而不可變對(duì)象則不能。 許多內(nèi)置對(duì)象類型是不可變的,包括int,float,string,bool和tuple。

st = ‘A string’ st[0] = ‘B’ # You cannot do this in Python

另一方面,諸如list,set和dict的數(shù)據(jù)類型是可變的。 因此,您可以更改列表中元素的內(nèi)容,例如 list_ [0] =‘new’。

如果函數(shù)中的默認(rèn)參數(shù)是可變的,則會(huì)發(fā)生意外情況。 讓我們以以下函數(shù)為例,其中可變的空列表是參數(shù)list_的默認(rèn)值。

def foo(element, list_=[]): list_.append(element) r eturn list_

讓我們兩次調(diào)用該函數(shù),而不用輸入list_的參數(shù),以使其采用默認(rèn)值。 理想情況下,如果不提供第二個(gè)參數(shù),則每次調(diào)用該函數(shù)時(shí)都會(huì)創(chuàng)建一個(gè)新的空列表。

a = foo(1) # returns [1]b = foo(2) # returns [1,2], not [2]! WHY?

什么?

事實(shí)證明,在定義函數(shù)時(shí),Python中的默認(rèn)參數(shù)會(huì)被評(píng)估一次。 這意味著調(diào)用該函數(shù)不會(huì)刷新其默認(rèn)參數(shù)。

Photo by Ravi Roshan on Unsplash

因此,如果默認(rèn)參數(shù)是可變的,并且每次調(diào)用該函數(shù)時(shí)都會(huì)將其更改。可變的默認(rèn)參數(shù)將適用于所有將來(lái)的函數(shù)調(diào)用。 “標(biāo)準(zhǔn)”解決方案是使用(不可變)None默認(rèn)值,如下所示。

def foo(element, list_=None): if list_ is None: list_ = [] list_.append(element) return list_

4.不復(fù)制

復(fù)制的概念對(duì)于學(xué)習(xí)者而言可能是陌生的,甚至是違反直覺(jué)的。 假設(shè)您有一個(gè)列表a = [[0,1],[2,3]],然后通過(guò)b = a聲明一個(gè)新列表。 現(xiàn)在,您將擁有兩個(gè)具有相同元素的列表。 通過(guò)更改列表b中的某些元素,它應(yīng)該不會(huì)對(duì)列表a產(chǎn)生任何(副作用),對(duì)嗎?

錯(cuò)誤。

a = [[0,1],[2,3]]b = ab[1][1] = 100print(a,b) # [[0, 1], [2, 100]] [[0, 1], [2, 100]]print(id(a)==id(b))# True

當(dāng)您使用賦值語(yǔ)句(即b = a)“復(fù)制”列表時(shí),在一個(gè)列表元素上所做的任何修改在兩個(gè)列表中均可見(jiàn)。 賦值運(yùn)算符僅在目標(biāo)和對(duì)象之間創(chuàng)建綁定,因此示例中的列表a和b共享相同的引用,即Python中的id()。

如何復(fù)制對(duì)象?

如果您要“復(fù)制”對(duì)象并且僅修改新(或舊)對(duì)象中的值而沒(méi)有綁定,則有兩種創(chuàng)建副本的方法:淺副本和深副本。 兩個(gè)對(duì)象將具有不同的引用。

Photo by Louis Hansel on Unsplash

使用前面的示例,可以通過(guò)b = copy.copy(a)創(chuàng)建a的淺表副本。 淺表副本會(huì)創(chuàng)建一個(gè)新對(duì)象,該對(duì)象存儲(chǔ)原始元素的引用。 這聽(tīng)起來(lái)可能很復(fù)雜,但讓我們看下面的示例:

import copya = [[0,1],[2,3]]b = copy.copy(a)print(id(a)==id(b))# Falseb[1] = 100print(a,b)# [[0, 1], [2, 3]] [[0, 1], 100]b[0][0] = -999print(a,b)# [[-999, 1], [2, 3]] [[-999, 1], 100]print(id(a[0]) == id(b[0]))# True

在創(chuàng)建嵌套列表a的淺副本(我們稱為b)之后,兩個(gè)列表具有不同的引用id(a)!= id(b),符號(hào)!=表示“不等于”。 但是,它們的元素具有相同的引用,因此id(a [0])== id(b [0])。

這意味著更改b內(nèi)部的元素不會(huì)影響列表a,但是修改b [1]內(nèi)部的元素確實(shí)會(huì)影響a [1],因此此副本很淺。

簡(jiǎn)而言之,如果b是a的淺副本,則對(duì)b中的嵌套對(duì)象內(nèi)的元素進(jìn)行的任何更改都將顯示在a中。

如果要復(fù)制嵌套對(duì)象而元素之間沒(méi)有任何綁定,則需要使用b = copy.deepcopy(a)的深拷貝。 深層副本將創(chuàng)建一個(gè)新對(duì)象,然后以遞歸方式在原始元素中創(chuàng)建嵌套對(duì)象的副本。

簡(jiǎn)而言之,深拷貝復(fù)制所有內(nèi)容而沒(méi)有任何綁定。

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

    關(guān)注

    3

    文章

    4343

    瀏覽量

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

    關(guān)注

    30

    文章

    4808

    瀏覽量

    68816
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4801

    瀏覽量

    84865
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    想用ADS122S021采集大于5v的電壓,應(yīng)該什么樣的方法?

    想用ADS122S021采集大于5v的電壓,應(yīng)該什么樣的方法??還不能影響后級(jí)電路,是用電阻分壓?jiǎn)幔侩娮?b class='flag-5'>應(yīng)該選用什么類型的,請(qǐng)各位大神指教!!
    發(fā)表于 01-10 10:13

    AFE4400發(fā)射端的TX_N和TX_P之間的電壓應(yīng)該什么樣的?是不是標(biāo)準(zhǔn)的方波?

    AFE4400發(fā)射端的TX_N和TX_P之間的電壓應(yīng)該什么樣的?是不是標(biāo)準(zhǔn)的方波?
    發(fā)表于 01-02 07:31

    計(jì)劃的采樣頻率是2.56mhz,計(jì)劃采用dsp+外部ad的方案,請(qǐng)問(wèn)應(yīng)該選擇什么樣的采樣芯片比較合理?

    你好,我現(xiàn)在計(jì)劃的采樣頻率是2.56mhz,計(jì)劃采用dsp+外部ad的方案,請(qǐng)問(wèn)應(yīng)該選擇什么樣的采樣芯片比較合理,還有主芯片采用150mhz的28335能不能滿足? 精度要求在5%。
    發(fā)表于 12-24 07:08

    請(qǐng)問(wèn)TVP7002的COAST引腳,如果想使用外部輸入,應(yīng)該輸入什么樣的信號(hào)?

    您好!請(qǐng)問(wèn)TVP7002的COAST引腳,如果想使用外部輸入,應(yīng)該輸入什么樣的信號(hào)?TVP7002的EXT_CLK引腳,如果使用外部時(shí)鐘作為像素時(shí)鐘和ADC采樣時(shí)鐘,內(nèi)部寄存器需要做哪些配置,外部電路需要做哪些修改?
    發(fā)表于 12-23 07:50

    請(qǐng)問(wèn)DDC112U CLK的正確波形應(yīng)該什么樣的?

    已有所圓滑. 這個(gè)CLK是將MCU供過(guò)來(lái)時(shí)鐘信號(hào)中間加了個(gè)RC(10ohm電阻+100pF)低通, 因此CLK更接近正弦波. 我的MCU和DDC112U是獨(dú)立5V供電的, 當(dāng)系統(tǒng)全部其他條件都不變時(shí), A/D讀值會(huì)相差一倍, 請(qǐng)問(wèn), 正確的CLK波形應(yīng)該什么樣? 謝謝
    發(fā)表于 12-17 07:32

    AMC1304后接的數(shù)字濾波器接口應(yīng)該什么樣的?

    疑問(wèn): 1、AMC1304后接的數(shù)字濾波器接口應(yīng)該什么樣的,和ADS1202一是采用的SPI嗎。如果是,我需要在上升沿還是下降沿進(jìn)行數(shù)據(jù)的讀取。 2、后接的數(shù)字濾波器采用的是sin3 OSR為
    發(fā)表于 11-28 06:43

    什么樣的電阻柜用于風(fēng)電光伏項(xiàng)目

    什么樣的電阻柜用于風(fēng)電光伏項(xiàng)目?在風(fēng)電光伏項(xiàng)目中,電阻柜作為重要組成部分,直接影響著整個(gè)系統(tǒng)的效率和穩(wěn)定性。那么,我們應(yīng)該選擇什么樣的電阻柜呢? 高效的電阻柜應(yīng)具備較高的功率因數(shù)。在風(fēng)電光伏項(xiàng)目
    的頭像 發(fā)表于 11-18 09:40 ?179次閱讀

    具有錯(cuò)誤觸發(fā)避免功能的過(guò)零檢測(cè)

    電子發(fā)燒友網(wǎng)站提供《具有錯(cuò)誤觸發(fā)避免功能的過(guò)零檢測(cè).pdf》資料免費(fèi)下載
    發(fā)表于 09-23 11:41 ?0次下載
    具有<b class='flag-5'>錯(cuò)誤</b>觸發(fā)<b class='flag-5'>避免</b>功能的過(guò)零檢測(cè)

    代碼整潔之道-大師眼中的整潔代碼是什么樣

    幾個(gè)月前寫了一篇文章“如何寫出難以維護(hù)的代碼”,從中能大概了解到不好維護(hù)的代碼是什么樣,有哪些壞味道,那肯定有人會(huì)反問(wèn),難以維護(hù)的代碼見(jiàn)的太多了,也知道長(zhǎng)什么樣,但是對(duì)于好維護(hù)的代碼是什么樣的比較
    的頭像 發(fā)表于 09-09 16:30 ?376次閱讀
    代碼整潔之道-大師眼中的整潔代碼是<b class='flag-5'>什么樣</b>

    OPA354應(yīng)該什么樣的電容負(fù)載標(biāo)準(zhǔn)去使用?

    OPA354這個(gè)電路spec上,開(kāi)環(huán)增益和相位并沒(méi)有說(shuō)明搭載的負(fù)載電容是多大。請(qǐng)問(wèn)在使用芯片時(shí),應(yīng)該什么樣的電容負(fù)載標(biāo)準(zhǔn)去使用呢。
    發(fā)表于 08-02 08:05

    opencv-python和opencv一

    不一。OpenCV(Open Source Computer Vision Library)是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?1308次閱讀

    PCB線路板制造中常見(jiàn)的錯(cuò)誤有哪些,如何避免?

    一站式PCBA智造廠家今天為大家講講避免常見(jiàn)pcb設(shè)計(jì)錯(cuò)誤的方法有哪些?避免常見(jiàn)PCB設(shè)計(jì)錯(cuò)誤的方法。避免常見(jiàn)的PCB設(shè)計(jì)
    的頭像 發(fā)表于 06-07 09:15 ?514次閱讀

    FPGA能實(shí)現(xiàn)什么樣的算法?

    FPGA功能如此強(qiáng)大,請(qǐng)問(wèn)用FPGA能實(shí)現(xiàn)或者比較適合實(shí)現(xiàn)什么樣的算法?
    發(fā)表于 05-26 20:18

    使用PSOC 4000S系列CY8C4025LQS-S411做汽車上的觸控應(yīng)用時(shí),應(yīng)該選用什么樣輸出波形的晶振呢?

    在使用PSOC 4000S系列 CY8C4025LQS-S411做汽車上的觸控應(yīng)用時(shí),我需要使用外部晶振,外部有源晶振有兩種類型的波形輸出,正弦波和方波,我想請(qǐng)教一下應(yīng)該選用什么樣輸出波形的晶振呢?我的系統(tǒng)是5V供電的,是否有推薦的外接有源晶振型號(hào)?
    發(fā)表于 02-21 07:36

    什么樣的PLC可以直接驅(qū)動(dòng)接觸器?什么樣的PLC不可以直接驅(qū)動(dòng)?

    什么樣的PLC可以直接驅(qū)動(dòng)接觸器?什么樣的PLC不可以直接驅(qū)動(dòng)? PLC(可編程邏輯控制器)是一種用于自動(dòng)化控制系統(tǒng)的電子設(shè)備,用于監(jiān)控和控制多種工業(yè)過(guò)程。其中一個(gè)常見(jiàn)的應(yīng)用是控制和驅(qū)動(dòng)接觸器
    的頭像 發(fā)表于 02-18 14:11 ?1350次閱讀
    主站蜘蛛池模板: 岛国最新资源网站| 午夜免费伦费影视在线观看| 日本高清中文字幕在线观穿线视频 | 欧美黄色片在线| 成人a毛片高清视频| 欧美色视频在线观看| 噜噜色噜噜| 国产资源免费观看| 97玖玖| 人人干免费| 日本69sexmovies| 成年女人毛片| 久久久这里有精品999| 狠狠干2015| 激情在线网站| 国产老肥熟xxxx| 182tv免费视视频线路一二三| 性欧美高清极品xx| 91插插视频| 国产亚洲欧美成人久久片| 天堂中文在线最新版地址| 久久青草国产手机看片福利盒子| 69japanese日本100| 亚洲综合一区二区| 中文字幕有码视频| 特级毛片女人18毛片| 免费人成年短视频在线观看免费网站 | 一区二区三区亚洲| 最新色视频| 日本久本草精品| 成年午夜一级毛片视频| 奇米视频7777| 亚洲一区二区三区免费在线观看| 中国成人免费视频| 49vv婷婷网| 在线观看免费av网| 一级毛片一级毛片一级级毛片 | 3344在线| 亚洲午夜久久久精品影院视色| 亚洲国产精品久久婷婷 | 一级黄色毛片免费看|