开发者社区> 问答> 正文

使用变量名字符串递增整数

我在python解释器中执行以下操作,并且可以正常工作:

rhce=rhcsa=0
args=['rhce','rhcsa']
for cert in args:
    exec(cert+'+=1')
    print(eval(cert))

>>> 1
>>> 1

如您所见,无论您使用print(rhce)还是print(eval(cert)),变量都是递增的。但是,当我将完全相同的代码片段放入类函数中时,它不再起作用。没有抛出异常,但是变量从不递增。就像exec无法正常工作:

def addCertUser(self,userid,args):
    rhcsa=rhce=0

    print(args)
    try:
        for cert in args:
            exec(cert+'+=1')
            print(eval(cert))
    except Exception as e:
        print(e)


>>> ['rhce', 'rhcsa']
>>> 0
>>> 0

我在这里想念什么?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 09:13:15 489 0
1 条回答
写回答
取消 提交回答
  • 评估或执行代码从来都不是一个好主意,百分之九十九的方法是更好的方法。在这种情况下,除非您有其他确实需要使用eval和exec的原因,否则可以通过dict来实现您的尝试。它可以非常安全地保存用于引用或查找您的值的键(“名称”)。

    class MyClass:
        def __init__(self):
            self.my_counts = {
                'rhce': 0,
                'rhcsa': 0
            }
        def add_cert_user(self, userid, args):
            print("start of function", self.my_counts)
            for cert in args:
                if cert  in self.my_counts:
                    self.my_counts[cert] += 1
            print("end of function", self.my_counts)
    
    me = MyClass()
    args = ['rhce','rhcsa']
    me.add_cert_user("test", args)
    me.add_cert_user("test", args)
    me.add_cert_user("test", args)
    

    输出

    start of function {'rhce': 0, 'rhcsa': 0}
    end of function {'rhce': 1, 'rhcsa': 1}
    start of function {'rhce': 1, 'rhcsa': 1}
    end of function {'rhce': 2, 'rhcsa': 2}
    start of function {'rhce': 2, 'rhcsa': 2}
    end of function {'rhce': 3, 'rhcsa': 3}
    

    回答来源:stackoverflow

    2020-03-23 09:14:15
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载