我想分配:
x0='123'
x1='123'
x2='123'
x3='123'
x4='123'
x5='123'
x6='123'
x7='123'
x8='123'
x9='123'
我编写代码表示我可以在输入123
或x1
时获得字符串x8
的输出。
for i in range(0,10):
eval("x"+str(i)+"='123'")
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<string>", line 1
x0='123'
^
SyntaxError: invalid syntax
我怎么能这样做?
答案 0 :(得分:17)
eval()
仅允许表达式。作业不是表达,而是声明;你必须改为使用exec
。
即使这样,您也可以使用globals()
字典向全局命名空间添加名称,而不需要使用任意表达式执行。
你真的不想这样做,你需要keep data out of your variable names并改为使用列表或词典:
x = ['123'] * 10
会为您提供一个列表,您可以将其设置为x[0]
,x[1]
等,而无需执行任意表达式。
答案 1 :(得分:11)
对于语句的动态执行,请使用exec
语句。
>>> exec('y=3')
>>> y
3
Eval Usgae:eval(expression)
expression
参数被解析并评估为Python表达式
例如:
>>> s=3
>>> eval('s==3')
True
>>> eval('s + 1')
4
>>> eval('s')
3
>>> eval('str(s)+"test"')
'3test'
答案 2 :(得分:-1)
你可以这样表达。
eval('"x"+str(i)+"="+"123"')