如何分配给名称与字符串匹配的变量

时间:2019-11-04 21:21:57

标签: 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 == '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

2 个答案:

答案 0 :(得分:2)

这是使用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())  

答案 1 :(得分:1)

分配了示例值

E3632A = 10

for i in range(ord('a'), ord('j')+1):
    globals()[chr(i)] = E3632A

avergae = (a+b+c+d+e+f+g+h+i+j)/10
print(avergae)

我想在这种情况下,我们必须将字符作为变量,所以在这种情况下,我们可能必须使用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)