是否可以在 python 中使用变量作为代码
Is it possible to use a variable as code in python
将近 20 年前,当我学习 perl 时,我记得 您可以将变量用作代码。我不确定为什么这不起作用,所以 我很想知道 "interpolating a variable can become code" 是否在 python.
例如:
def count_usages():
fields_ls = ['reporter', 'creator', 'assignee', 'duedate']
counts = {}
for field in fields_ls:
null_crit = field + "__isnull=True"
blank_crit = field + "__exact=''"
counts[field] = Ticket.objects.exclude(null_crit).exclude(blank_crit).count()
for key, value in counts.iteritems():
print "## - for " + key + " we had " + value
在某种程度上,我认为 Python 是 "compiled",所以我猜这样的运行时评估不会起作用,但我很想确定。
请指教。谢谢!
不,但你永远不会想要这样做。总是使用字典。
for field in fields_ls:
null_crit = {field + "__isnull": True}
blank_crit = {field + "__exact": ''}
counts[field] = Ticket.objects.exclude(**null_crit).exclude(**blank_crit).count()
(Python 拒绝这样做与它是 "compiled" 无关;它与 Perl 完全一样编译。)
看到它是这样工作的;
name = "False"
if name:
print(name)
输出 'False'
因为 name
是非空的 str
所以它的计算结果是 True
。
if eval(name):
print(name)
else:
print('no')
输出 'no'
,因为 name
s 内容已在当前全局变量和局部变量的上下文中进行了评估。
但是赋值在 eval
中不起作用,因为在 Python 中赋值不是表达式,而 eval
需要表达式。
这是 eval
的错误;
s = "name=True"
eval(s)
要执行字符串中的语句,您必须使用exec
。
s = "name=True"
exec(s)
现在 name
被定义为类型 bool
,值为 True
。
将近 20 年前,当我学习 perl 时,我记得 您可以将变量用作代码。我不确定为什么这不起作用,所以 我很想知道 "interpolating a variable can become code" 是否在 python.
例如:
def count_usages():
fields_ls = ['reporter', 'creator', 'assignee', 'duedate']
counts = {}
for field in fields_ls:
null_crit = field + "__isnull=True"
blank_crit = field + "__exact=''"
counts[field] = Ticket.objects.exclude(null_crit).exclude(blank_crit).count()
for key, value in counts.iteritems():
print "## - for " + key + " we had " + value
在某种程度上,我认为 Python 是 "compiled",所以我猜这样的运行时评估不会起作用,但我很想确定。
请指教。谢谢!
不,但你永远不会想要这样做。总是使用字典。
for field in fields_ls:
null_crit = {field + "__isnull": True}
blank_crit = {field + "__exact": ''}
counts[field] = Ticket.objects.exclude(**null_crit).exclude(**blank_crit).count()
(Python 拒绝这样做与它是 "compiled" 无关;它与 Perl 完全一样编译。)
看到它是这样工作的;
name = "False"
if name:
print(name)
输出 'False'
因为 name
是非空的 str
所以它的计算结果是 True
。
if eval(name):
print(name)
else:
print('no')
输出 'no'
,因为 name
s 内容已在当前全局变量和局部变量的上下文中进行了评估。
但是赋值在 eval
中不起作用,因为在 Python 中赋值不是表达式,而 eval
需要表达式。
这是 eval
的错误;
s = "name=True"
eval(s)
要执行字符串中的语句,您必须使用exec
。
s = "name=True"
exec(s)
现在 name
被定义为类型 bool
,值为 True
。