这可能主要是一个基于意见的问题,但我会尝试一个答案。
良好的变量名称总是帮助不管语言。如果你有一个名字的函数,比如get_data
,那么如果这个数据是一个单独的对象或者一个列表或者什么的话,那么你就不能真正推断出这个数据。但是,如果您有class Bunny
和某个名称为get_bunnies
的函数,则可以安全地假设它会返回某种集合。当然总是存在一个问题,例如收集是否为list
或dict
。
但是,如果你只是阅读这样的代码,你可以很快推断出,如果它与关键字一起使用,它是一个dict
或它的一些衍生物。
Duck Typing的用途简而言之就是“如果它像鸭子一样走路,像鸭子一样游泳,像鸭子一样跳,,那么它可能是一只鸭子。这意味着,即使get_bunnies
回报dict
一些奇特的子类,你应该能够使用它像它实际上是一个dict
,只要它实现了正确的__dunder__
- 方法。
鸭打字总是当然引发了一些问题,强类型不对,但通常只是一个约定的事情。如果您不确定某个函数会返回什么,您可以随时对其进行测试:在代码中,在解释器中甚至查找源代码。
关于命名变量的“匈牙利符号”,如strName
或name_string
......我一直同意罗伯特·C·马丁的观点,认为它给变量名带来不必要的冗余。当然,对于动态输入来说,冗余并不是那么糟糕,但即便如此,我也不喜欢它。在阅读代码并搜索代码时,它往往会让事情变得更加困难。或者甚至更多,当变量类型改变而不改变名称时...
如果你既没有示例代码可用,也没有好的命名,你需要查找源代码,或者希望有一个包含在函数定义中的docstring。如果运气好,文档字符串定义为并且最新的日期为,那么一个好的IDE将会帮助您解析该字符串,甚至是函数的整个定义,而无需自己查找源文件。
您可以随时检查它的类型,例如,用'type()'。但总的来说,一个对象的类型应该在写得很好的代码中非常清晰,并且通常会被函数名称隐含。 – Natecat