Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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_Variables_Coding Style - Fatal编程技术网

Python 对于函数中的不同内容使用相同的变量是一种好的做法吗

Python 对于函数中的不同内容使用相同的变量是一种好的做法吗,python,variables,coding-style,Python,Variables,Coding Style,在类似以下的函数中: def foo(case): if case == 1: my_var = [] # then do something with my_var elif case == 2: my_var = {} # then do something with my_var 由于变量my_var存在于不同的情况下,因此它在运行时不会引起问题。但是这在Python中是一个好的实践吗 这可能会让其他使用相同

在类似以下的函数中:

def foo(case):
    if case == 1:
        my_var = []
        # then do something with my_var
    elif case == 2:
        my_var = {}
        # then do something with my_var

由于变量
my_var
存在于不同的情况下,因此它在运行时不会引起问题。但是这在Python中是一个好的实践吗

这可能会让其他使用相同代码的人感到困惑。一些样式指南也不鼓励为不同目的重用相同的变量名。如果你可以避免,那么你应该这样做,尽管也有很好的理由偏离这条规则。它们真的是一样的吗?一个是项目列表,另一个是值字典,那么它们包含什么呢?如果你能想出一个更具描述性的变量名,那么这是一个好主意。

一般来说,不是。当一个变量意味着不止一件事时,它会增加潜在的混淆。另外,如果您曾经不得不重构代码以添加新功能或其他东西,那么您很有可能会使该任务变得更加困难。也就是说,Python是一种鸭子类型的语言,因此,如果它在功能上是相同的,但数据类型不同,那么您可能会选择使用它。

应用您自己的判断。如果您觉得两种情况下对象的含义相似,那么使用相同的名称可能会提高可读性。如果您觉得用同一个名称来表示不同的内容令人困惑,请不要这样做。

我会说不,因为这样您就更有可能得到意外的结果和恼人的调试。但有时可能有一个特定的原因,这是一个好主意。所以这实际上取决于你在做什么。

但只有当不同的事情表现相同时(鸭子打字),我给出的例子有点做作。我面临的实际情况涉及列表与元组。在语义上,它们存储相同类型的数据。但从功能上讲,元组将作为字典中的键进行散列以便于记录,而列表可能会更新,因此添加和删除功能非常方便。当需要键时,不能将列表转换为元组吗?那就只剩下一种情况了。为什么不使用
my_list=[]
my_dict={}