Python:在方法之间传递变量时,是否需要为其指定一个新名称?

Python:在方法之间传递变量时,是否需要为其指定一个新名称?,python,coding-style,methods,Python,Coding Style,Methods,我在想,如果程序很小并且有很多方法,答案可能是“不”,但是在一个更大的程序中呢?如果我打算在整个程序的多个方法中使用一个变量,那么: 为每个方法想出不同的措辞(以消除命名冲突)。 每个方法使用相同的名称(以消除混淆) 只需使用一个全局变量(消除两者) 这更像是一个文体问题,而不是其他任何问题。传递变量时使用什么命名约定?在方法之间传递变量时。。。没有命名冲突,因为变量在每个方法中都是局部的,所以两个方法中使用相同的名称可以消除混淆 def printIt(num): print(num)

我在想,如果程序很小并且有很多方法,答案可能是“不”,但是在一个更大的程序中呢?如果我打算在整个程序的多个方法中使用一个变量,那么:

为每个方法想出不同的措辞(以消除命名冲突)。 每个方法使用相同的名称(以消除混淆) 只需使用一个全局变量(消除两者)


这更像是一个文体问题,而不是其他任何问题。传递变量时使用什么命名约定?

在方法之间传递变量时。。。没有命名冲突,因为变量在每个方法中都是局部的,所以两个方法中使用相同的名称可以消除混淆

def printIt(num):
    print(num)

def f():
    num = 2
    printIt(num)

我倾向于在局部函数中大量重用变量名,只要它们是中间过程。通常是db查找或计算的“结果”,用于生成或构造方法的最终结果


我很少使用全局变量,事实上只有在我必须使用的情况下才使用。

Python的作用域规则使您不必为了满足语言需要而对变量使用不同或相同的名称

变量名的选择应该主要由可读性和可维护性问题驱动。一般来说,在整个代码中只使用一个名称来标识特定类型的东西是很好的。这种一致性对读者很有帮助。对变量、方法和类进行命名是让自己和他人都清楚自己意图的最大工具之一

关于命名事物的文献很多(但并不完全一致)。需要考虑以下几点:

  • 具有小范围的名称可以是短名称,不一定说明变量的全部情况,因为变量的整个上下文很容易看到。i、 循环中的j,k作为计数器可能是一个经典的例子——但是在Python中,您并没有看到太多关于集合循环中的项目构造的花花公子
  • 另一方面,范围更大的名称(可能是类中的实例变量)应该具有更完整的描述性名称,因为它们出现在初始化/修改上下文不可见的地方
  • 尽量不要在你的名字中加入“噪音”的成分。频率信息---信息部分到底增加了什么
  • 不要在名称中包含数据结构类型——URLDECT中的dict对您没有多大帮助
  • 尽可能使用您正在使用的域中的名称,但不要强制使用
  • Python风格倾向于简洁的名称。仔细的思考和选择往往会产生一个简短而贴切的名字

  • 不要去发明方法来指明名称属于哪个方法。如果编码正确,就不会将其他方法变量视为局部变量。如果您在方法foobar上有一个hanle,并且想要它的foo值,请使用foobar.foo

    变量名称应指示变量的内容,并有助于理解代码。用许多不同的名称引用一个foo,因为很多方法都使用foo,这是没有帮助的。你最好把时间花在澄清这里的一个foo不是那里的foo的案例上。对于这些情况,您可能需要在至少一种情况下使用不同的术语。在代码中记录案例


    为变量使用相同的名称将有助于跟踪代码中使用键对象的位置。您还将拥有许多使代码更容易理解的通用变量:i、j和k表示interator;结果对结果对中间结果;等。

    当名称的意思相同时,应使用相同的名称。例如,如果您有一个“cars”数据库,您可能希望使用名称“car”来指代每个方法或函数中的单个car,这些方法或函数接受car作为参数或在内部使用car对象。这样,阅读代码的人会开始对自己说“好的,这是一辆车”,而不是“嗯,我想知道‘foo’是什么类型的东西……”


    因此,在使用变量名时要保持一致,这意味着您可以多次使用相同的名称,只要它具有相同的含义。如果可能的话,千万不要用同一个名字来表示两件不同的事情。例如,不要用“item”来表示一个上下文中的一辆汽车,而用另一个上下文中的一个列表中的一个随机项目。

    在不同的方法或函数参数中,没有这样的要求给变量指定不同的名称。事实上,这将极大地损害可读性,并违背常识——当两件事情是相同的,一个人试图给它们取相同的名字,而不是不同的名字。

    我不理解这个问题。您能举个例子吗?最好修改printIt中的num,然后在调用printIt后也打印num,以显示f()中的num没有更改。我认为请求者知道该变量在方法中是局部的。他似乎在问,如果你在任何地方都应该使用'num',这在大型程序中是否可以接受,为什么不能?