Безымянные аргументы в функциях: эквивалент тройной точки R

#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 по аргументам ключевых слов.