2015-11-15 4 views
0

Я работаю с API-интерфейсом Python Flickr и имею проблему, определяющую функцию (я как бы новый для Python).Передача пар ключ-значение в качестве параметров функции в Python

мне нужно обернуть следующую функциональность апи в функцию:

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

Это возвращает поиск фотографий по тегу «Foo» из коллекции Commons Flickr в.

Теперь я хочу заменить тег каждый раз, когда я ищу, так что я оберните его в функцию:

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

search_photos("foo") 

Это работает, флаг is_commons однако, мне нужно иногда заменять вообще (не только значение , но также и ключ, поскольку, как представляется, в API Flickr появляется ошибка, что он всегда ищет в коллекции 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

Итак, в основном передайте 'license =" 9 "' в функцию 'flickr.photos_search'? Можете ли вы передать «dict» там? – Zizouz212

+0

@ Zizouz212 Да, точно. Передача словаря на flickr.photos.search не сработала, но вместо этого верните ошибку типа. Фотографии = flickr.photos_search (fl_dict) ТипError: __call __() принимает ровно 1 аргумент (2 данный) – mdomino

ответ

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 = '' наборы этот параметр в пустую строку по умолчанию, если аргумент не задан (пустые строки оценивают ложь, так что если вы не сдадите в второй arg, функция будет по умолчанию для обыска). В противном случае он поместит любой второй аргумент в качестве параметра license_val=.

+0

Спасибо, это трюк! Ницца! – mdomino

0

Я считаю, что вы ищете «Аргументы ключевых слов». Этот пост StackOverflow (Python normal arguments vs. keyword arguments) действительно помог мне понять концепцию, так как я тоже совершенно новый.

По существу, любые параметры, полученные функцией от вызова, будут назначены в dict с именем аргумента функции, обозначенного «**».

+0

Спасибо, хотя на вопросы уже ответил, я рассмотрю это, так как я не знаком с несколькими типами аргументы. – mdomino