在 Python 中传递 key-value 对作为函数参数

Passing key-value pairs as function parameters in Python

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

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

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

这 returns 从 Flickr 的 Commons collection.

中搜索标签 "foo" 的照片

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

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

search_photos("foo")

这有效,但是 is_commons 标志,我偶尔需要完全替换(不仅是值,还有键,因为 Flickr 的 API 中似乎有一个错误,它始终在 Commons 中搜索 collection 无论您将标志设置为哪个值)。

在这种情况下,我想将其替换为 key-value 组合 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

有什么方法可以让它工作吗?如何通过函数参数获取 key-value 对?

谢谢!

我相信您正在寻找 "Keyword Arguments"。这个 Whosebug post (Python normal arguments vs. keyword arguments) 确实帮助我理解了这个概念,因为我也很新。

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

您可以尝试这样的操作:

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,因此如果您不传入第二个参数,该函数将默认为一个公共搜索)。否则,它将把第二个参数作为 license_val= 参数。