Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我要在Python中将所有字符串转换为常量?_Python_Constants - Fatal编程技术网

为什么我要在Python中将所有字符串转换为常量?

为什么我要在Python中将所有字符串转换为常量?,python,constants,Python,Constants,我不知道这对社区是否有用,因为这可能是我的情况所独有的。我和一位高级程序员一起工作,他在代码中有一个特殊的习惯,即在使用字符串之前将所有字符串转换为常量。我就是不明白为什么。这对我来说毫无意义。99%的时间里,我们没有从转换中获得抽象或表达能力,就像这样: URL_CONVERTER = "url_converter" URL_TYPE_LONG = "url_type_long" URL_TYPE_SHORT = "url_type_short" URL_TYPE_ARRAY = [URL_T

我不知道这对社区是否有用,因为这可能是我的情况所独有的。我和一位高级程序员一起工作,他在代码中有一个特殊的习惯,即在使用字符串之前将所有字符串转换为常量。我就是不明白为什么。这对我来说毫无意义。99%的时间里,我们没有从转换中获得抽象或表达能力,就像这样:

URL_CONVERTER = "url_converter"
URL_TYPE_LONG = "url_type_long"
URL_TYPE_SHORT = "url_type_short"
URL_TYPE_ARRAY = [URL_TYPE_LONG, URL_TYPE_SHORT]
for urltype in URL_TYPE_ARRAY:
    outside_class.validate(urltype)
就这样。通常,常量名称几乎总是字符串的内容,大写,而且这些常量很少被多次引用。这样创建的常量中,在运行时被引用两次或两次以上的可能不到5%

这是我不懂的编程技巧吗?或者这只是一个坏习惯?其他程序员开始模仿这种(可能很糟糕)形式,我想知道在盲目跟随之前,我是否也有这样做的理由

谢谢


编辑:更新了示例。此外,我理解每个人的观点,并补充说,这是一个相当小的商店,最多有两个人会看到任何人的代码,更不用说编写代码了,这些都是我们正在构建的非常简单的一次性代码,而不是复杂的工人或任何东西。我理解为什么在大型项目中这是一个很好的实践,但是在我们的工作环境中,对于一个非常简单的任务来说,这会带来太多的开销。

这有助于保持代码的一致性。例如,如果在客户端和服务器中都使用URL_TYPE_LONG,并且出于某种原因需要更改其字符串值,则只需更改一行即可。您不会忘记更改代码中的一个实例,或者更改代码中具有相同值的字符串

即使这些常数现在只被引用一次,我们又是谁来预测未来呢


我认为这也源于一段时间(恐龙在地球上漫游)你试图(a)保持数据和代码的分离,(B)你担心你分配了多少字符串。

下面是一些场景,这将是一个很好的实践:

  • 你有一个很长的字符串,可以在很多地方使用。因此,您可以将它放在一个(可能更短的)变量名中,以便您可以轻松地使用它。这可以防止代码行变得过长/重复

  • (有点类似于#1)你有一个很长的刺,如果不把它从屏幕上送走,它就无法适应某一行。因此,将字符串放入变量中以保持行的简洁

  • 您希望保存一个字符串并在以后更改(添加/删除字符)。只有一个变量才能提供此功能

  • 您希望能够通过只更改一个变量的值来更改使用同一字符串的多行。这比通过许多行查找字符串的出现要容易得多。它还可以防止您丢失一些代码,从而在代码中引入bug


  • 基本上,答案是要聪明。扪心自问:将字符串转换成变量可以节省打字时间吗?它会提高效率吗?它会使您的代码更易于使用和/或维护吗?如果您对其中任何一项回答“是”,那么您应该这样做。

    这样做确实是个好主意。。我与100多名其他工程师一起在一个相当大的python代码库上工作,并证明这使协作更加容易

    如果您在任何地方都直接使用底层字符串,那么在一个特定模块中引用它时,您将更容易输入错误,并且可能导致难以捕获的错误


    当您使用这样的变量时,现代IDE更容易提供自动完成和重构支持。您可以在以后轻松地将基础标识符更改为不同的字符串甚至数字;这使您更容易跟踪引用特定标识符的所有模块。

    在上下文中提供一个示例。换句话说,向我们展示其中一个字符串,并向我们展示它在一段代码中的使用情况。很乐意,但无法共享我们的代码。我将用一个合理的答案更新这个例子-我认为我的答案仍然适用于你更新的问题。在您给出的示例代码中,您不在我列出的四个场景中的任何一个(或任何其他类似场景)。因此,这不是对代码的明智使用。所以,在这个具体的例子中,我会说不,你不应该这样做。这里不需要这些行/变量。再说一次,你需要聪明一点。做最有效/最有优势的事。