python循环函数在列表

时间:2016-05-30 05:22:31

标签: python list function loops

我有一个名为add_ten的函数。我想在列表上循环这个函数。 我想创建一个looper函数并传递listadd_ten函数作为输入循环

def add_ten(x):
    y = x+10
    print 'value of x is ' + str(x)
    print 'value of y is ' + str(y)

def looper(list,func):
    for i in list:
        return func(i)

我调用looper函数

looper([1,2],add_ten())

我收到此错误。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-6510e446c709> in <module>()
----> 1 looper([1,2],add_ten())

TypeError: add_ten() takes exactly 1 argument (0 given)

如何正确创建looper函数以便它采用正确的参数?

5 个答案:

答案 0 :(得分:1)

  

TypeError: add_ten() takes exactly 1 argument (0 given)

您收到此错误是因为您在没有参数的情况下调用函数add_ten()

  

我想创建一个looper函数并传递listadd_ten函数作为输入循环。

所以只需在looper函数中传递函数本身而不执行它,如下所示:

looper([1,2], add_ten)

然后,使用i值调用for循环中的函数:

def looper(list, func):
    for i in list:
        return func(i)   # <--- notice the parentheses instead of square brackets.

虽然,我不确定return func(i)的目的,因为它没有返回任何东西。因此,如果您只需要在add_ten函数中打印,则可以从中删除return

def looper(list, func):
    for i in list:
        func(i)

答案 1 :(得分:1)

试图理解这个问题,我得到了以下工作代码:

#! /usr/bin/env python
from __future__ import print_function


def add_ten(x):
    print('value of x is %s\nvalue of y is %s' % (str(x), str(x + 10)))


def looper(list, func):
    for i in list:
        func(i)

if __name__ == '__main__':
    looper([1, 2], add_ten)

输出在我的机器上:

value of x is 1
value of y is 11
value of x is 2
value of y is 12

希望这有助于学习Python; - )

注意在looper的实现中,您肯定不希望在第一次迭代中提前返回,因为只有第一个列表元素被处理结果。在上面我只是调用它并且打印的副作用或add_ten中定义的任何内容“发生”......

答案 2 :(得分:0)

仔细观察你得到的错误:“add_ten()只取1个参数(0给定)”。

这是因为return func[i]你应该这样做:{{1} }(注意不同的括号)。

否则,缺少对return func(i)的调用的参数。

答案 3 :(得分:0)

  1. 当它是一个参数时不要调用该函数
  2. looper([1,2], add_ten)

    1. 调用func(i)时使用括号而不是squaree括号。
    2. 否则,您的代码看起来不错。

答案 4 :(得分:0)

使用looper([1,2],add_ten())你传递函数调用的结果而不是函数本身。

固定版本如下所示:

var repeaterElements= element(by.repeater('option in options'));

repeaterElements.each(function(entry) {
    var input = entry.element(by.model("option"));
});

另请注意,add_ten函数始终返回None,并且除了打印原始值和递增值之外没有任何效果。实际返回修改后的列表的紧凑方式可能如下所示:

def add_ten(x):
    y = x+10
    print 'value of x is ' + str(x)
    print 'value of y is ' + str(y)

def looper(list,func):
    for i in list:
        return func(i)

looper([1,2],add_ten)