#python
#python
Вопрос:
Исходя из R
, мне было интересно, есть ли в Python эквивалент R
s ...
?
В R
тройная точка может быть весьма полезна в функциях, поскольку она позволяет передавать аргументы любого типа (именованные, безымянные, любого типа, любого класса и т.д.). Например
fun <- function (...) return(list(...))
fun(a=1, b=2, weather=c("sunny", "warm"))
# returns
# $a
# [1] 1
# $b
# [1] 2
# $weather
# [1] "sunny" "warm"
Есть ли аналогичный в Python?
Я хотел бы иметь аналогичную функцию
def fun(...): return (...)
# such that
fun(a=1, b=2)
# returns
# {'a':1, 'b':2}
# or something similar
Комментарии:
1. извлеките
*args
и**kwargs
и посмотрите, отвечает ли это на ваш вопрос.2.
def fun(**kwargs):
с теломreturn kwargs
будет делать именно то, что делает этот пример.3. Вы хотите, чтобы конечный продукт был словарем, как вы показали?
4. Ах, спасибо, ребята, я отчаянно пытался заставить это работать с
*args
,**kwargs
отвечает на мой вопрос. @bartcubrich Не обязательно, я просто хотел способ доступа как к именам, так и к значениям безымянных необязательных аргументов.
Ответ №1:
Это способ получить любое количество аргументов:
def function(*arguments):
print("received {} arguments".format(len(arguments)))
Тогда вы можете назвать это, например, таким образом:
>>> function(5,5,6)
received 3 arguments
arguments
Переменная — это кортеж, содержащий все аргументы.
С другой стороны, если вам нужны именованные аргументы, вы можете сделать это:
def function(**keyword_arguments):
print("received {} arguments".format(len(keyword_arguments)))
Тогда вы можете вызвать это, например, таким образом:
>>> function(a=4, b=7)
received 2 arguments
keyword_arguments
Переменная содержит словарь переданных аргументов.
Смотрите также документацию Python по аргументам ключевых слов.