Python生成器函数/对象命名约定
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python生成器函数/对象命名约定,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1575字,纯文字阅读大概需要3分钟。
内容图文
![Python生成器函数/对象命名约定](/upload/InfoBanner/zyjiaocheng/804/ddf2aee01ae64c46a677851ffc013784.jpg)
我在同一个类中实现了一些逻辑过程.
类实例为每个进程获取一个生成器,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生成器函数/对象命名约定全部内容,希望文章能够帮你解决Python生成器函数/对象命名约定所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。