将PEP 448 Python 3.5代码转换为与Python 3.4兼容的代码
我有以下功能:将PEP 448 Python 3.5代码转换为与Python 3.4兼容的代码,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我有以下功能: def to_url(self): return { 'ass_cls': self.model.__class__.__name__, **{local.name: getattr(self.model.src, remote.name) for local, remote in self.model.__class__.src.property.local_remote_pairs}, **
def to_url(self):
return {
'ass_cls': self.model.__class__.__name__,
**{local.name: getattr(self.model.src, remote.name)
for local, remote in self.model.__class__.src.property.local_remote_pairs},
**{k: v
for k, v in self.model.__dict__.items()
if not k.startswith('_') and k != 'src'},
}
如何将这段代码转换为与Python 3.4兼容的代码
我相信,代码目前正在使用,这是Python3.5的一个特性。新功能在3.4中不起作用
您必须使用更旧、更详细的合并词典的方法
def to_url(self):
d = {'ass_cls': self.model.__class__.__name__}
d.update({local.name: getattr(self.model.src, remote.name)
for local, remote in self.model.__class__.src.property.local_remote_pairs})
d.update({k: v for k, v in self.model.__dict__.items()
if not k.startswith('_') and k != 'src'})
return d
它到底怎么了?(除了缩进…@MattDMo,它使用的是Python3.5特性:)它在Python3.4中不起作用有很多方法,这里有一行:
dict(ass\u cls=1,**dict(dict\u comp\u 1,**dict\u comp\u 2))
。基本上,您所需要的是一个放平的dict,它是从所有dict中获得的键的组合。@omtcyf0也许您可以突出显示哪些功能,和/或提供3.4错误消息,这样每个读者就不必自己找出它了。所以3.5的功能就是嵌套的{}语法。如果在一个或多个表达式中单独创建词典,则表达式会更清晰。您还可以将生成器表达式(生成键,值
2元组)传递到更新
,而不是创建包含理解的子词典。不确定它是否更快(虽然它应该使用更少的峰值内存),但对我来说似乎更自然。只需放下{}
并使用(k,v)
而不是k:v
。