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

2024-04-25 19:07:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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")

这是可行的,I s_commons标志但是,我需要偶尔完全替换(不仅是值,而且是键,因为Flickr的API中似乎有一个bug,它总是在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

有什么办法可以让它工作吗。如何通过函数参数获取键值对?

谢谢!


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

我相信你在找“关键字参数”。这个StackOverflow post(Python normal arguments vs. keyword arguments)确实帮助我理解了这个概念,因为我也是一个新手。

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

相关问题 更多 >