Python kondenzovaných ak závierka

0

Otázka

Ja som experimentovať s ako ku kondenzácii ak závierky v mojom kóde. Mám projekt, ja som pracovala na ktoré má niekoľko "ak" závierky (príliš veľa sledovať) a chcú vymyslieť spôsob, ako ku kondenzácii nich. Samozrejme, že sa jedná o pre slučky, ale mám problémy pridávať ďalšie činnosti v rámci tejto slučky.

Ja som prišiel s nasledujúci pracovný príklad preukázať, môj problém:

num=6

if_options = [num==5, num==6]

for i in range(len(if_options)):
    if if_options[i]:
        print(num)

Chcem pridať ďalší kus kódu. Tento ďalší kus bude vykonávať činnosti, v prípade ziskov a strát. Pozrite si nasledujúci pracovný príklad ako rámec pre to, čo som sa snaží dosiahnuť:

num=6

if_options = [num==5, num==6]
operations = [num=num+1, num=num-1]

for i in range(len(if_options)):
    if if_options[i]:
        operations[i]
        print(num)

Z nejakého dôvodu, to nebude vykonávať operácie časť kódu a zlyhá s syntaktická chyba. Nie, dajte mi vyhlásiť príkaz "num=num+1" (bez úvodzoviek) v zozname, avšak toto vyhlásenie je potrebné na vykonanie príkazu. Mám pocit, že som chýba jedna maličkosť a to by malo byť ľahké vyriešiť. Ďakujem vopred!!

for-loop function loops python
2021-11-23 22:51:10
4

Najlepšiu odpoveď

1

Tu je problém, že operácie, ktoré sa vyhodnocujú pri vytváraní zoznamu z nich. Chcete zapísať ich ako reťazce, a potom eval/exec ich v slučke. Budem predpokladať chcete aj podmienky vyhodnotené v slučke.

num = 6

if_options = ['num==5', 'num==6']
operations = ['num=num+1', 'num=num-1']

for i in range(len(if_options)):
    if eval(if_options[i]):
        exec(operations[i])
        print(num)
2021-11-23 23:04:38

Ospravedlňujeme sa, opravil som eval na exec pri behu operácie.
Marcel

Toto je vo všeobecnosti nie je to, čo chcete, však. Mali by ste asi skutočne napíšte kód vo svojej funkcie, a to refactoring iným spôsobom.
Marcel

Možno majú dve funkcie jednej väčšej a jednej pre znižovanie by byť lepší nápad. Môžete pridať odkaz, ich zoznam a hovor im v slučke.
MSH
0

prečo nie funkcií?

def check(inp):
    #you can do some logic and type checking here
    return type(inp)==int # for example, or return arguments to pass to the operatiins

def operation(inp2):
    if inp2: # check if true or not empty, as an example
        #do some operations

# and then you do something like

for x in input_of_things:
    operation( check( x ) )
2021-11-23 23:19:33
0

Môžete použiť lambda výrazy príliš.

num = 6
if_option_checks = [lambda x: x == 5, lambda x: x == 6]
operations = [lambda x: x + 1, lambda x: x - 1]
for check, operation in zip(if_option_checks, operations):
    if check(num):
        num = operation(num)

Alebo by ste mohli používať slovníky a lambda výrazy

num = 6
if_option_checks = {"add": lambda x: x == 5, "sub": lambda x: x == 6}
operations = {"add": lambda x: x + 1, "sub": lambda x: x - 1}
for key, check in if_option_checks.items():
    if check(num):
        num = operations[key](num)
2021-11-24 00:40:38
0

Možno prepínať výkaz štruktúra by mohla pomôcť.

Najprv definovať a prepínač funkcie:

def switch(v): yield lambda *c: v in c

Potom použite je v jedno-iterácia slučka, že výnosy prípade funkcia spínača hodnota:

for case in switch(num):

    if case(5):
        num = num + 1
        break

    if case(6):
        num = num - 1
        break

    ...
2021-11-24 02:44:41

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................