标签:python generator naming-conventions naming lightweight-processes
我在同一个类中实现了一些逻辑过程.
类实例为每个进程获取一个生成器,run()使所述生成器前进.在我的情况下,发电机不会结束.
你会如何在下面的代码中调用foo_function和foo_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的成员包含.
我会将函数名称称为其责任:发现,身份验证和监视程序都是好名字.所以你只需要一种自动设置的方法:self.discovery_gen,self.authentication_gen和self.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,generator,naming-conventions,naming,lightweight-processes 来源: https://codeday.me/bug/20190612/1224138.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。