Python 압축된 경우 문의

0

질문

나는 실험 방법을 압축하면 문장 내에서 나의 코드입니다. 나는 프로젝트 내 작업에 여러 개 있는 경우""문(너무 많은 추)고 원하는 방법을 파악하는 응축니다. 분명 이러한 반복,그러나 나는 데 문제가 추가하는 작업이다.

나와 함께 다음과 같은 작업을 들 여 나의 문제점:

num=6

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

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

을 추가하고 싶은 추가적인 코드. 이것은 추가적인 것입니다 실행 작업 내에 있는 경우 문입니다. 보 는 다음과 같은 동작하는 예제 프레임워크에 대한 내가 하려고 달성하기:

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)

어떤 이유로 그것을 실행하지 않습니 작업 부분의 코드고 실패하는 구문 오류가 있습니다. 을 선언하는 명령"num=num+1"(따옴표)내에서 목록은,그러나 이 선언의 필요에 대한 실행하는 명령입니다. 나는 같은 느낌이 나는 하나 작은 것이어야 합니다 쉽게 해결할 수 있습니다. 사전에 감사합니다!!

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

최고의 응답

1

문제가 여기에는 작업은 평가를 만들 때 그것들의 목록입니다. 당신이 쓰고 싶은 그들에게 문자열로,그리고 다음 eval/exec 그에 반복입니다. 나는 가정으로 당신은 또한 조건에서 평가합니다.

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

죄송합니다,나는 수정 eval 하기 exec 실행하면 작업입니다.
Marcel

이것은 일반적으로지 당신이 원하는 무엇,그러나입니다. 당신은 아마 실제로 쓰는 코드에서 당신의 기능 및 할 refactoring 몇 가지 다른 방법이있다.
Marcel

아마 두 가지 기능을 하나의 증가와 감소하는 것이 더 좋은 생각이 아니다. 을 추가할 수 있습에 대한 참조는 그들의 목록은 그들을 부르십니다.
MSH
0

왜 기능은 무엇입니까?

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

당신이 사용할 수 있는 람다 식도.

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)

또는 사용할 수있는 사전 람다 식

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

아마도 switch 문 구조물이 도움이 될 수 없습니다.

먼저 정의 스위치 기능:

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

다음 사용에서 하나-반복에 대한 반복을 산출하는 경우 기능을 위한 스위치 값:

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

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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