Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何为名称与字符串匹配的变量赋值_Python 3.x - Fatal编程技术网

Python 3.x 如何为名称与字符串匹配的变量赋值

Python 3.x 如何为名称与字符串匹配的变量赋值,python-3.x,Python 3.x,有没有办法让下面的代码更优雅?意思是,比如说几行 if beta == 'a': a = E3632A if beta == 'b': b = E3632A if beta == 'c': c = E3632A if beta == 'd': d = E3632A

有没有办法让下面的代码更优雅?意思是,比如说几行

            if beta == 'a':
                a = E3632A
            if beta == 'b':
                b = E3632A
            if beta == 'c':
                c = E3632A
            if beta == 'd':
                d = E3632A
            if beta == 'e':
                e = E3632A
            if beta == 'f':
                f = E3632A
            if beta == 'g':
                g = E3632A
            if beta == 'h':
                h = E3632A
            if beta == 'i':
                i = E3632A
            if beta == 'j':
                j = E3632A
    average=(a+b+c+d+e+f+g+h+i+j)/10

这里有一种使用
exec
的方法,该方法可行,但不推荐使用,因为
exec
通常是一种容易出错的方法:

import string
if beta in string.ascii_lowercase[:10]:
    exec("%s = E3632A" % beta)
average=(a+b+c+d+e+f+g+h+i+j)/10
更好的方法是将变量分配到字典:

vars = {'a':a, 
        'b':b, 
        'c':c,
        'd':d,
        'e':e,
        'f':f,
        'g':g,
        'h':h,
        'i':i,
        'j':j
         # other vars ...
          } 

import string
if beta in string.ascii_lowercase[:10]:
    vars[beta] = E3632A
average=sum(vars.values())/len(vars.values())  
指定一个示例值 我想,在这种情况下,我们必须将一个字符作为变量,所以在这种情况下,我们可能必须使用global,如果这是在一个类中,我们可以使用settattr

class example: 
    def method_example(self):
       E3632A = 10
    
       for i in range(ord('a'), ord('j')+1):
         setattr(self, chr(i), E3632A)
            
       avergae = (a+b+c+d+e+f+g+h+i+j)/10
       print(avergae)

嗨,FCASAN,欢迎来到SO!通常,可能更漂亮的工作代码不太适合堆栈溢出,因此如果您没有得到您在这里寻找的响应,我可能会尝试代码复查。另外,我也很喜欢用字典来做类似的事情。。也。。。最后一行是做什么的?Hi@en_Knight My code的可能副本pics在120秒内每12秒计算一次电源电压和电流消耗,以计算电压/电流并获得系统的平均值。结果会告诉我能量消耗是否正确。谢谢@JosephSible,但你分享的链接不是我想要的。现在我正在查看Ruzihm的回复,可能这正是我想要的。@FCasian您找到解决方案了吗?我想,您可以删除IF块。在第二个例子中,字典会抛出一个nameerror,因为a,b,c,d。。。不是defined@roshanok你指的是哪一个来移除IF块?当
beta
不是a-j时,Asker不想更改任何内容。他们可能会以其他方式使用其他变量,而这在他们的问题中并没有表现出来。对于nameerror,在代码片段Asker显示之前,变量显然已经定义好了。我同意你的观点,并且完全理解。这是对提问者的一个建议和信息——如果它能帮助解决这个用例的话。第一个只有在a-j是全局变量的情况下才有效。如果Asker的代码片段出现在函数中,那么它将无法工作。第二个将所有变量a-j设置为
E3632A
,这不是Asker想要做的。因为问题本身是关于分配名称与字符串匹配的变量,所以我认为他可能正在寻找字符串作为变量,所以我的答案强调如何将字符串作为变量。我只是试着用这个例子,所以我用了a到j,反正提问者只能选择他想要的。谢谢你的评论
class example: 
    def method_example(self):
       E3632A = 10
    
       for i in range(ord('a'), ord('j')+1):
         setattr(self, chr(i), E3632A)
            
       avergae = (a+b+c+d+e+f+g+h+i+j)/10
       print(avergae)