约定:以常量存储Python函数输出?
我知道Python中的常量更像是一种约定,但我与一位程序员同事就以下几行进行了争论:约定:以常量存储Python函数输出?,python,pep8,Python,Pep8,我知道Python中的常量更像是一种约定,但我与一位程序员同事就以下几行进行了争论: FILE = open("file.txt").readlines() 使用文件以后多次使用,例如在中用于文件中的行 我们希望代码尽可能好。我认为FILE永远不应该声明为常量,因为它依赖于open()和readlines()函数的输出。然而,相反的论点是,文件在我们的程序中从不更改,因此其行为应该像常量一样。是哪一个 除了例外,它不应该是一个变量吗,即根据命名约定作为变量写入,所以文件都是小写的吗 常数不仅仅
FILE = open("file.txt").readlines()
使用文件
以后多次使用,例如在中用于文件中的行
我们希望代码尽可能好。我认为FILE
永远不应该声明为常量,因为它依赖于open()
和readlines()
函数的输出。然而,相反的论点是,文件
在我们的程序中从不更改,因此其行为应该像常量一样。是哪一个
除了例外,它不应该是一个变量吗,即根据命名约定作为变量写入,所以
文件
都是小写的吗 常数不仅仅是在程序运行的整个生命周期内不会改变的东西,它是一个预定义值的东西的名称,通常与应用程序或环境的动态状态无关。典型的用途是数学常数,如PI
,或应用参数,如numberofu播放器
在您的示例中,FILE
的值取决于文件的内容。它不是预定义的常量,因为文件可以从程序的一次运行更改为下一次运行
另一种看待它的方式是,当你在程序中看到一个常数的用法时,你只需要找到它的初始化,就可以知道它的值是什么。但是如果从文件中初始化常量,则无法判断其值
没有定义“常量”,所以你可以做任何你想做的事情,但是我认为大多数程序员会发现你对
FILE
的预期用途令人困惑或不习惯。考虑到在某些编程语言中,您尝试的甚至不可能——如果它们具有明确的代码>常数< /Cord>声明,它们要求在编译时计算该值。< P>一个常量不只是在程序运行的过程中不改变的东西,它是一个预定义值的名称,通常独立于应用程序或环境的动态状态。典型的用途是数学常数,如PI
,或应用参数,如numberofu播放器
在您的示例中,FILE
的值取决于文件的内容。它不是预定义的常量,因为文件可以从程序的一次运行更改为下一次运行
另一种看待它的方式是,当你在程序中看到一个常数的用法时,你只需要找到它的初始化,就可以知道它的值是什么。但是如果从文件中初始化常量,则无法判断其值
没有定义“常量”,所以你可以做任何你想做的事情,但是我认为大多数程序员会发现你对
FILE
的预期用途令人困惑或不习惯。考虑到在某些编程语言中,您尝试的甚至不可能——如果它们具有显式<代码>常数< /C>声明,它们要求在编译时计算该值。您用来命名变量的大小写与解释器完全无关。@jwodder他显然指的是关于常量的指南。我添加了相关的标签。我不明白为什么它不能是常数。一些公认的常数是XXX=“foo”+“bar”
。这也是经过计算的,但显然是一个常数。这里的细微差别是列表是可变的。字符串不是(但引用也可能被删除)无关:file
是open()
函数结果的适当名称。.readlines()
'返回值的适当名称是行
。更好的名称取决于file.txt
实际存储的内容。2-在问题中指定脚本运行时,file.txt
是否会更改。@J.F.Sebastian在这种情况下,file.txt
在运行时不会更改;但如果真的发生了呢?而且,如果你不知道呢?似乎file
总是比file
Python没有常量更好的选择。您用来命名变量的大小写与解释器完全无关。@jwodder他显然指的是关于常量的指南。我添加了相关的标签。我不明白为什么它不能是常数。一些公认的常数是XXX=“foo”+“bar”
。这也是经过计算的,但显然是一个常数。这里的细微差别是列表是可变的。字符串不是(但引用也可能被删除)无关:file
是open()
函数结果的适当名称。.readlines()
'返回值的适当名称是行
。更好的名称取决于file.txt
实际存储的内容。2-在问题中指定脚本运行时,file.txt
是否会更改。@J.F.Sebastian在这种情况下,file.txt
在运行时不会更改;但如果真的发生了呢?而且,如果你不知道呢?似乎file
总是比file
更好的选择,如果函数是纯函数呢?e、 例如,计算π到1000位。我会运行它一次,然后将结果复制到程序中的文本中。:)这既损害了可读性,也使更改变得不必要的困难。无论如何,这是一种边缘情况,不适合任何一类,你可以做你喜欢的事情。在一个编译时间常数(例如C++)的语言中,这将是一个变量,所以我认为这是一个很好的模型,它是用常量只是命名约定的语言来完成的。我不认为提到C++会简化事情,但是在那里可以使用<代码> CONTXPRPR <代码>。