从文档中,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()在包装函数中不起作用?
编辑从*c到c使输出相同,但这有点让我感到困惑,因为我认为*c解压缩了args,但是当我打印c时,它给出ms ('a b c d‘),与'a b c d’的字符串相比,从某种意义上说,它是将它们组合成一个元组实体,而元组实体是反包装的?
或者..。它不解压缩字符串,而只是列表?
发布于 2013-07-15 20:13:43
在您的函数中,c是一个元素的元组,因为它是splat (*),因此从不使用分隔符。在主程序中,您将调用一个字符串的联接,该字符串被拆分为其字符。那么你得到的分隔符的位置和字符的个数一样多(减一个)。
发布于 2013-07-15 20:15:01
join需要一个数组,而不是字符串,所以如果您试图将参数作为单独的项使用,则需要使用c = c.spilt(' ')并去掉def wrap中的*。
令我惊讶的是,sep.join(str)将str视为一个字符数组,因此在字母和空格之间增加了-s。
发布于 2013-07-15 20:13:40
这是:
>>> 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):,应该可以。
https://stackoverflow.com/questions/17662852
复制相似问题