gpt4 book ai didi

Python:将标志传递给函数

转载 作者:太空狗 更新时间:2023-10-29 21:21:27 24 4
gpt4 key购买 nike

很长一段时间以来,我一直在尝试找出将标志传递给 python 函数的最佳方式。最直接的方法是这样的:

def func(data, flag1, flag2, flag3):
...

func(my_data, True, False, True)

这非常简洁明了,但难以阅读,因为“True”或“False”这个词无法告诉您设置了什么标志,您必须从左边开始仔细计算参数。您可以使它们成为关键字参数:

def func(data, flag1=False, flag2=False, flag3=False):
...

func(my_data, flag1=True, flag3=True)

但这有点多余,因为“True”根本没有任何意义。我可以将其作为列表传递:

func(mydata, ['flag1', 'flag3'])

func(mydata, [func.flag1, func.flag3])

但是第一个感觉比较脏,使用字符串作为标志,第二个还是有些重复。理想情况下,我想说这样的话:

func(my_data, flag1, flag3)

以最少的冗长和冗余将标志传递给函数。有什么办法可以在 python 中做这样的事情吗?

编辑:我最终选择了:

func(mydata, flagA=1, flagB=1)

主要是出于上述原因:编译时检查(与传入字符串相比)、无 namespace 污染(与使用全局“ENUM”相反)和最小样板(=1 或 =0 仅 2 个字符,与 5或 6 表示 =True 或 =False)。它还使设置标志的默认值变得非常容易:

def func(data, flagA=1, flagB=0, flagC=1):
...

这比跳过箍来提取默认值并将其分配给 **kwarg 风格的标志要清晰和容易得多。这些标志基本上是静态检查的,写起来非常清晰/干净。现在要是我能剃掉最后两个字符就好了……

最佳答案

您可以将flag1 ...flagN定义为全局变量,并使用func( *args)定义您的函数

FLAG1 = 1
FLAG2 = 2

def func(*args):
pass

func(FLAG1, FLAG2)

通过单独定义标志,而不是使用字符串,您可以避免标志名称中的拼写错误和调试时的一些头痛

关于Python:将标志传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7035980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com