【问题标题】:Passing keywords as parameters将关键字作为参数传递
【发布时间】:2015-08-05 22:52:34
【问题描述】:

将关键字作为函数参数是否违反Python“风格”? 例如

def findStartTime(dict):
  for key, value in dict.iteritems():
    #do something based on values in dictionary
  return something

...除了风格,
是否会出现任何潜在问题?

【问题讨论】:

  • 没有。不要这样做。这可能会产生非常非常糟糕的影响。而是使用有用的参数名称。即users_dict
  • 你为什么不试试看会发生什么?
  • 在程序中的任何位置屏蔽内置函数(dict 是类型和函数,而不是语言关键字)是违反 Python 风格的。正如@KronoS 所说,无论如何您都应该使用更具描述性的名称。
  • @Will 我现在正在运行它,所以我相信它可以工作,但根据响应,肯定有一些情况下它不起作用。
  • 不起作用的情况是你尝试引用findStartTime()内的内置函数dict()的情况。

标签: python coding-style pep8


【解决方案1】:

如果将来出于某种原因您想在函数内部调用 dict() 来创建字典怎么办?无论如何,给变量起有意义的名字,而不是按它们的类型来命名。

【讨论】:

    【解决方案2】:

    问题归结为范围。如果你调用 dict,你将无法访问 dict 方法。

    例如,如果您调用了变量math,那么您将无法访问math.method()

    >>> import math
    >>> math = "MATH"
    >>> rounded_number = math.floor(3.14)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'str' object has no attribute 'floor'
    >>> import math
    >>> rounded_number = math.floor(3.14)
    >>> rounded_number
    3.0
    

    所以我导入数学,然后用字符串覆盖模块。因此AttributeError

    然后我重新导入math 并繁荣,math.floor() 又是一个有效的方法。所以基本上,如果你调用 dict "dict",它将阻止使用 dict() 构造函数和其他方法。

    希望这会有所帮助!

    【讨论】:

    • 这个答案可能更好,因为你提供了一个例子,但它不需要对我的评论做出回应(人们不会理解你来自什么背景)。
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2018-11-14
    • 1970-01-01
    相关资源
    最近更新 更多