Python raw_input()

时间:2013-07-15 20:02:55

标签: python

从文档中,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'的字符串相比所以从一个意义上讲,它是将它们组合成一个单元组实体,这与解包相反吗?

或...它不解包字符串,只列出?

3 个答案:

答案 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):,您应该没问题。