Python中的字符串类型基本知识学习教程
如果对自然语言分类,有很多中分法,比如英语、法语、汉语等,这种分法是最常见的。在语言学里面,也有对语言的分类方法,比如什么什么语系之类的。我这里提出一种分法,这种分法尚未得到广大人民群众和研究者的广泛认同,但是,我相信那句“真理是掌握在少数人的手里”,至少在这里可以用来给自己壮壮胆。 我的分法:一种是语言中的两个元素(比如两个字)拼接在一起,出来一个新的元素(比如新的字);另外一种是两个元素拼接在一起,只是得到这两个元素的并列显示。比如“好”和“人”,两个元素拼接在一起是“好人”,而 3 和 5 拼接(就是整数求和)在一起是 8,如果你认为是 35,那就属于第二类了。 把我的这种分法抽象一下: 一种是:△ + □ = ○ 太天才了。请鼓掌。 字符串 字符串(String),是由零个或多个字符组成的有限串行。一般记为 s=a[1]a[2]...a[n]。 根据这个定义,在前面两次让一个程序员感到伟大的"Hello,World",就是一个字符串。或者说不管用英文还是中文还是别的某种文,写出来的文字都可以做为字符串对待,当然,里面的特殊符号,也是可以做为字符串的,比如空格等。 严格地说,在 Python 中的字符串是一种对象类型,这种类型用 str 表示,通常单引号''或者双引号""包裹起来。 字符串和前面讲过的数字一样,都是对象的类型,或者说都是值。当然,表示方式还是有区别的。 "I love Python." 'I love Python.' 'I LOVE PYTHON.' 'I LOVE PYTHON.' 从这两个例子中可以看出来,不论使用单引号还是双引号,结果都是一样的。 >>> 250 250 >>> type(250) <type 'int'> >>> "250" '250' >>> type("250") <type 'str'> 仔细观察上面的区别,同样是 250,一个没有放在引号里面,一个放在了引号里面,用 type()函数来检验一下,发现它们居然是两种不同的对象类型,前者是 int 类型,后者则是 str 类型,即字符串类型。所以,请大家务必注意,不是所有数字都是 int(or float),必须要看看,它在什么地方,如果在引号里面,就是字符串了。如果搞不清楚是什么类型,就让 type()来帮忙搞定。 操练一下字符串吧。 >>> print "good good study,day day up" good good study,day day up >>> print "----good---study---day----up" ----good---study---day----up 在 print 后面,打印的都是字符串。注意,是双引号里面的,引号不是字符串的组成部分。它是在告诉计算机,它里面包裹着的是一个字符串。 爱思考的看官肯定发现上面这句话有问题了。如果我要把下面这句话看做一个字符串,应该怎么做? What's your name? >>> 'What's your name?' File "<stdin>",line 1 'What's your name?' ^ SyntaxError: invalid syntax 出现了 SyntaxError(语法错误)引导的提示,这是在告诉我们这里存在错误,错误的类型就是 SyntaxError,后面是对这种错误的解释“invalid syntax”(无效的语法)。特别注意,错误提示的上面,有一个 ^ 符号,直接只着一个单引号,不用多说,你也能猜测出,大概在告诉我们,可能是这里出现错误了。 在 python 中,这一点是非常友好的,如果语句存在错误,就会将错误输出来,供程序员改正参考。当然,错误来源有时候比较复杂,需要根据经验和知识进行修改。还有一种修改错误的好办法,就是讲错误提示放到 google 中搜索。 解决方法一:双引号包裹单引号 >>> "What's your name?" "What's your name?" 用双引号来包裹,双引号里面允许出现单引号。其实,反过来,单引号里面也可以包裹双引号。这个可以笼统地成为二者的嵌套。 解决方法二:使用转义符 所谓转义,就是让某个符号不在表示某个含义,而是表示另外一个含义。转义符的作用就是它能够转变符号的含义。在 Python 中,用 作为转义符(其实很多语言,只要有转义符的,都是用这个符号)。 >>> 'What's your name?' "What's your name?" 是不是看到转义符 的作用了。 本来单引号表示包括字符串,它不是字符串一部分,但是如果前面有转义符,那么它就失去了原来的含义,转化为字符串的一部分,相当于一个特殊字符了。 变量和字符串 >>> a = 5 >>> a 5 其本质含义是变量 a 相当于一个标签,贴在了对象 5 上面。并且我们把这个语句叫做赋值语句。 同样,在对字符串类型的对象,也是这样,能够通过赋值语句,将对象与某个标签(变量)关联起来。 >>> b = "hello,world" >>> b 'hello,world' >>> print b hello,world 还记得我们曾经用过一个 type 命令吗?现在它还有用,就是检验一个变量,到底跟什么类型联系着,是字符串还是数字? >>> type(a) <type 'int'> >>> type(b) <type 'str'> 有时候,你会听到一种说法:把a称之为数字型变量,把 b 叫做字符(串)型变量。这种说法,在某些语言中是成立的。某些语言,需要提前声明变量,然后变量就成为了一个筐,将值装到这个筐里面。但是,Python 不是这样的。要注意区别。 拼接字符串 对数字,如果拼接,就是对两个数字求和。如:3+5,就计算出为 8。那么对字符串都能进行什么样的操作呢?试试吧: >>> "Py" + "thon" 'Python' 跟我那个不为大多数人认可的发现是一样的,你还不认可吗?两个字符串相加,就相当于把两个字符串连接起来。(别的运算就别尝试了,没什么意义,肯定报错,不信就试试) >>> "Py" - "thon" # 这么做的人,是脑袋进水泥了吧? Traceback (most recent call last): File "<stdin>",line 1,in <module> TypeError: unsupported operand type(s) for -: 'str' and 'str' 用 + 号实现连接,的确比较简单,不过,有时候你会遇到这样的问题: >>> a = 1989 >>> b = "free" >>> print b+a Traceback (most recent call last): File "<stdin>",in <module> TypeError: cannot concatenate 'str' and 'int' objects 这里引入了一个指令:print,意思就是打印后面的字符串(或者指向字符串的变量),上面是 Python2 中的使用方式,在 Python3 中,它变成了一个函数。应该用 print(b+a)的样式了。 原来,用 + 拼接起来的两个对象,必须是同一种类型的。如果两个都是数字,毫无疑问是正确的,就是求和;如果都是字符串,那么就得到一个新的字符串。 修改上面的错误,可以通过以下方法: >>> print b + `a` free1989 注意, 是反引号,不是单引号,就是键盘中通常在数字1左边的那个,在英文半角状态下输入的符号。这种方法,在编程实践中比较少应用,特别是在 Python3 中,已经把这种方式弃绝了。我想原因就是这个符号太容易和单引号混淆了。在编程中,也不容易看出来,可读性太差。 常言道:“困难只有一个,解决困难的方法不止一种”,既然反引号可读性不好,在编程实践中就尽量不要使用。于是乎就有了下面的方法,这是被广泛采用的。不但简单,更主要是直白,一看就懂什么意思了。 >>> print b + str(a) free1989 用 str(a)实现将整数对象转换为字符串对象。虽然 str 是一种对象类型,但是它也能够实现对象类型的转换,这就起到了一个函数的作用。其实前面已经讲过的 int 也有类似的作用。比如: >>> a = "250" >>> type(a) <type 'str'> >>> b = int(a) >>> b 250 >>> type(b) <type 'int'> 提醒列位,如果你对 int 和 str 比较好奇,可以在交互模式中,使用 help(int),help(str)查阅相关的更多资料。 >>> print b + repr(a) #repr(a)与上面的类似 free1989 这里 repr()是一个函数,其实就是反引号的替代品,它能够把结果字符串转化为合法的 python 表达式。 可能看官看到这个,就要问它们三者之间的区别了。首先明确,repr()和 是一致的,就不用区别了。接下来需要区别的就是 repr()和 str,一个最简单的区别,repr 是函数,str 是跟 int 一样,一种对象类型。 Python 转义字符
|