【问题标题】:Return a function with parameters返回一个带参数的函数
【发布时间】:2023-04-04 06:33:01
【问题描述】:

我正在尝试创建一个带参数返回自身的函数。

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)

编辑: 最好我不想导入任何模块

【问题讨论】:

  • 您收到错误是因为该函数一直在调用自身,直到最大递归深度(以防止堆栈溢出)。你为什么要这样做?
  • 你的意思是return 'a({x},{y})'.format(x=x, y=y)...?
  • 你想做的是没有基本条件的递归?请检查这是否正是您想要做的。
  • 这看起来更像是类__repr__的输出
  • 正如@wjandrea 所说,您似乎在寻找来自类的__repr__,而不是函数。

标签: python python-3.x function pythonista


【解决方案1】:

您似乎没有有效的退货。该错误意味着它多次调用自身,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)

【讨论】:

  • 这在递归函数中也称为“引导条件”。
【解决方案2】:

我认为您在调用以下行时误解了“返回”的内容:

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

最初的调用datetime.time(0,0) 为控制台创建了一个datatime 对象。因为您没有保存返回的对象,所以控制台会自动调用名为 __repr__class-method

要复制行为,我们可以创建以下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)

【讨论】:

    【解决方案3】:

    假设你的意思是你希望它返回一个被调用函数的字符串表示:

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

    如果您不能使用 f-strings:

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

    【讨论】:

      【解决方案4】:

      也许使用嵌套函数或 lambda?

      $ 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        • 1970-01-01
        • 2016-03-04
        • 2015-12-12
        相关资源
        最近更新 更多