繁体   English   中英

如何进一步传递kwargs?

[英]How to pass kwargs further?

我有一个外部函数wms130.getfeatureinfoOWSLib ,它采用kwargs:

def getfeatureinfo(self, layers=None,
...
                       method='Get',
                       timeout=None,
                       **kwargs
                       ):

我在内部函数wms130.__build_getmap_request使用了 kwargs :

    ...
    request['transparent'] = str(transparent).upper()
    request['bgcolor'] = '0x' + bgcolor[1:7]
    request['exceptions'] = str(exceptions)

    if time is not None:
        request['time'] = str(time)

    if elevation is not None:
        request['elevation'] = str(elevation)

    # any other specified dimension, prefixed with "dim_"
    for k, v in six.iteritems(dimensions):
        request['dim_' + k] = str(v)

    if kwargs:
        for kw in kwargs:
            request[kw]=kwargs[kw]
    return request

显然,作者的意图是将所有关键字参数按原样放入 HTTP 查询的参数中。

不幸的是,当我将 kwarg 传递给外部函数时,它有一个值

{'MAXCC': '100'}

但是当到达这个内部代码时它有一个值

{'kwargs': {'MAXCC': '100'}}

即增加了额外的水平。 这是因为内部函数被调用

# GetMap-Request
        request = self.__build_getmap_request(
            layers=layers,
            styles=styles,
            srs=srs,
            bbox=bbox,
            dimensions=dimensions,
            elevation=elevation,
            format=format,
            size=size,
            time=time,
            transparent=transparent,
            bgcolor=bgcolor,
            exceptions=exceptions,
            kwargs=kwargs)

即外部 kwargs 被包装成名称为kwargs单个关键字参数。

问题是双重的:

1) OWSLib 中的错误的可能性有多大,目的是将 kwargs 扩展? (我会说它是 99%,因为不需要添加循环来迭代具有单个已知条目的字典)

2) 如何在 Python 中调用内部函数以将 kwargs 作为 kwargs 传递,而不是作为单个条目传递?

使用拆包将之前的kwargs进一步向下传递。 不要为其引入新的关键字参数:

request = self.__build_getmap_request(
            ...
            exceptions=exceptions,
            **kwargs)

所有这些关键字参数kwargs压缩的kwargs都将在下一级kwargs捕获。

更重要的是,可以使用简单的dict.update而不是循环来更新请求字典:

request.update(kwargs)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM