gpt4 book ai didi

Python 生成器函数/对象命名约定

转载 作者:太空狗 更新时间:2023-10-30 00:55:36 27 4
gpt4 key购买 nike

我在同一个类中实现了几个逻辑过程。一个类实例为每个进程获得一个生成器,run() 推进所述生成器。在我的例子中,生成器不会结束。

如何在下面的代码中调用foo_functionfoo_object

class C(threading.Thread):
def foo_function(self):
""" generator *function*,
logical process foo """
while True:
# some state checks
if self.some_attr:
# side-effects here
pass
yield

def __init__(self):
# generator *object*
# i.e. process instance
self.foo_object = self.foo_function() # <- here

def run(self):
while True:
next(self.foo_object)
next(self.another_object)
if xxx:
next(self.yet_another_object)

典型的进程有发现认证看门狗

如何以合理的方式命名定义生成器的函数和包含生成器对象的属性?

最后只是为了好玩,同名会很疯狂,对吧?

class C:
def foo(self):
yield 1; yield 2
def __init__(self):
self.foo = self.foo()

c = C()
type(C.foo) is function
type(c.foo) is generator

最佳答案

您可以使用您自己设计的某种约定,使包含生成器的成员从函数的名称自动创建。例如,在我的约定中,所有生成器都将包含在一个名为:<function_name>_gen 的成员中。 .

我会调用函数名称作为其职责:discovery , authenticationwatchdog是好名字。所以你只需要一个方法来自动设置:self.discovery_gen , self.authentication_genself.watchdog_gen .

代码示例:

class C:

def discovery(self):
yield 1; yield 2

# Register all the functions for wich you want to have a generator
# object.
REGISTERED_GEN_FUNCTIONS = [discovery]

def __init__(self):

for func in self.REGISTERED_GEN_FUNCTIONS:
name = func.__name__
# All generators objects will be called <function_name>_gen.
setattr(self, "{0}_gen".format(name), getattr(self, name)())

a = C()
for i in a.discovery_gen:
print(i)

输出

>>> 1
>>> 2

关于Python 生成器函数/对象命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755189/

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