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

时间:2013-01-02 02:29:13

标签: python dictionary

我在Google Map 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")

我注意到在地理编码函数中,当我们实际应用函数时,我们在调用函数时不使用geo_args字典,而是使用它来初始化我们在下一行中更新的字典。使用它有什么好处,而不是在函数本身内初始化字典?它使代码不那么清晰,所以我认为有理由这样做。

2 个答案:

答案 0 :(得分:0)

使用

geo_args。文字字典

{
    'address': address,
    'sensor': sensor  
}

更新geo_args,而不是相反。

这就是我认为addresssensor是必需参数的原因。此结构允许函数强制执行该要求,并允许它们在位置上传递。 .update()只是将所有参数合并为一个,因此可以将它们提供给urllib.urlencode

答案 1 :(得分:0)

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

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