2015-02-09 86 views
1

大约20年前,当我学习perl时,我记得您可以使用变量作为代码。我不知道为什么这不起作用,所以我想知道是否“插入变量可以成为代码”在Python中。是否有可能在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是“编译”,所以我猜这样不会工作运行时的评价,但我很想知道。

请指教。谢谢!

+1

请发布您的错误追溯。我甚至不确定你想要做什么。也许你需要eval()? – 2015-02-09 10:07:08

+0

您可以使用'locals()'字典或'globals()'字典(取决于首选范围)执行此操作。但我强烈建议不要这样使用它,这是不好的设计和容易打破。 – Wolph 2015-02-09 10:13:20

回答

6

不,但你永远不会想这样做。总是使用字典。

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)

2

看看它是这样工作的;

name = "False" 
if name: 
    print(name) 

输出'False'因为name非空str所以它的计算结果为True

if eval(name): 
    print(name) 
else: 
    print('no') 

输出'no'因为name S含量已currnet全局和当地人的背景下进行评估。

但是作业不能胜利eval,因为Python赋值不是表达式,而eval需要表达式。

这是eval的错误;

s = "name=True" 
eval(s) 

要执行字符串中的语句,必须使用exec

s = "name=True" 
exec(s) 

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

+0

谢谢你指出eval()! – 2015-02-25 05:55:07

相关问题