python基础学习笔记二:字符串相关知识
继续第一篇的内容,讲解,python的一些基本的东西。
注释
#获得用户名:
>>> user_name = raw_input("what is your name?")
字符串
单引号版本&双引号:
str1 = 'python'
str2 = "python"
str1和str2是没有任何区别的。
str3 = 'I\'m a big fan of Python.'
可以注意到,原来的字符串中有一个',而Python又允许使用单引号' '来表示字符串,所以字符串中间的'必须用**转移字符\**才可以。
**当你用单引号' '定义字符串的时候,它就会认为你字符串里面的双引号" "是普通字符,从而不需要转义。反之当你用双引号定义字符串的时候,就会认为你字符串里面的单引号是普通字符无需转义。**
三引号:
1、实现跨行字符串
2、内部可加注释信息
跨行:
>>> str1 = """List of name:
... Hua Li
... Chao Deng
... """
>>> print(str1)
List of name:
Hua Li
Chao Deng
另一种实现跨行:给字符串加上\n实现,但最好使用三引号:
>>> str1 = "List of name:\nHua Li\nChao Deng"
>>> print(str1)
List of name:
Hua Li
Chao Deng
但是这样在输入的时候看起来就乱了很多不是么?所以这种情况下尽量使用3个引号,至于3个单引号还是双引号都是一样的,只需要注意如果字符串中包含有单引号就要使用双引号来定义就好了。
加注释
>>> str1 = """
... List of name:
... Hua Li # LiHua
... Chao Deng # DengChao
... """
>>> print(str1)
List of name:
Hua Li # LiHua
Chao Deng # DengChao
拼接字符串
下面试试加号(+)来拼接一个字符
>>> "helle,"+"world!"
'helle,world!'
>>> x="hello,"
>>> y="world!"
>>> x+y
'hello,world!'
字符串表示,str 和 repr
所有通过python打印的字符串还是被引号括起来的。这是因为python打印值的时候会保持该值在python代码中的状态,而不是你希望 用户所看到的状态:
>>> "hello,world!"
'hello,world!'
>>> 10000L
10000L
>>> print "hello,world!"
hello,world!
>>> print 10000L
10000
可以看到,长整型数10000L被转换成了数字10000 ,而且在显示给用户的时候也如此。
我们在这里讨论的实际上是值被转为字符的两种机制。可以通过以下两个函数来使用这两种机制:
>>> print str("hello,world!")
hello,world!
>>> print str(10000L)
10000
>>> print repr("hello,world!")
'hello,world!'
>>> print repr(10000L)
10000L
str()函数 ,它会**把值转换为合理形式的字符串**,以利用户可以理解;
repr()函数,它会**创建一个字符串**,它以合法的python表达式的形式来表示值。
应用中的区别:
%s 就是调用str()——用于显示字符串
%r 就是调用repr()——用于调试时显示
str()一般是将数值转成字符串。
repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。
input 和 raw_input 的比较
上一章的最后一个例子用到了raw_input 函数,那它与 input 有什么不用? 下面我们用input函数,再试试那个例子。
>>> name = input("what is your name?")
what is your name?huhu
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
name = input("what is your name?")
File "<string>", line 1, in <module>
NameError: name 'huhu' is not defined
>>> name = input("what is name?")
what is name?"huhu"
>>> print "hello, " + name + " !"
hello, huhu !
input()函数会假设用户输入的是合法的python表达式。raw_input()函数,可以输入不带引号的字符串。
>>> input("enter a namber:")
enter a namber:3
3
>>> raw_input("enter a namber:")
enter a namber:3
'3'
当然input有特别的需要,比如要求用户输入数字时。
**长字符串 **
如果需要写一个非常非常长的字符串,它需要跨多行,那么,可以使用三个引号带点普通引号。
>>> print ''' this is a very long string.
It continues here.
and it's not over yet.
'''
this is a very long string.
It continues here.
and it's not over yet.
普通字符串也可以跨行。如果一行之中最后一个字符是反斜线,那么,换行符本身就“转义”了,也就是被忽略了。
>>> print " Hello.\
world!"
Hello.world!
>>> 1+2+\
4+5
12
原始字符串
>>> path ='C:\abc'
>>> print path
C:bc
怎么会这样呢,我想输入的是一个路径,却被换行了。
>>> print 'C:\\abc'
C:\abc
>>> print 'C:\\Program Files\\fnord\\foo\\bar\\baz\\frozz'
C:\Program Files\fnord\foo\bar\baz\frozz
通过上面的双斜线(\\)解决了路径问题,但如果路径很长的话会不会太麻烦了。
>>> print r'C:\Program Files\fnord\foo\bar\baz\frozz'
C:\Program Files\fnord\foo\bar\baz\frozz
>>> print r'Let\'s go !'
Let\'s go !
原始字符串不会把反斜线当作特殊字符。可以看到,原始字符串以**r开头**。
Unicode字符串
字符串常量的最后一种类型就是Unicode 字符串(或者称为Unicode 对象---与字符串并不是同一个类型)。Python中的普通字符串在内部是以8位ASCII码形成存储的,而Unicode字符串则存储为16位Unicode字符,这样就能够表示更多的字符集了,包括世界上大多数语言的特殊字符。
如果你不短简什么是Unicode ,可以访问Unicode网站:http://www.unicode.org
>>> u'hello, world!'
u'hello, world!'
可以看到,Unicode字符串使用u前缀,就像原始字符串使用r 一样。
注意:在python 3.0中,所有字符串都是Unicode字符串。
python字符转义
转义字符 | 描述 | 实例 |
---|---|---|
(在行尾时) | 换行符 | >>> print("line1\ ... line2\ ... line3") line1 line2 line3 >>> |
\ | 反斜杠符号 | >>> print("\") \ |
' | 单引号 | >>> print(''') ' |
" | 双引号 | >>> print(""") " |
\a | 响铃 | >>> print("\a") 执行后电脑有响声。 |
\b | 退格(Backspace) | >>> print("Hello \b World!") Hello World! |
\000 | 空 | >>> print("\000") >>> |
\n | 换行 | >>> print("\n") >>> |
\v | 纵向制表符 | >>> print("Hello \v World!") Hello World! >>> |
\t | 横向制表符 | >>> print("Hello \t World!") Hello World! >>> |
\r | 回车,将 \r 后面的内容移到字符串开头, 并逐一替换开头部分的字符, 直至将 \r 后面的内容完全替换完成。 |
>>> print("Hello\rWorld!") World! >>> print('google runoob taobao\r123456') 123456 runoob taobao |
\f | 换页 | >>> print("Hello \f World!") Hello World! >>> |
\yyy | 八进制数,y代表0-7的字符,例如:\012代表换行 | >>> print("\110\145\154\154\157\40\127\157\162\154\144\41") Hello World! |
\xyy | 十六进制,以 \x 开头,y 代表的字符, 例如:\x0a 代表换行 |
>>> print("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21") Hello World! |
\other | 其它的字符以普通格式输出 |
python 字符串格式化
符 号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化操作符辅助指令:
符号 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
在正数前面显示空格 | |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |