Python文本(字面值)
Python中的文本是一些内置类型的常量表示方法。
字符串和字节
字符串是一系列的字符序列,Python中用单引号(''),双引号(""),或者三个单引号(''' ''')三个双引号(""" """)来表示字符串常量。
#fileName:lexical
str_1 = 'hello python'
str_2 = "What's your name?"
str_3 = '''mile and silence are two powerful tools.
Smile is the way to solve many problems and silence
is the way to avoid many problems'''
str_4 = """It is our choices that show what we truly are,
far more than our abilities. """
print(str_1)
print(str_2)
print(str_3)
print(str_4)
利用三引号,你可以表示一个多行的字符串。
转义符
假设你想要在一个字符串中包含一个单引号('),那么你该怎么指示这个字符串?例如,这个字符串是what's your name?。你肯定不会用'what's your name?'来指示它,因为Python会弄不明白这个字符串从何处开始,何处结束。所以,你需要指明单引号而不是字符串的结尾。可以通过 转义符 来完成这个任务。你用\'来指示单引号——注意这个反斜杠。现在你可以把字符串表示为'what\'s your name?'。
另一个表示这个特别的字符串的方法是"what's your name?",即用双引号。类似地,要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。另外,你可以用转义符\\来指示反斜杠本身。
值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。例如:
str_5 = "This is the first sentence.\
This is the second sentence."
print(str_5)
转义序列如下:
转义序列 | 意义 | 注意事项 |
\newline | 反斜线且忽略换行 | |
\\ | 反斜线(\) | |
\’ | 单引号(’) | |
\" | 双引号(”) | |
\a | ASCII Bell(BEL) | |
\b | ASCII 退格(BS) | |
\f | ASCII 换页符(FF) | |
\n | ASCII 换行符(LF) | |
\r | ASCII 回车符(CR) | |
\t | ASCII 水平制表符(TAB) | |
\v | ASCII 垂直制表符(VT) | |
\ooo | 八进制值为 ooo 的字符 | (1,3) |
\xhh | 十六进制值为 hh 的字符 | (2,3) |
字符串文本中的转义序列规则如下:
转义序列 | 意 义 | 注意事项 |
\N{name} | Unicode 数据库中以 name 命名的字符 | (4) |
\uxxxx | 16位16进制字符值:xxxx | (5) |
\Uxxxxxxxx | 32位16进制字符值:xxxxxxxx | (6) |
注意:
- 与标准 C 相同的是,最多只可以接受三位八进制数字。
- 与标准 C 不同的是,只能接收两个十六进制数字。
- 在字节文本中,十六进制和八进制转义字符表示给定值的字节数。在字符串文本中,这些转义字符表示给定值的 Unicode 字符。
- 与 3.3 版本不同之处:增加了对别名[ 1 ]的支持。
- 可以使用该转义序列为那些构成代理对的单个代码单元编码。只能使用四个十六进制数表示。
- 任何 Unicode 字符都可以采用这样的编码方式。需要注意的是只能使用八个十六进制数表示。
print('\123')
print('\x02')
print("\N{SOLIDUS}")
print("\N{BLACK SPADE SUIT}")
print('\u3333')
print('\U00004e60')
结果:
不像标准 C,所有不能被识别的转义序列都保留在串中且不做改变,例如,反斜线会保留在结果中。(这个行为在调试过程中非常有用:如果输入了一个错误的转义序列,在输出结果中更容易识别出错误。)此外,至关重要的是要注意转义字符只能在字符串文本中起作用,在字节文本类别中无法被识别。
print('\k see you later')
#result:\k see you later
在三重引用串中,允许出现未转义的新行和引用字符(并被保留),除非三个连续的引用字符串中断了该串。(引用字符是用于引用字符串的字符,如,' 或 "。)
str_6 = """this' a dog,what's
you pat?"""
print(str_6)
Python中定义的字符串的格式:参见:https://docs.python.org/3/reference/lexical_analysis.html?highlight=identifier#string-and-bytes-literals
stringliteral ::= [stringprefix
](shortstring
|longstring
)
stringprefix ::= "r" | "u" | "R" | "U"
如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。
print(r"Newlines are indicated by \n")
#result:Newlines are indicated by \n 此处\n将不会按照转义被处理
即使在自然字符中,可以使用反斜线将引号转义,但是反斜线本身会在结果中保留;比如 r"\"" 是一个由两个字符组成的合法字符串:一个反斜线与一个双引号;但 r"\" 却是一个非法字符串(即原始的字符串也不能以奇数个反斜杠结尾)。 具体而言,一个原始的文本不能以单个反斜杠结尾(由于反斜线会将跟在其后的引号转义)。另外需要注意的是,如果一个反斜线跟在换行符后,反斜线与换行符会被当做文本的两个字符,而不是一个连续行。
字符串的连接
多个相邻的字符串文本或字节文本(由空白分隔),允许使用不同的引用习惯,并且其含义与连接在一起时是一样的。因此, "hello" ‘world’
与 "helloworld"
是等价的。这个特性可以用来减少反斜线的使用数量,可以很方便的将一个长字符串分隔在多行上,甚至可以在字符串的某一部分添加注释:
re.compile("[A-Za-z_]" # letter or underscore
"[A-Za-z0-9_]*" # letter, digit or underscore
)
需要注意的是,这个特性是定义在句法层次上的,但是是在编译时实现的。在运行时连接串必须使用 ‘+’ 运算符。并且不同的引用字符可以混用,甚至可以将原始串与三重引用串混合使用。
字符串读取
python的字串列表有2种取值顺序:
- 从左到右索引默认0开始的,最大范围是字符串长度少1
- 从右到左索引默认-1开始的,最大范围是字符串开头
如果你的实要取得一段子串的话,可以用到变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾。
str = 'Hello World!'
print(str) # 输出完整字符串
print(str[0]) # 输出字符串中的第一个字符
print(str[2:5]) # 输出字符串中第三个至第五个之间的字符串
print(str[2:])# 输出从第三个字符开始的字符串
print(str * 2) # 输出字符串两次
print(str + "TEST") # 输出连接的字符串
##############result############
#Hello World!
#H
#llo
#llo World!
#Hello World!Hello World!
#Hello World!TEST
#############################
字节文本总是以 'b' 或 'B' 开头;它们会生成 bytes 类型实例而不是 str 类型。它们可能只包含 ASCII 字符;大于或等于 128 的数字必须使用转义字符表示。
one_byte = b"abcd\x64"
print(one_byte)
print(type(one_byte)) #type为内置函数,查看one_byte的类型
print(len(one_byte)) #len为内置函数,计算one_byte的长度
print(one_byte[4])
#######result##########
#b'abcdd'
#<class 'bytes'>
#
#100 #100用十六进制表示就是\x64
####################
内置函数说明参见:https://docs.python.org/3/library/functions.html
如果想要修改一个字节串中的某个字节,不能够直接修改,需要将其转化为bytearray后再进行修改:
barr = bytearray(one_byte)
print(type(barr))
barr[0] = 110
print(barr)
#####result########
#<class 'bytearray'>
#bytearray(b'nbcdd')
################
bytearray为内置函数,将字节文本转换为字节数组。参见:https://docs.python.org/3/library/functions.html#bytearray
字节与字符之间的相互转换:
one_str = "少壮不努力,老大学Python"
str_to_byte = one_str.encode('utf-8')
print(str_to_byte)
byte_to_str = str_to_byte.decode('utf-8')
print(byte_to_str)
###############result#############
#b'\xe5\xb0\x91\xe5\xa3\xae\xe4\xb8\x8d\xe5\x8a\xaa\xe5\x8a\x9b\xef\xbc\x8c\xe8\x80\x81\xe5\xa4\xa7\xe5\xad\xa6Python'
#少壮不努力,老大学Python
###############################
因为每种编码方式包含的字节种类数目不同,编码和解码必须使用相同的编码方式,否则就会产生乱码,甚至转换失败。
数字
Python共有三种类型数字文本:整型(int有符号整形、long长整型)、浮点型(float)以及虚数型(complex)。不存在复数文本(复数可以由一个实数加一个虚数的形式给出)。
注意,数字文本不包含符号(正负号);像 -1 实际上是一个组合了一元运算符 '-' 和数字 1 的表达式。
整形文本表示方式包括二进制、八进制、十进制、十六进制定义如下:
定义 | 举例 | 值(十进制值) | |
二进制 | 0b(0或1) | b11111110 | 254 |
八进制 | 0o(0~7) | 0o10 | 8 |
十进制 | 0或以非0开头+0~9 | 12 | 12 |
十六进制 | 0x(0~9|a~f|A~F) | 0x10 | 16 |
除了可用内存的容量限制, 整数长度没有其他限制.
注意, 非零十进制数字中不允许用0作为前缀, 这种写法会与 C 语言风格的八进制字面值产生歧义 (用于3.0之前版本的Python)
Python使用"L"来显示长整型。在整数之后加"L"或者"l(小写字母L)",建议您使用大写"L",避免与数字"1"混淆。
浮点型文本
浮点数有两种表示格式,小数、指数形式。
小数表示形式:小数点前或者后必须有一部分存在。
指数表示形式:整数部分和指数部分都看作是十进制的. 例如, 077e010 是合法的, 它等价于 77e10. 浮点型字面值的取值范围依赖于实现。
以下是一些浮点数的例子:
3.14 10. .001 1e100 3.14e-10 0e0
虚数
虚数是实部为零的复数. 复数由一对有着相同取值范围的浮点数表示. 为了创建一个非零实部的复数, 可以对它增加一个浮点数, 例如, (3+4j). 下面是一些例子:
3.14j 10.j 10j .001j 1e100j 3.14e-10j
Python文本(字面值)的更多相关文章
- 算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
- Python 文本解析器
Python 文本解析器 一.课程介绍 本课程讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 二.相关技术 Python:一种面向对象.解释型计算机程序设计语言,用它可以做 ...
- python 文本分类
python 文本分类 pyhton 机器学习 待续...
- python文本 maketrans和translate
python文本 maketrans和translate 场景: 过滤字符串的某些字符,我们从例子出发 >>> tb=str.maketrans ('abc','123') & ...
- python文本 字符串逐字符反转以及逐单词反转
python文本 字符串逐字符反转以及逐单词反转 场景: 字符串逐字符反转以及逐单词反转 首先来看字符串逐字符反转,由于python提供了非常有用的切片,所以只需要一句就可以搞定了 >>& ...
- python文本 拼接或合并字符串
python文本 拼接.合并字符串 场景: 拼接.合并字符串 在这个场景中,我们首先想到的当然是使用+或者+=将两个字符串连接起来 >>> a='a' >>> ...
- python文本 去掉字符串前后空格
python文本 去掉字符串前后空格 场景: 去掉字符串前后空格 可以使用strip,lstrip,rstrip方法 >>> a="abc".center (30 ...
- python文本 判断对象里面是否是类字符串
python文本 判断对象里面是否是类字符串 场景: 判断对象里面是否是类字符串 一般立刻会想到使用type()来实现 >>> def isExactlyAString(obj): ...
- python文本 单独处理每个字符的方法汇总
python文本 单独处理字符串每个字符的方法汇总 场景: 用每次处理一个字符的方式处理字符串 方法: 1.使用list(str) >>> a='abcdefg' >&g ...
- python文本 字符串开头或者结尾匹配
python文本 字符串开头或者结尾匹配 场景: 字符串开头或者结尾匹配,一般是使用在匹配文件类型或者url 一般使用startwith或者endwith >>> a='http:/ ...
随机推荐
- 数据库中User和Schema的关系
如果我们想了解数据库中的User和Schema到底什么关系,那么让我们首先来了解一下数据库中User和Schema到底是什么概念. 在SQL Server2000中,由于架构的原因,Us ...
- ScrollView嵌套StackView提示需要宽度和高度限制
场景: 在一个xib的view中,添加一个ScrollView,再在这个ScrollView中添加一个StackView,StackView中不加控件(用代码动态加). 问题: 提示ScrollVie ...
- Redis(7)Creating and Using Cluster Mode
1. DocumentsCluster will not support SELECT, it only contains database 0.All the nodes use TCP bus a ...
- Swift - 自动布局库SnapKit的使用详解4(样例1:实现一个登录页面)
前面的几篇文章讲解了自动布局库SnapKit的使用方法.本文通过一个完整的样例(登录页面)来演示在实际项目中如何使用SnapKit来实现自动化布局的.1,效果图如下
- Nginx介绍
原文:http://www.aosabook.org/en/nginx.html 作者: Andrew Alexeev nginx(发音"engine x")是俄罗斯软件工程师Ig ...
- 标签视图控制器UITabBarController
标签视图控制器 UITabBarController FirstViewController*first = [[FirstViewController alloc] init]; //创建一个UIT ...
- POJ 3094 Quicksum 难度:0
http://poj.org/problem?id=3094 #include<iostream> #include <string> using namespace std; ...
- 一模 (3) day2
第一题: 题目大意:和day1一样,给出m个小于n的数,求出出现次数大于m div 2 的数. 数据范围加大,1<=n<=2^31 1<=m<=3000000 解题过程: ...
- <input type="hidden" id="haha" name="wang" value="xiaodong" />
jsp中一个隐藏的文本框,文本框里的值是:xiaodong id属性和name属性:就是在JavaScript中或者控制器中根据id或name属性取它的value的值 开发人员所需要,又不想让用户看到 ...
- [mr440] 崎岖的山区
极类似动归的广搜?反正各种算法傻傻分不清…写之前叹了一句,好久不写广搜了啊!呵呵真的写了好久,大约一个钟头? f[i,j,0]表示到点(i,j)且最后一步为下降的最少步数,f[i,j,1]就是上升.莫 ...