在python中是否可以使用变量作为代码

在python中是否可以使用变量作为代码,python,django,django-queryset,Python,Django,Django Queryset,大约20年前,当我学习perl时,我记得可以将变量作为代码来使用。我不知道为什么这不起作用,我想知道python中的“插入变量是否可以成为代码”。 例如: def count_usages(): fields_ls = ['reporter', 'creator', 'assignee', 'duedate'] counts = {} for field in fields_ls: null_crit = field + "__isnull=True

大约20年前,当我学习perl时,我记得可以将变量作为代码来使用。我不知道为什么这不起作用,我想知道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是“编译的”,所以我猜像这样的运行时评估是行不通的,但我想确定一下


请告知。谢谢大家!

没有,但你永远不会想这样做。经常使用字典

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拒绝这样做与它被“编译”无关;它与Perl完全一样被编译。)

不,但您永远不会想这样做。经常使用字典

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拒绝这样做与它被“编译”无关;它与Perl完全一样被编译。)

看看它是这样工作的

name = "False"
if name:
  print(name)
输出
'False'
,因为
name
是非空的
str
,所以它的计算结果为
True

if eval(name):
  print(name)
else:
  print('no')
s = "name=True"
exec(s)
输出
'no'
,因为
name
s内容已在current全局和局部上下文中进行了评估

但是赋值在
eval
中不起作用,因为在Python中赋值不是表达式,而
eval
需要表达式

这是
eval
的错误

s = "name=True"
eval(s)
要执行字符串中的语句,必须使用
exec

if eval(name):
  print(name)
else:
  print('no')
s = "name=True"
exec(s)

现在
name
被定义为
bool
类型,值为
True

请看它是这样工作的

name = "False"
if name:
  print(name)
输出
'False'
,因为
name
是非空的
str
,所以它的计算结果为
True

if eval(name):
  print(name)
else:
  print('no')
s = "name=True"
exec(s)
输出
'no'
,因为
name
s内容已在current全局和局部上下文中进行了评估

但是赋值在
eval
中不起作用,因为在Python中赋值不是表达式,而
eval
需要表达式

这是
eval
的错误

s = "name=True"
eval(s)
要执行字符串中的语句,必须使用
exec

if eval(name):
  print(name)
else:
  print('no')
s = "name=True"
exec(s)

现在
name
被定义为
bool
类型,值为
True

请发布错误回溯。我甚至不知道你想做什么。可能您需要eval()?您可以使用
locals()
字典或
globals()
字典(取决于首选范围)执行此操作。但我强烈建议不要这样使用它,它的设计很糟糕,而且容易损坏。请发布您的错误回溯。我甚至不知道你想做什么。可能您需要eval()?您可以使用
locals()
字典或
globals()
字典(取决于首选范围)执行此操作。但我强烈建议不要这样使用它,它的设计很糟糕,而且容易损坏。