ปลั๊กอินสำหรับไพธอนตัวบีบถ้าการให้สอบสวน

0

คำถาม

ฉันทำการทดลองกับ วิธีที่จะ condense ถ้าการให้สอบสวน ภายในตอบสนองรหัสผม ฉันต้องเป็นโครงการฉันกำลังทำเรื่องนั้นมีหลาย"ถ้า"การให้สอบสวน(มากเกินไปที่จะติดตามข่าวสารของและอยากจะคิดหาทางที่จะ condense พวกเขา เห็นได้ชัดว่านี่เกี่ยวข้องกับเป็นสำหรับวงแต่ฉันกำลังมีปัญหาในการเพิ่มนามสกุลเพิ่มเติปฏิบัติการอยู่ในนี้ด้วยนะ

ฉันขึ้นมาบอก ตามทำงานตัวอย่างเช่น เพื่อแสดงให้เห็นปัญหาของฉั:

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

ขอโทษฉัน corrected eval ต้อง exec ตอนที่วิ่งรองปฏิบัติการ
Marcel

นี่คือโดยทั่วไปไม่ใช่สิ่งที่คุณต้องการอย่างไรก็ตาม. คุณควรจะจริงเขียนรหัสในของคุณฟังก์ชันและทำ refactoring มีทางอื่นแล้ว
Marcel

บางทีอาจมีสองคนฟังก์ชันหนึ่งสำหรับเพิ่มขึ้นและหนึ่งอันสำหรับ decreasing จะเป็นความคิดที่ดีกว่านั้น คุณสามารถเพิ่มการอ้างอิงของพวกเขาจะเป็นรายการและเรียกพวกนั้นเป็นคนในด้วยนะ
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

คุณสามารถใช้ lambda แสดงเหมือนกัน

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)

หรือคุณสามารถใช้พจนานุกรมและแสดงออ lambda

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

บางทีอาจจะเป็นเปลี่ยนคำให้การโครงสร้างอาจช่วยได้

ก่อนกำหนดปุ่มฟังก์ชัน:

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

งั้นใช้คืนในหนึ่ง-ทำซ้ำสำหรับเรื่องนั่นมีค่าเป็นกรณีฟังก์ชันเพื่อสลับค่า:div(ค่า;ค่า;...)

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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่