我正在学习python,我想从一开始就学习好习惯我遇到了问题,我想出了一个解决方案,它涉及在运行时生成变量,这是我正在做的事情的样本
for i in range (10):
current = 'variable'+str(i)+' = '+str(i)
exec (current)
所以,做这样的事情被认为是不好的做法我知道这是一个简单的例子,但我可以看到这变得复杂如果你在混合中包含对象,我很难确定好的可读代码来自坏的(i'毕竟,这是一个新手)所以我问你们,如果对于处理这种情况的首选方法不满意,我会问你们。
答案 0 :(得分:4)
不,这不是一个好习惯。无论你做什么,解决方案可能是把你的数据放在一个字典中,然后你就可以访问mydict ['variable1']或其他什么。
有时exec是合理的,但它们通常是高级元编程的例子。
这里有一个指南:如果你不确切知道为什么要这样做,为什么没有别的办法,那就不要。
答案 1 :(得分:4)
我不是一个兽医,但我看到的问题是:
可读性,如您所述。它也很难调试,因为有错误的代码可能来自各地。
运行时语法错误。根据我的经验,这比逻辑错误更令人讨厌。
代码注入,这是一个杀手。如何确保current
不代码你不想执行? (这个Web应用程序:远程用户可能会尝试擦除您的数据。)在实践中,您必须非常确定当前不包含来自用户输入的任何内容,通常更快更安全地找到不同的方式这样做。
答案 2 :(得分:4)
处理多个相关数量的正确方法是将它们放入适当的容器中。无论您使用何种语言,这都适用。
在Python中,普通容器是列表,元组和dicts。您可以根据您要对内容进行的操作进行选择。
此外,您可以使用列表理解轻松创建任何类型的“图案化”或“转换”数据的新列表:
number_strings = [str(i) for i in range(10)]
# number_strings is a list of 10 values, each of which is a string
# representation of the numbers 0 through 9 inclusive. range(10) creates a
# list of 10 values, being the integers 0 through 9; we then process that
# list with the list comprehension, transforming each integer with 'str'.