Какой самый эффективный способ для нескольких переменных в словаре в Python? - PullRequest
0 голосов
/ 13 мая 2018

это мой код, я смотрю, есть ли другой способ кодировать это наиболее эффективным способом?У меня есть несколько переменных и вставлены в словарь.Пожалуйста, предложите и другие варианты, такие как массив и т. д. подойдут.

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 голосов
/ 13 мая 2018

Способ "More 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 = {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...