Python 在函数调用中初始化字典的好处

Python 在函数调用中初始化字典的好处,python,dictionary,Python,Dictionary,我在谷歌地图API网站上看到了以下代码: import simplejson, urllib GEOCODE_BASE_URL = 'http://maps.googleapis.com/maps/api/geocode/json' def geocode(address,sensor, **geo_args): geo_args.update({ 'address': address, 'sensor': sensor }) ur

我在谷歌地图API网站上看到了以下代码:

import simplejson, urllib
GEOCODE_BASE_URL = 'http://maps.googleapis.com/maps/api/geocode/json'

def geocode(address,sensor, **geo_args):
    geo_args.update({
        'address': address,
        'sensor': sensor  
    })

    url = GEOCODE_BASE_URL + '?' + urllib.urlencode(geo_args)
    result = simplejson.load(urllib.urlopen(url))

    print simplejson.dumps([s['formatted_address'] for s in result['results']], indent=2)

if __name__ == '__main__':
    geocode(address="San+Francisco",sensor="false")

我注意到,在geocode函数中,当我们实际应用该函数时,我们调用该函数时不使用geo_args字典,而是使用它初始化我们在下一行中更新的字典。与在函数本身中初始化字典相比,使用它有什么好处?它使代码不太清晰,因此我认为这样做是有原因的。

geo_args
。文字词典

{
    'address': address,
    'sensor': sensor  
}
更新
geo_args
,而不是相反


在我看来,这样做的原因是
地址
传感器
是必需的参数。此结构允许函数强制执行该需求,并允许按位置传递这些需求。
.update()
用于将所有参数合并为一个参数,以便将它们提供给
urllib.urlencode

不清楚?这是**kwargs(关键字参数字典)的正常行为。 因此,当您看到带有
**
的内容时,将传递一组命名参数或关键字参数


看看其他答案。我可能误解了你的问题。我同意其他答案:地址和传感器是必需的。

为什么不在地理编码定义中启动字典,即geo_args={}?@Andrew:这不是问题中的代码吗?我不知道你想告诉我什么。也许你只是被搞糊涂了?不,不是被夸尔格搞糊涂了。我的意思是为什么第一次使用def geocode(地址,传感器,**geo_args):而不是def geocode(地址,传感器):geo_args={}line@Andrew:因为那将是一个完全不同的功能。例如,您无法执行地理编码(someaddres、somesensor、somethingelse=“foobar”)。听起来你肯定对kwargs感到困惑。看看函数的使用示例,它们没有使用额外的参数。那么,这样做的唯一好处是提供添加这些参数的选项吗?这只是将两个非关键字参数与传递给
urllib.urlencode()
geo_args
中已有的参数组合起来的一种方法。可以用其他的方法来做——怎么做对我来说似乎不太重要。