Например, из https://docs.python-requests.org/en/latest/api/#requests.cookies.RequestsCookieJar.set:
set(name, value, **kwargs)
Dict-like set() that also supports optional domain and path
args in order to resolve naming collisions from using one cookie jar over multiple domains.
Где я могу найти информацию о том, какие еще аргументы функция принимает в качестве **kwargs?
Я имею в виду эти аргументы, domain, path, expires, max_age, secure, httponly. Там это не задокументировано!
Все остальные функции такие, я запутался, что передавать в качестве параметров.
В php.net они правильно описывают все параметры.
Где я могу найти все параметры, которые скрыты за **kwargs?
Php.net описывает параметры функций, которые являются частью языка PHP и его стандартных библиотек.
Библиотека, о которой вы спрашиваете, requests, является сторонней библиотекой и не является частью языка Python или его стандартных библиотек. Вы обнаружите, что стандартные библиотеки, такие как urllib, на самом деле очень хорошо документированы, например urllib.request здесь: https://docs.python.org/3/library/urllib.request.html#module-urllib.request
Однако некоторые сторонние библиотеки гораздо более удобны для пользователя, и requests является популярным примером этого. Однако документация зависит от разработчиков, поэтому вам следует попытаться связаться с ними по этому поводу. Не вините язык, если только вы не хотите винить его в том, что он не имеет достаточно хороших стандартных библиотек (и тогда есть некоторые причины).
Как указано в комментариях к вашему вопросу, исходный код для requests находится в свободном доступе, поэтому вы можете узнать, какие **kwargs ожидаются и как они там используются: https://docs.python-requests.org/en/ last/_modules/requests/cookies/#RequestsCookieJar.set
Обратите внимание, что domain и path используются явно, а остальные передаются как **kwargs в create_cookie(), если в качестве значения не было передано Morsel.
Прошу прощения, я не виню python, я просто запутался и не понимаю, как получить эти параметры.
Это нормально, я не говорю, что вы - просто вы не должны, все хорошо :).
По моему опыту, чтение исходного кода многих библиотек с открытым исходным кодом решает эту проблему.
Для примера, который вы разместили, исходный код выглядит следующим образом:
def set(self, name, value, **kwargs):
"""Dict-like set() that also supports optional domain and path args in
order to resolve naming collisions from using one cookie jar over
multiple domains.
"""
# support client code that unsets cookies by assignment of a None value:
if value is None:
remove_cookie_by_name(
self, name, domain=kwargs.get("domain"), path=kwargs.get("path")
)
return
if isinstance(value, Morsel):
c = morsel_to_cookie(value)
else:
c = create_cookie(name, value, **kwargs)
self.set_cookie(c)
return c
Для python kwargs рассматриваются как словарь (это то, что делает **). В этом случае функция set использует "домен" и "путь" напрямую. Однако есть еще одна функция, которая принимает **kwargs. Это основная цель использования kwargs вместо исправления аргументов.
Если мы углубимся в исходный код create_cookie, мы увидим, какие аргументы ключевых слов допустимы.
def create_cookie(name, value, **kwargs):
"""Make a cookie from underspecified parameters.
By default, the pair of `name` and `value` will be set for the domain ''
and sent on every request (this is sometimes called a "supercookie").
"""
result = {
"version": 0,
"name": name,
"value": value,
"port": None,
"domain": "",
"path": "/",
"secure": False,
"expires": None,
"discard": True,
"comment": None,
"comment_url": None,
"rest": {"HttpOnly": None},
"rfc2109": False,
}
badargs = set(kwargs) - set(result)
if badargs:
raise TypeError(
f"create_cookie() got unexpected keyword arguments: {list(badargs)}"
)
result.update(kwargs)
result["port_specified"] = bool(result["port"])
result["domain_specified"] = bool(result["domain"])
result["domain_initial_dot"] = result["domain"].startswith(".")
result["path_specified"] = bool(result["path"])
return cookielib.Cookie(**result)
В этом случае разрешены только те ключевые слова, которые описаны в словаре результатов.
Итак, для другой функции я должен загрузить этот пакет и посмотреть исходный код?
Многие документы библиотек с открытым исходным кодом имеют кнопку [source] рядом с описанием функции.
В этом случае, я думаю, вы просто застряли, нажимая ссылку «[источник]» и отслеживая, что исходный код делает с kwargs. Иногда библиотеки имеют неадекватные документы.