Вернуть функцию с параметрами - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь создать функцию, которая возвращает себя с параметрами.

Def a (x,y):
   *code*
   Return a(x,y)

возвращает ошибку при попытке ее запустить.

>>> a(1,2)
RecursionError: maximum recursion depth exceeded

То, что я хочу, это

>>> a(1,2)
a(1,2)

Есть ли способ вернуть функцию с параметрами?

Я знаю, что это можно сделать, но я не знаю, как это сделать

>>> datetime.time(0,0)
Datetime.time(0,0)

Изменить: Желательно, чтобы я не хотел импортировать какие-либо модули

Ответы [ 4 ]

1 голос
/ 27 сентября 2019

Похоже, у вас нет действительного возврата.Ошибка означает, что он вызывает себя так часто, что Python просто сдается.Пример (хороший) закончится через '' num '' раз:

def a(x, num):
  if num == 0:
    return x
  return a(x + 1, num - 1)

Пример (плохой) никогда больше не вернет ничего как сам:

def a(x, num):
  if num == 0:
    return x
  return a(x + 1, num)
0 голосов
/ 27 сентября 2019

Может быть, используя вложенную функцию или лямбду?

$ python -q
>>> def a(x,y):
...     def _a():
...             return x + y
...     return _a
... 
>>> a(1,2)
<function a.<locals>._a at 0x7f048329e560>
>>> a(1,2)()
3
0 голосов
/ 27 сентября 2019

Я думаю, вы неправильно поняли, что "возвращается", когда вызываете следующую строку:

>>> datetime.time(0,0)
Datetime.time(0,0)

Исходный вызов datetime.time(0,0) создает datatime -объект для консоли.Поскольку вы не сохраняете возвращенный объект, консоль автоматически вызывает class-method с именем __repr__.

. Чтобы повторить поведение, мы можем создать следующее class:

>>> class a:
...   def __init__(self, x,y):
...     self.x = x
...     self.y = y
...   def __repr__(self):
...     return "a({},{})".format(self.x, self.y)
...
>>> a(1,2)
a(1,2)
0 голосов
/ 27 сентября 2019

Предполагая, что вы хотите, чтобы он возвращал строковое представление функции как вызванной:

def a (x,y):
   *code*
   return f"a({x},{y})"

В качестве альтернативы, если вы не можете использовать f-строки:

def a (x,y):
   *code*
   return "a({x},{y})".format(x=x, y=y)
...