Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PEP 448 Python 3.5代码转换为与Python 3.4兼容的代码_Python_Python 3.x_Dictionary - Fatal编程技术网

将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