【问题标题】:how to convert print output into variable/string with "more than 3 arguments"? (python 3)如何将打印输出转换为具有“超过 3 个参数”的变量/字符串? (蟒蛇3)
【发布时间】:2017-01-06 05:31:36
【问题描述】:

基本上,我正在尝试为我的代码获取打印输出并将其转换为变量。我试图通过将其转换为字符串来做到这一点,但它给了我一个错误,说“TypeError:str() 最多接受 3 个参数(给定 6 个)”

我的代码:

x = [1,2,3,4,5]
print(*x, sep='_')  ##gives me the output "1_2_3_4_5"

#problem part:
a = str(*x, sep='_')
print(a)             ##gives error

有没有办法将输出转换为字符串,尽管有“6 参数”或其他类似“str()”的东西会起作用?

【问题讨论】:

  • '_'.join(str(x) for x in [1, 2, 3, 4, 5])

标签: python string python-3.x printing arguments


【解决方案1】:

*xstr() 提供了太多参数导致错误,而sep 不是str() 的参数。 str() 期望转换一个对象,*x 给出 5。试试这个:

x = [1, 2, 3, 4, 5]
a = '_'.join(str(i) for i in x)
print(a) 

这将遍历列表并将每个元素用下划线连接在一起。

Try it on IDEOne


您也可以使用map(function, sequence) 来缩短join()。正在应用的函数是str(),用于将数字转换为字符串形式,并转换为x 列表。这是map()

x = [1, 2, 3, 4, 5]
a = '_'.join(map(str, x))
print(a)

【讨论】:

  • ''.join(str(i) for i in x) 和 ''.join(map(str, x)) (另一个建议)何时可以/应该使用它?
  • @zeurosis 没有区别。 Map 接收一个要执行的函数(在这种情况下为str()),然后将其应用于序列的所有元素,在这种情况下为x。这只是我所做工作的简写——同样的事情在幕后完成。
【解决方案2】:

您可以使用map 将整数列表转换为字符串列表,然后使用join 将它们绑定在一起:

x = [1, 2, 3, 4, 5]
a = '_'.join(map(str, x))
print(a)  # '1_2_3_4_5'

注意:您的代码不起作用,因为 print 为您做了一些工作:

所有非关键字参数都像 str() 一样转换为字符串并写入流。

所以,print 为您完成了字符串转换步骤。当您调用str() 时,它只希望将一个对象转换为字符串,并带有两个可选的关键字参数(encodingerrors)。通过调用 str(*x, sep='_'),您传入了 5 个参数和一个分隔符,这不是一个有效的调用。

【讨论】:

    猜你喜欢
    • 2021-07-13
    • 2018-03-03
    • 2015-11-18
    • 1970-01-01
    • 2020-08-08
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多