[英]exactly same options for 2 different functions in python click
我正在使用Python 2編寫工具, 然后單擊該工具在硬件中讀取/寫入寄存器。 我有兩個函數接受完全相同的選項。 不同之處在於它們處理輸入並將輸出直接輸出到其他設備。
這是我到目前為止的內容:
@cli.command()
@click.option('--r0', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
@click.option('--r1', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
@click.option('--r2', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
def mydevice1(r0, r1, r2):
# Handle inputs for device 1
click.echo('myfunc1')
@cli.command()
@click.option('--r0', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
@click.option('--r1', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
@click.option('--r2', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
def mydevice2(r0, r1, r2):
# Handle inputs for device 2
click.echo('myfunc2')
這兩個功能將以相同的方式處理輸入,唯一的區別是它們會將處理過的信息傳遞給不同的設備。 換句話說,我想擁有的是
@click.option('--r0', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
@click.option('--r1', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
@click.option('--r2', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
def handle_common_options(r0, r1, r2):
# Handle common options
pass
@cli.command()
def mydevice1():
handle_common_options()
# pass processed options to device 1
@cli.command()
def mydevice2():
handle_common_options()
# pass processed options to device 2
這可能嗎?
當然。
@decorator
def f():
pass
手段
def f():
pass
f = decorator(f)
所以:
decorator0 = cli.command()
decorator1 = click.option('--r0', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
decorator2 = click.option('--r1', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
decorator3 = click.option('--r2', type=click.IntRange(-2, 0xffffffff, clamp=False), default=-2)
common_decorator = lambda f: decorator0(decorator1(decorator2(decorator3(f))))
@common_decorator
def mydevice1(r0, r1, r2):
click.echo('myfunc1')
@common_decorator
def mydevice2(r0, r1, r2):
click.echo('myfunc2')
沒有lambda:
def common_decorator(f):
return decorator0(decorator1(decorator2(decorator3(f))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.