這可能主要是一個基於意見的問題,但我會嘗試一個答案。
良好的變量名稱總是幫助不管語言。如果你有一個名字的函數,比如get_data
,那麼如果這個數據是一個單獨的對象或者一個列表或者什麼的話,那麼你就不能真正推斷出這個數據。但是,如果您有class Bunny
和某個名稱爲get_bunnies
的函數,則可以安全地假設它會返回某種集合。當然總是存在一個問題,例如收集是否爲list
或dict
。
但是,如果你只是閱讀這樣的代碼,你可以很快推斷出,如果它與關鍵字一起使用,它是一個dict
或它的一些衍生物。
Duck Typing的用途簡而言之就是「如果它像鴨子一樣走路,像鴨子一樣游泳,像鴨子一樣跳,,那麼它可能是一隻鴨子。這意味着,即使get_bunnies
回報dict
一些奇特的子類,你應該能夠使用它像它實際上是一個dict
,只要它實現了正確的__dunder__
- 方法。
鴨打字總是當然引發了一些問題,強類型不對,但通常只是一個約定的事情。如果您不確定某個函數會返回什麼,您可以隨時對其進行測試:在代碼中,在解釋器中甚至查找源代碼。
關於命名變量的「匈牙利符號」,如strName
或name_string
......我一直同意羅伯特·C·馬丁的觀點,認爲它給變量名帶來不必要的冗餘。當然,對於動態輸入來說,冗餘並不是那麼糟糕,但即便如此,我也不喜歡它。在閱讀代碼並搜索代碼時,它往往會讓事情變得更加困難。或者甚至更多,當變量類型改變而不改變名稱時...
如果你既沒有示例代碼可用,也沒有好的命名,你需要查找源代碼,或者希望有一個包含在函數定義中的docstring。如果運氣好,文檔字符串定義爲並且最新的日期爲,那麼一個好的IDE將會幫助您解析該字符串,甚至是函數的整個定義,而無需自己查找源文件。
您可以隨時檢查它的類型,例如,用'type()'。但總的來說,一個對象的類型應該在寫得很好的代碼中非常清晰,並且通常會被函數名稱隱含。 – Natecat