能夠可是不必:不合適的選擇會讓編程變得更難

你練習了好久,逐漸以爲編程變得駕輕就熟,或許會以爲「這很簡單嘛」,千萬別大意,請牢記:編程其實很難。python

能夠可是不必:不合適的選擇會讓編程變得更難
圖源:unsplash程序員

在本身解決問題的時候,不合適的選擇會使編程問題變得更加困難,若是沒人指導你甚至都意識不到本身編程的方式是錯誤的。你或許曾爲不能及時完成代碼和重構而感到內疚,幸運的是,只要你願意,糾正這些錯誤可讓你成爲一個更好的程序員。編程

成爲一個偉大程序員的最好方法就是克服錯誤和問題,問題總會有更優解,須要你不斷挑戰自我。習慣於作某一件事情是很容易的,可是有時候須要一點改變才能真正成爲一個偉大的工程師。app

能夠可是不必:不合適的選擇會讓編程變得更難

未實現(Not Implemented)

雖然「未實現」錯誤多是本文中最不常見的錯誤之一,但我必須給你們提個醒。在Python中觸發「未實現」不會引起 「未實現」錯誤,而會引起類型(Type)錯誤。下面這個函數可以說明這點:機器學習

def implementtest(num):
    if num == 5:
        raise(NotImplemented)

咱們試圖運行這個函數,其中「num」等於5,看看會發生什麼:ide

能夠可是不必:不合適的選擇會讓編程變得更難

解決這種非正常狀況須要觸發「未實現錯誤」,而不是「未實現」自己。爲此,我修改了函數:函數

def implementtest(num):
    if num == 5:
        raise(NotImplemented)
    if num == 10:
        raise(NotImplementedError( Thisis the right way! ))

運行它可以給咱們合適的結果:學習

能夠可是不必:不合適的選擇會讓編程變得更難

能夠可是不必:不合適的選擇會讓編程變得更難

全局變量

在對象主導的程序設計語言中,全局變量應該保持在最小值。但同時須注意,解釋全局變量是十分必要的,而且在某些狀況下是至關正確的。測試

能夠可是不必:不合適的選擇會讓編程變得更難
圖源:unsplash設計

數據科學就是一個很好的例子,該領域中數量有限的對象導向編程在進行中,Python的使用更傾向於功能指導,和傳統作法有些不一樣。

當多個函數調用並依賴相同的值時,全局變量可能會致使命名和隱私方面的問題。全局變量能避免這種狀況的一個例子是相似於文件路徑的東西,特別是與Python文件一塊兒打包的那種。即便是編寫Gtk類,或者移動圖形用戶界面構建器,也應該局部完成,而不是全局完成。

能夠可是不必:不合適的選擇會讓編程變得更難

可變的默認值

Python中的默認參數只計算一次,在執行函數定義時進行。已知這些參數只計算一次,那麼每一個入站元素都會在每次調用中使用到,這意味着變量中包含的數據在每次函數訪問時都是可變的。

def add(item, items=[]):
    items.append(item)

與之相反,咱們應該將參數的值設置爲零,並添加一個條件來修改列表,若是這個列表並不存在的話。

def add(item, items=None):
    if items is None:
        items = []
    items.append(item)

雖然這主要適用於Python用戶的統計、數據科學、機器學習用途,但根據具體狀況,擁有不可變數據纔是王道。

能夠可是不必:不合適的選擇會讓編程變得更難

拷貝!

客觀上,使用拷貝比普通賦值更好。普通的賦值操做只是將新變量指向現有對象,而不是建立新對象。

d = 5
h = d

可使用Python的拷貝模塊執行兩種主要類型的拷貝,即淺拷貝和深拷貝。

它們的差別在於你但願經過函數傳遞變量的類型。當使用深度拷貝在單個字節數據變量上時,好比整數、浮點數、布爾值或字符串,淺度拷貝和深度拷貝之間的差異就很難察覺。可是,在處理列表、元組和術語時,我建議始終使用深度拷貝。

能夠可是不必:不合適的選擇會讓編程變得更難
圖源:unsplash

淺拷貝構造一個新的複合對象,而後儘量把原始對象中對象的引用插入其中。深度拷貝也構造一個新的複合對象,而後遞歸地將原始對象中對象的副本插入其中。根據這些定義,很容易看出爲何要對給定的數據類型進行區分。

import copy
l = [10,15,20]
h = 5
hcopy = copy.copy(h)
z = copy.deepcopy(l)

爲了測試結果,咱們能夠簡單地檢查它們的變量id是否與一個條件語句相同:

print id(h) == id(hcopy)
False

能夠可是不必:不合適的選擇會讓編程變得更難
圖源:unsplash

變得更優秀的過程一定是不斷改進的過程,挑戰自我走出溫馨區或許是痛苦的,但也必定是有益的。編程之路道阻且長,請不要聽任本身野蠻生長。

留言點贊發個朋友圈

咱們一塊兒分享AI學習與發展的乾貨

編譯組:劉鑑楠、王品一
相關連接:
https://towardsdatascience.com/avoid-these-rookie-python-mistakes-9cc17cccd051

如轉載,請後臺留言,遵照轉載規範

推薦文章閱讀

ACL2018論文集50篇解讀
EMNLP2017論文集28篇論文解讀
2018年AI三大頂會中國學術成果全連接
ACL2017論文集:34篇解讀乾貨全在這裏
10篇AAAI2017經典論文回顧

長按識別二維碼可添加關注

讀芯君愛你

能夠可是不必:不合適的選擇會讓編程變得更難

相關文章
相關標籤/搜索