我正在使用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
有没有办法让它发挥作用。如何通过函数参数获取键值对?
谢谢!
答案 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=
参数放置。