python中字典中多变量的最有效方法是什么?

时间:2018-05-13 12:08:28

标签: python python-3.x dictionary

这个我的代码,我看,是以最有效的方式对其进行编码的其他方法吗?   我有多个变量并插入字典。   请建议和阵列等其他选项一样。

def momentEndSpan(span_type,max_combo,length):
    if "simply supported" == span_type:
        q = max_combo
        force = {}
        RA = {"PA" : q*length/2}
        RB = {"PB" : q*length/2}
        RA_moment = {"MA" : 0}
        R_mid_moment = {"Mmid": (q*math.pow(length,2))/8 }
        RB_moment = { "MB" : 0}
        force.update(RA)
        force.update(RB)
        force.update(RA_moment)
        force.update(R_mid_moment)
        force.update(RB_moment)
        return force
    elif "one end continuous" == span_type:
        q = max_combo
        x = (3/8)*length
        force = {}
        RA = {"Phinge" : 3*q*length/8}
        RB = {"Pfixed" : 5*q*length/8}
        RA_moment = {"Mhinge" : 0}
        R_mid_moment = {"Mmid": (q*math.pow(length,2))*(9/128) }
        RB_moment = { "MB" : -1*(q*math.pow(length,2))/8 }
        force.update(RA)
        force.update(RB)
        force.update(RA_moment)
        force.update(R_mid_moment)
        force.update(RB_moment)
        return force        

非常感谢

1 个答案:

答案 0 :(得分:0)

“更多Pythonic”方式是创建一个字典并更新一次。

q = max_combo
force = {} 

if "simply supported" == span_type:
    new = {"PA" : q*length/2,
           "PB" : q*length/2,
           "MA" : 0, "Mmid": (q*math.pow(length,2))/8,
           "MB" : 0}

elif "one end continuous" == span_type:
        x = (3/8)*length
        new = {"Phinge" : 3*q*length/8,
               "Pfixed" : 5*q*length/8,
               "Mhinge" : 0,
               "Mmid": (q*math.pow(length,2))*(9/128),
               "MB" : -1*(q*math.pow(length,2))/8 }

force.update(new)

另请注意,如果force词典不包含任何先前定义的项目,您只需返回new和/或继续更新下一次操作中的new如果有的话。或者只使用名称force代替new

q = max_combo

if "simply supported" == span_type:
    force = {...}

elif "one end continuous" == span_type:
        x = (3/8)*length
        force = {...}