【问题标题】:Python: Outputting data from a function called in a functionPython:从函数中调用的函数输出数据
【发布时间】:2013-11-10 04:31:02
【问题描述】:

我有一个从这样的函数中调用的函数:

def counter(number):
  number = number + 1
  return number

def iterator(iteration, function):
  for i in range(iteration):
    mfunction = function
    output = mfunction()
  return output

我想这样称呼它:

number = 0
number = iterator(5, partial(counter, number))
print number

这返回 1,而它应该返回 5,因为 count 函数应该被调用了 5 次。
我意识到不知何故数据输出不正确,但我不知道如何从 for 循环中返回。

这个问题可能看起来多余,因为我可以很容易地做这样的事情:

for i in range(5):
  number = counter(number)

但是后一个例子违背了这个程序的目的。

我认为问题在于我需要在计数器函数中创建一个参数来解释迭代器函数。但我实际程序中的问题是我必须修改许多函数才能做到这一点,我正在努力避免这种情况。

我对在函数内部调用函数不太熟悉,如果有任何帮助,将不胜感激,

【问题讨论】:

  • number = number + 1 in counter 函数只更改参数number,而不更改函数外的number
  • partial(counter, number) 等价于partial(counter, 0)。所以代码调用了counter(0) 5 次。
  • 是的,我只是不知道怎么把那个号码弄出来
  • 它打印为 1,因此该数字受到影响。它只是不会在 for 循环中重复。
  • number = iterator(..)影响。 (迭代器函数返回=所有5次迭代完成后。不是在单独调用counter之后)

标签: python function output


【解决方案1】:

partial(counter, number) 等价于partial(counter, 0)。所以代码调用了counter(0) 5 次。

def counter(number):
    number = number + 1
    return number

def iterator(iteration, function, arg):
    for i in range(iteration):
        arg = function(arg)
    return arg

number = 0
number = iterator(5, counter, number)
print number # => 5

def counter(number, delta):
    number = number + delta
    return number

def iterator(iteration, function, *args):
    args = list(args)
    for i in range(iteration):
        ret = function(*args)
        args[0] = ret
    return ret

number = 0
number = iterator(5, counter, number, 5)
print number # => 25

【讨论】:

  • 这可行,但参数的数量是可变的,这就是我使用部分的原因。
  • @NickSimas,参数的数量和返回值的项目数量总是相等吗?
  • 返回值始终为 1。论据各不相同。
  • @NickSimas,您可以使用Arbitrary Argument Lists。或者你可以传递一个元组或一个列表并使用Unpacking Argument list
  • @NickSimas,但这没有意义。 counter接收自己的返回值作为参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
相关资源
最近更新 更多