Python

时间:2017-10-27 19:53:06

标签: python

我经常编写一些函数,这些函数使用一个参数来处理要处理的数据,以及一个或多个附加参数以及操作规范。如果"规范"参数是可选的,将它们放在强制性data参数之后是有意义的:

sort(data, key=..., reverse=True) 

但是假设两个论点(或其中几个)都是强制性的? re模块的函数将regexp(操作)置于字符串(要操作的数据)之前。当然,可选参数仍然存在。

re.search(r"[regexp]+", text, flags=re.I)

所以问题在于:抛开可选参数,是否有任何明确的约定(官方PEP或建立的通用实践),如何根据其功能/目的订购强制性参数?回到我第一次学习Python时,我记得曾经读过一些声称Python的优点之一就是它有明确的约定,特别是在这个特定的东西上。但我现在无法检索任何此类信息。

如果不清楚:我很恳请指出既定的惯例或标准,而不是建议哪个订单最好。"

2 个答案:

答案 0 :(得分:0)

这是一个很好的问题,我很高兴看到其他答案。我从来没有遇到任何关于Python中函数参数的约定,除了在PEP 8中它声明:

  

始终将self用作实例方法的第一个参数。

     

始终使用cls作为类方法的第一个参数。

     

如果函数参数的名称与保留关键字冲突,则为   通常更好地附加单个尾随下划线而不是   使用缩写或拼写损坏。因此class_比   CLSS。 (或许最好是通过使用同义词来避免这种冲突。)

在我看来,函数参数应始终按重要性排序。我知道重要性是主观的,但您通常可以确定哪个参数对您的功能最重要。由于StackOverflow不是关于意见,因此需要考虑一下。

因此,抛开意见,我认为您的问题是相关的,但有时问题会导致其他讨论。如果你有很多参数,你的功能可能做得太多了。根据许多资源,你应该尝试只使用一个参数,并避免使用超过三个参数,后者被认为是最坏的情况。因此,如果您牢记这一点,大多数时候订购参数不会影响可读性。

答案 1 :(得分:0)

我尝试订购参数以提高代码的可读性(识字编程)。 例如:

  system.add(user, user_database) # add a user to a database
  system.add(user_database, user) # add a database to a user(?)

这通常与@scharette的观点一致,“最重要”的参数是为其创建函数的对象。但是,正如他所说的那样,它是主观的,可以说数据库是数据库系统库中最重要的对象。

阅读代码应揭示初次阅读的意图;阅读一组函数定义应该可以揭示它们的作用。