在Python中将键值对作为函数参数传递

时间:2015-11-15 18:10:44

标签: python python-2.7 arguments flickr

我正在使用Python Flickr API并且在定义函数时遇到问题(我是Python的新手)。

我需要将以下api功能包装到一个函数中:

photos = flickr.photos_search(
    tags="foo",
    is_commons="True")

这将从Flickr的Commons系列中返回标签“foo”的照片搜索。

现在我想在每次搜索时替换标签,所以我将它包装在一个函数中:

def search_photos(fl_tags):
    photos = flickr.photos_search(
        tags=fl_tags,
        is_commons="True")

search_photos("foo")

这有效,但is_commons标志,我需要偶尔替换(不仅是值,而且还有键,因为Flickr的API中似乎有一个错误,它总是在Commons集合中搜索,无论哪个你设置标志的价值。)

在这种情况下,我想用键值组合license="9"替换它。

我不知道如何将它放入函数参数中。如果我提供fl_license参数,并在调用函数时将其设置为license="9",那么这不起作用(正如我预期的那样)。

def search_photos(fl_tags, fl_license):
    photos = flickr.photos_search(
        tags=fl_tags,
        fl_license)

search_photos("foo", license="9")    # --> SyntaxError: non-keyword arg after keyword arg

有没有办法让它发挥作用。如何通过函数参数获取键值对?

谢谢!

2 个答案:

答案 0 :(得分:2)

我相信你正在寻找“关键词论证”。这个StackOverflow帖子(Python normal arguments vs. keyword arguments)真的帮助我理解了这个概念,因为我也很新。

基本上,函数从调用中接收的任何参数都将被分配到一个dict中,函数参数的名称用“**”指定。

答案 1 :(得分:2)

您可以尝试这样的事情:

def search_photos(fl_tags, license_val=''):
    if not license_val:
        photos = flickr.photos_search(
            tags=fl_tags,
            is_commons="True")
    else:
        photos = flickr.photos_search(
            tags=fl_tags,
            license=license_val)
    return photos

search_photos("foo") # gives you the same output as before
search_photos("foo", "9") # gives you the search with license as 9

如果没有给出参数,variable = ''默认将该参数设置为空字符串(空字符串计算为false,所以如果你没有传入第二个arg,该函数将默认为公共搜索)。否则,它会将第二个参数作为license_val=参数放置。