从文档中,raw_input()从输入中读取一行,将其转换为字符串(剥离尾部换行符),然后返回。
注意,
a = 'testing: '
sep = '-'
c = raw_input('give me some args: ') <--- giving 'a b c d'
def wrap( a, sep, *c):
print a + sep.join(c)
wrap(a, sep, c)
str = 'a b c d'
print sep.join(str)
他们应该打印出相同的东西,但......
print a + sep.join(c)
提供测试:a b c d
print sep.join(str)
提供 a- -b- -c- -d
为什么sep.join()
在包裹函数中不起作用?
EDIT 从* c更改为c使得输出相同但这有点让我感到困惑,因为我认为* c解包了args但是当我打印c时,它给出了ms('abc d',)与'abcd'的字符串相比所以从一个意义上讲,它是将它们组合成一个单元组实体,这与解包相反吗?
或...它不解包字符串,只列出?
答案 0 :(得分:3)
在你的函数中c
是一个元素的元组,因为splat(*),因此从不使用分隔符。
在主程序中,您在一个字符串上调用join,该字符串被拆分为字符。然后你得到尽可能多的分隔符,因为有很多字符(减一)。
答案 1 :(得分:2)
join期望数组不是字符串,因此如果您尝试将参数用作单独的项,则需要使用c = c.spilt(' ')
并删除def wrap
中的*。
令我惊讶的是sep.join(str)
将str视为字符数组,因此字母和空格之间存在额外的内容。
答案 2 :(得分:1)
这样:
>>> wrap(a, sep, str)
testing: a b c d
不同于:
>>> wrap(a, sep, *str)
testing: a- -b- -c- -d
字符串 是一个字符列表。您可以将功能签名从def wrap(a, sep, *c):
更改为def wrap(a, sep, c):
,您应该没问题。