国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

Python入門應該避免什么樣的錯誤

Wildesbeast ? 來源:今日頭條 ? 作者:聞數起舞 ? 2020-04-06 12:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在分享每個Python新手應該知道的4個常見錯誤之前,請確保您熟悉以下文章中的一些Python內置功能。

1.不使用迭代器

每個Python新手都會這樣做,無論他們是否熟練使用其他編程語言。 跑不了的。

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

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

有用。 代碼沒有問題。 這也是在其他語言(例如C)中構造for循環的標準方法。但是實際上,我們可以在Python中做得更好。

怎么樣?

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

for element in list_: foo(element)

Photo by The Creative Exchange on Unsplash

通過zip函數可以在for循環中并行遍歷多個列表,而如果您堅持在迭代可迭代對象時獲取索引號(即計數器),則枚舉可能會有所幫助。 我希望早先了解的5個Python功能對它們進行了介紹和解釋。

2.使用全局變量

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

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’ referenced before assignmentincrement2() # returns 2

許多初學者都喜歡它,因為使用global似乎可以避免傳遞函數所需的所有參數。 但這實際上是不正確的。 它只是隱藏了動作。

使用全局變量也不利于調試。 功能應被視為功能塊框,并且應可重復使用。 修改全局變量的函數可能會給很難發現的主腳本帶來副作用,并且可能導致復雜的意大利面條式代碼,并且調試起來要困難得多。

在局部函數中修改全局變量是不良的編程習慣。 您應該將變量作為參數傳遞,對其進行修改,并在函數末尾將其返回。

Photo by Vladislav Klapin on Unsplash

*不要將全局變量與全局常量混淆,因為在大多數情況下使用后者非常好。

3.不了解可變對象

對于新的Python學習者來說,這也許是最常見的驚喜,因為此功能在該語言中非常獨特。

Python中有兩種對象。 可變對象可以在運行時更改其狀態或內容,而不可變對象則不能。 許多內置對象類型是不可變的,包括int,float,string,bool和tuple。

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

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

如果函數中的默認參數是可變的,則會發生意外情況。 讓我們以以下函數為例,其中可變的空列表是參數list_的默認值。

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

讓我們兩次調用該函數,而不用輸入list_的參數,以使其采用默認值。 理想情況下,如果不提供第二個參數,則每次調用該函數時都會創建一個新的空列表。

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

什么?

事實證明,在定義函數時,Python中的默認參數會被評估一次。 這意味著調用該函數不會刷新其默認參數。

Photo by Ravi Roshan on Unsplash

因此,如果默認參數是可變的,并且每次調用該函數時都會將其更改。可變的默認參數將適用于所有將來的函數調用。 “標準”解決方案是使用(不可變)None默認值,如下所示。

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

4.不復制

復制的概念對于學習者而言可能是陌生的,甚至是違反直覺的。 假設您有一個列表a = [[0,1],[2,3]],然后通過b = a聲明一個新列表。 現在,您將擁有兩個具有相同元素的列表。 通過更改列表b中的某些元素,它應該不會對列表a產生任何(副作用),對嗎?

錯誤。

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

當您使用賦值語句(即b = a)“復制”列表時,在一個列表元素上所做的任何修改在兩個列表中均可見。 賦值運算符僅在目標和對象之間創建綁定,因此示例中的列表a和b共享相同的引用,即Python中的id()。

如何復制對象?

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

Photo by Louis Hansel on Unsplash

使用前面的示例,可以通過b = copy.copy(a)創建a的淺表副本。 淺表副本會創建一個新對象,該對象存儲原始元素的引用。 這聽起來可能很復雜,但讓我們看下面的示例:

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

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

這意味著更改b內部的元素不會影響列表a,但是修改b [1]內部的元素確實會影響a [1],因此此副本很淺。

簡而言之,如果b是a的淺副本,則對b中的嵌套對象內的元素進行的任何更改都將顯示在a中。

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

簡而言之,深拷貝復制所有內容而沒有任何綁定。

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

    關注

    3

    文章

    4417

    瀏覽量

    67501
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

    73960
  • python
    +關注

    關注

    57

    文章

    4876

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    安裝 Python VisionFive_GPIO失敗是哪里出了問題?

    盡管按照最新的文檔,我在安裝 VisionFive.gpio 包時仍然收到錯誤 sudo apt 安裝 libxml2-dev libxslt-dev python3 -m pip 安裝請求
    發表于 02-11 06:13

    礦卡應該使用什么樣子的網關或者路由器?

    做礦山車輛通信這么多年,接到最多的咨詢就是:"我們礦上的卡車到底該配什么樣的網關?"說實話,這個問題看似簡單,但真正要給出一個靠譜的答案,得把礦山的實際工況掰開了揉碎了分析。今天這篇文章,我就從
    的頭像 發表于 01-26 18:03 ?1056次閱讀
    礦卡<b class='flag-5'>應該</b>使用<b class='flag-5'>什么樣</b>子的網關或者路由器?

    室外用電線應該什么樣

    室外用電線的選擇需綜合考慮環境適應性、安全性和耐用性,以下從材質、結構、防護等級和具體場景四個方面提供詳細建議: 一、核心材質選擇 導體材質 銅芯電線:導電性能優異,電阻率低,發熱量小,長期使用不易氧化斷芯,適合戶外固定布線或長距離供電。 鋁芯電線:重量輕、成本低,但導電性較差,易氧化,適合臨時用電或短距離低壓場景(如臨時燈帶)。 推薦:優先選銅芯,確保供電穩定性和壽命。 絕緣與護套材質 PVC(聚氯乙烯):耐候性一
    的頭像 發表于 01-15 10:13 ?486次閱讀

    服務器數據恢復—一文讀懂服務器高頻故障排查+標準數據恢復流程

    服務器數據恢復到底是一個什么樣的流程? 服務器數據丟失后,進行數據恢復前應該做哪些準備? 服務器出現故障后應該如何操作才能避免數據被二次破壞?
    的頭像 發表于 01-08 11:11 ?315次閱讀

    機器學習和深度學習中需避免的 7 個常見錯誤與局限性

    無論你是剛入門還是已經從事人工智能模型相關工作一段時間,機器學習和深度學習中都存在一些我們需要時刻關注并銘記的常見錯誤。如果對這些錯誤置之不理,日后可能會引發諸多麻煩!只要我們密切關注數據、模型架構
    的頭像 發表于 01-07 15:37 ?185次閱讀
    機器學習和深度學習中需<b class='flag-5'>避免</b>的 7 個常見<b class='flag-5'>錯誤</b>與局限性

    沒有專利的opencv-python 版本

    GUI 依賴,且默認禁用 nonfree 專利模塊),版本需與核心版一致: # 先安裝核心版,再安裝配套 contrib 無頭版(避免專利風險) pip install opencv-python
    發表于 12-13 12:37

    知曉常見的銅纜安裝錯誤避免

    銅纜(如網線、電話線等)是網絡和數據傳輸的基礎設施,但在安裝過程中,由于操作不當或忽視細節,常出現各種錯誤,導致網絡性能下降甚至故障。以下是常見的銅纜安裝錯誤及預防措施,幫助您避免踩坑: 一、線纜
    的頭像 發表于 09-16 10:42 ?854次閱讀

    SCADA數據采集站應該什么樣的UPS電源?選錯可能讓數據全丟!

    不夠。今天我們就從實際應用的角度,聊聊SCADA數據采集站到底該配什么樣的UPS電源,避免踩坑。1.為什么普通UPS不適合SCADA系統?SCADA(數據采集與監
    的頭像 發表于 08-19 11:04 ?603次閱讀
    SCADA數據采集站<b class='flag-5'>應該</b>配<b class='flag-5'>什么樣</b>的UPS電源?選錯可能讓數據全丟!

    電商API常見錯誤排查指南:避免集成陷阱

    ,幫助您高效避免集成陷阱。內容基于真實電商API實踐,確保可靠性和實用性。 一、常見錯誤類型 電商API集成中,錯誤往往源于認證、數據、限流等環節。以下是高頻問題: 認證失敗錯誤 當A
    的頭像 發表于 07-11 14:21 ?2036次閱讀
    電商API常見<b class='flag-5'>錯誤</b>排查指南:<b class='flag-5'>避免</b>集成陷阱

    跟老齊學Python:從入門到精通

    本帖最后由 yuu_cool 于 2025-6-3 16:52 編輯 本資料是面向編程零基礎讀者的Python 入門教程,內容涵蓋了Python 的基礎知識和初步應用。以比較輕快的風格,向零基
    發表于 06-03 16:10

    在工業自動化中使用固態繼電器時應避免的5個錯誤

    固態繼電器(SSR)已成為工業自動化的無名英雄。它們安靜、可靠、速度快——這是繼電器應具備的所有特點。但就像高科技駕駛艙中的新手飛行員一,即使是經驗豐富的工程師在使用SSR時也會犯常見錯誤。本文讓我們來看看應如何避免在工業自動
    的頭像 發表于 04-20 11:42 ?702次閱讀

    python入門圣經-高清電子書(建議下載)

    此資料內容是一本針對所有層次的Python 讀者而作的Python 入門電子書。 全書分兩部分:第一部分介紹用Python 編程所必須了解的基本概念,包括matplotlib、NumP
    發表于 04-10 16:53

    Python入門到精通背記手冊

    電子發燒友網站提供《Python入門到精通背記手冊.pdf》資料免費下載
    發表于 03-28 17:43 ?108次下載

    ?如何在虛擬環境中使用 Python,提升你的開發體驗~

    RaspberryPiOS預裝了Python,你需要使用其虛擬環境來安裝包。今天出版的最新一期《TheMagPi》雜志刊登了我們文檔負責人NateContino撰寫的一篇實用教程,幫助你入門
    的頭像 發表于 03-25 09:34 ?811次閱讀
    ?如何在虛擬環境中使用 <b class='flag-5'>Python</b>,提升你的開發體驗~

    零基礎入門:如何在樹莓派上編寫和運行Python程序?

    在這篇文章中,我將為你簡要介紹Python程序是什么、Python程序可以用來做什么,以及如何在RaspberryPi上編寫和運行一個簡單的Python程序。什么是Python程序?
    的頭像 發表于 03-25 09:27 ?2026次閱讀
    零基礎<b class='flag-5'>入門</b>:如何在樹莓派上編寫和運行<b class='flag-5'>Python</b>程序?