我正在尝试编写一个将函数应用于列表的函数。我试图将列表中的所有单词大写,但无法使其工作。这是我到目前为止所做的:
list = ("hello", "this", "is", "a", "test")
def firstFunction(x):
return list.upper()
print firstFunction
我得到的错误是:
<function firstFunction at 0x0000000002352A58>
我真的不知道接下来要做什么,任何帮助都会非常感激。
编辑: 我刚刚更改了它,但它仍然无效:
mylist = ("hello", "this", "is", "james")
def firstFunction(x):
return may(lambda: x.upper(), mylist)
print firstFunction()
答案 0 :(得分:4)
这不是错误。它是内存中函数的地址。你看到它是因为你没有调用该函数。
总的来说,您的代码存在三个问题:
(...)
将执行此操作。upper
方法(在这种情况下,list
是一个元组)。以下是执行我认为您想要的代码的固定版本:
# Don't name a variable 'list' -- it overshadows the built-in.
lst = ("hello", "this", "is", "a", "test")
def firstFunction(x):
return tuple(y.upper() for y in x)
print firstFunction(lst)
输出:
('HELLO', 'THIS', 'IS', 'A', 'TEST')
以下是对此处所做的一切的一些参考:
http://docs.python.org/2/reference/compound_stmts.html#function-definitions
答案 1 :(得分:4)
虽然其他答案很棒,但我想提一下,python中已经有一个名为map()的函数,它几乎完全符合您的需求:
将函数应用于iterable的每个项目并返回一个列表 结果.....可迭代 参数可以是序列或任何可迭代对象;结果是 总是一个清单。
所以你的代码变成了
print map(str.upper, lst)
或者,如果你需要一个元组,那么:
print tuple(map(str.upper, lst))
这里不需要匿名lambda函数,因为str.upper()接受一个参数。我认为这个函数式编程是如何pythonic的争论,但我个人有时喜欢它。
答案 2 :(得分:3)
实际上也没有列表,元组也没有方法.upper()
。
因此,要实现这一点,您只需执行以下语句:
print tuple(x.upper() for x in ("hello", "this", "is", "a", "test"))
或者这个:
print map(lambda x: x.upper(), ("hello", "this", "is", "a", "test"))
答案 3 :(得分:1)
list = ("hello", "this", "is", "a", "test")
是一个元组,一个不可变的,你不能改变它,使用,
print tuple((ele.upper() for ele in list))
答案 4 :(得分:1)
我认为这是最蟒蛇的:
def cap(tup):
return map(str.upper, tup)
>>> tup = ("hello", "this", "is", "a", "test")
>>> cap(tup)
['HELLO', 'THIS', 'IS', 'A', 'TEST']
>>>
答案 5 :(得分:0)
您要做的是list comprehensions:
print [firstFunction(x) for x in list]
这样做:构造列表,其元素是应用函数的结果 输入列表中的每个项目然后打印它。
一些(希望有用的)评论
list
是不好的做法;即使它不是关键字,
它是基本python类型的名称,因此重新绑定它可能会导致混淆
别处。def firstFunction(list)
中出现的名称list
参数列表与前面示例中定义的list
变量没有任何关系。您可能需要查看this question或python文档以了解作用域规则在python中的工作方式。