3

我正在尝试编写一个函数,将函数应用于列表。我正在尝试将列表中的所有单词大写,但无法正常工作。这是我到目前为止所做的:

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()
4

6 回答 6

4

虽然其他答案很好,但我想提一下,python 中已经有一个名为map()的函数,它几乎完全符合您的需要:

将函数应用于可迭代的每个项目并返回结果列表.....可迭代参数可以是序列或任何可迭代对象;结果始终是一个列表。

所以你的代码变成了

print map(str.upper, lst)

或者,如果您需要一个元组,那么:

print tuple(map(str.upper, lst))

这里不需要匿名 lambda 函数,因为str.upper()接受一个参数。我认为关于这种函数式编程的 Pythonic 程度存在争议,但我个人有时喜欢它。

于 2013-10-25T17:17:19.007 回答
4

那不是错误。它是函数在内存中的地址。您看到它是因为您没有调用该函数。

总的来说,您的代码存在三个问题:

  1. 您没有调用该函数。在它之后添加(...)将执行此操作。
  2. 您没有将参数传递给它需要的函数。
  3. 元组上没有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

https://wiki.python.org/moin/Generators

http://docs.python.org/2.7/library/stdtypes.html#str.upper

于 2013-10-25T17:03:21.360 回答
3

实际上,列表也没有,元组也没有方法.upper()。因此,要实现这一点,您只需执行以下语句:

print tuple(x.upper() for x in ("hello", "this", "is", "a", "test"))

http://codepad.org/MZ14yXeV

或者这个:

print map(lambda x: x.upper(), ("hello", "this", "is", "a", "test"))

http://codepad.org/kc1LaNCY

于 2013-10-25T17:07:13.250 回答
1
list = ("hello", "this", "is", "a", "test")

是一个元组,一个不可变的,你不能改变它,使用,

print tuple((ele.upper() for ele in list))
于 2013-10-25T17:09:52.357 回答
1

我认为这是最pythonic的一个:

def cap(tup):
    return map(str.upper, tup)

>>> tup = ("hello", "this", "is", "a", "test")
>>> cap(tup)
['HELLO', 'THIS', 'IS', 'A', 'TEST']
>>>
于 2013-10-25T17:25:03.793 回答
0

您正在尝试做的事情涉及列表推导

print [firstFunction(x) for x in list]

它的作用是:构造一个列表,其元素是将函数应用于输入列表中的每个项目然后打印它的结果。

一些(希望有帮助)评论

  • 命名变量是不好的做法list;尽管它不是关键字,但它是基本 python 类型的名称,因此重新绑定它可能会在其他地方引起混淆。
  • 在您的定义中def firstFunction(list)——出现在参数列表中的名称与前面在您的示例中定义list的变量没有任何关系。list您可能想查看这个问题或 python 文档以了解范围规则在 python 中的工作方式。
于 2013-10-25T17:08:52.320 回答