Python – 简短的语法和列表理解和迭代
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python – 简短的语法和列表理解和迭代,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1798字,纯文字阅读大概需要3分钟。
内容图文
![Python – 简短的语法和列表理解和迭代](/upload/InfoBanner/zyjiaocheng/725/1c5848234f504292996a47298ea51fcd.jpg)
我是Python列表理解的忠实粉丝,我认为它比常规迭代更容易阅读.
我正在编写一个构造函数,它在** kwargs中有可选参数,可以用来设置类’attrs,我想把它写成列表理解,但是有一个实际上没有列表似乎没有意义做任何事情.考虑一下:
class Book(object):
attrs = ('id', 'title', 'authors',...)
def __init__(self, *args, **kwargs):
[setattr(self, attr, kwargs.get(attr)
for attr in O.attrs if kwargs.get(attr)]
虽然语法看起来很好,但我认为这是错误的编码,因为你已经创建了一个列表
[None, None, None...]
那只是坐在那里.是的,我知道它是在构造函数运行后收集的,但我仍然不喜欢它.如果我读了某人的代码那么,我就会不为所动.
是否有更好的方法来执行迭代,就像列表理解一样干净,但不会创建无用的对象
编辑:
响应使用循环
class Book(object):
attrs = ('id', 'title', 'authors',...)
def __init__(self, *args, **kwargs):
for attr in attrs:
if kwargs.get(attr):
setattr(self, attr, kwargs.get(attr)
这是你们的意思吗?如果没有,那么写一个更好的方法呢?
解决方法:
您可以使用生成器表达式直接更新instance __dict__ attribute,而不是列表解析:
class Book(object):
attrs = ('id', 'title', 'authors',...)
def __init__(self, *args, **kwargs):
self.__dict__.update(
(attr, kwargs[k]) for k in kwargs.viewkeys() & self.attrs)
这也利用了dictionary views;在Python 3中,只需使用kwargs.keys()而不是kwargs.viewkeys().字典视图作为一个集合;和& self.attrs表达式生成kwargs键和属性列表之间的交集.
生成器表达式生成(键,值)对,这是dict.update() method的两个可接受输入之一.
更新self .__ dict__就好了; Python 2.7标准库在7个不同的位置使用这种技术,加上大约30个其他的突变案例.请注意,如果您使用描述符(@property和/或其他自定义描述符),那么访问self .__ dict__会绕过这些.
至于副作用的列表理解:只是没有.您确实在浪费周期创建一个立即丢弃的列表对象,这使得对列表理解的期望感到困惑.
您还可以在常规for循环中将此与显式setattr()调用结合使用:
for attr in kwargs.viewkeys() & self.attrs:
setattr(self, attr, kwargs[attr])
内容总结
以上是互联网集市为您收集整理的Python – 简短的语法和列表理解和迭代全部内容,希望文章能够帮你解决Python – 简短的语法和列表理解和迭代所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。