python - 当我将函数应用于列表列表的元素时,为什么会出现“TypeError:'str' object is not callable”错误?
问题描述
我想应用这个功能
def run():
user_input = input("type in: ")
return user_input
到此列表列表的每个元素liste = [[1],[2],[3],[4],[5]]
。
每个元素(从第一个元素开始)都应替换为用户提供的 input user_input
。
(注意,我想更改现有列表liste
;我不想创建新列表。)
所以我尝试在列表理解中run
应用我的函数map
liste = [x for x in map(run(),liste)]
但是该语句导致错误
TypeError: 'str' object is not callable
我在这里做错了什么?
解决方案
map
默认情况下接收一个参数函数(您的run
函数不接收任何参数)。所以将map
函数更改为:
liste = [x for x in map(lambda x: run(),liste)]
或者,更改您的run
函数以接收一个参数:
def run(x):
user_input = input("type in: ")
return user_input
liste = [[1], [2], [3], [4], [5]]
print([x for x in map(run, liste)])
请记住,map
接收函数,而不是像你所做的函数调用。您得到的原因TypeError: 'str' object is not callable
是因为您将字符串值传递给映射(run
调用返回字符串值)而不是函数(callable
)
推荐阅读
- c++ - VS:在 build/exe 中包含资源文件
- c++ - boost::asio::io_service 在线程中,在应用程序退出时不退出
- yammer - Yammer 导出 API 令牌已过期
- gradle - 如何有效地填充 Gradle Kotlin DSL 中的额外属性?
- bash - Bash 脚本 - 列出 hadoop 文件
- javascript - 如何以随机顺序显示缩略图?
- android - Android 4.1 崩溃 - XML(矢量图像)
- python - TypeError: 0 不是字符串
- asp.net - 如何使用另一个表中的列来引用两个表 - 实体框架
- php - 制作一个按数字排序的下拉列表