如何进一步传递kwargs?
How to pass kwargs further?
我在 OWSLib
中有一个外部函数 wms130.getfeatureinfo
,它使用 kwargs:
def getfeatureinfo(self, layers=None,
...
method='Get',
timeout=None,
**kwargs
):
并且我在内部函数中使用了 kwargs wms130.__build_getmap_request
:
...
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)
即outer kwargs 被包装到名称为 kwargs
.
的单个关键字参数中
问题是双重的:
1) 它有多大可能是 OWSLib 中的错误,目的是扩展 kwargs? (我会说它是 99%,因为不需要添加循环来迭代具有单个已知条目的字典)
2) 如何在 Python 中调用内部函数以将 kwargs 作为 kwargs 传递,而不是作为单个条目传递?
使用解包将之前的kwargs
进一步向下传递。不要为其引入新的关键字参数:
request = self.__build_getmap_request(
...
exceptions=exceptions,
**kwargs)
所有这些关键字参数和解压缩的 kwargs
将在下一级别 kwargs
中捕获。
更重要的是,可以使用简单的dict.update
而不是循环来更新请求字典:
request.update(kwargs)
我在 OWSLib
中有一个外部函数 wms130.getfeatureinfo
,它使用 kwargs:
def getfeatureinfo(self, layers=None,
...
method='Get',
timeout=None,
**kwargs
):
并且我在内部函数中使用了 kwargs wms130.__build_getmap_request
:
...
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)
即outer kwargs 被包装到名称为 kwargs
.
问题是双重的:
1) 它有多大可能是 OWSLib 中的错误,目的是扩展 kwargs? (我会说它是 99%,因为不需要添加循环来迭代具有单个已知条目的字典)
2) 如何在 Python 中调用内部函数以将 kwargs 作为 kwargs 传递,而不是作为单个条目传递?
使用解包将之前的kwargs
进一步向下传递。不要为其引入新的关键字参数:
request = self.__build_getmap_request(
...
exceptions=exceptions,
**kwargs)
所有这些关键字参数和解压缩的 kwargs
将在下一级别 kwargs
中捕获。
更重要的是,可以使用简单的dict.update
而不是循环来更新请求字典:
request.update(kwargs)