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)

注意:

  1. 与标准 C 相同的是,最多只可以接受三位八进制数字。
  2. 与标准 C 不同的是,只能接收两个十六进制数字。
  3. 在字节文本中,十六进制和八进制转义字符表示给定值的字节数。在字符串文本中,这些转义字符表示给定值的 Unicode 字符。
  4. 与 3.3 版本不同之处:增加了对别名[ 1 ]的支持。
  5. 可以使用该转义序列为那些构成代理对的单个代码单元编码。只能使用四个十六进制数表示。
  6. 任何 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文本(字面值)的更多相关文章

  1. 算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!

    算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!

  2. Python 文本解析器

    Python 文本解析器 一.课程介绍 本课程讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 二.相关技术 Python:一种面向对象.解释型计算机程序设计语言,用它可以做 ...

  3. python 文本分类

    python 文本分类 pyhton 机器学习 待续...

  4. python文本 maketrans和translate

    python文本 maketrans和translate 场景: 过滤字符串的某些字符,我们从例子出发 >>> tb=str.maketrans ('abc','123')    & ...

  5. python文本 字符串逐字符反转以及逐单词反转

    python文本 字符串逐字符反转以及逐单词反转 场景: 字符串逐字符反转以及逐单词反转 首先来看字符串逐字符反转,由于python提供了非常有用的切片,所以只需要一句就可以搞定了 >>& ...

  6. python文本 拼接或合并字符串

    python文本 拼接.合并字符串 场景: 拼接.合并字符串 在这个场景中,我们首先想到的当然是使用+或者+=将两个字符串连接起来 >>> a='a'    >>> ...

  7. python文本 去掉字符串前后空格

    python文本 去掉字符串前后空格 场景: 去掉字符串前后空格 可以使用strip,lstrip,rstrip方法 >>> a="abc".center (30 ...

  8. python文本 判断对象里面是否是类字符串

    python文本 判断对象里面是否是类字符串 场景: 判断对象里面是否是类字符串 一般立刻会想到使用type()来实现 >>> def isExactlyAString(obj):  ...

  9. python文本 单独处理每个字符的方法汇总

    python文本 单独处理字符串每个字符的方法汇总 场景: 用每次处理一个字符的方式处理字符串 方法: 1.使用list(str) >>> a='abcdefg'    >&g ...

  10. python文本 字符串开头或者结尾匹配

    python文本 字符串开头或者结尾匹配 场景: 字符串开头或者结尾匹配,一般是使用在匹配文件类型或者url 一般使用startwith或者endwith >>> a='http:/ ...

随机推荐

  1. 数据库中User和Schema的关系

    如果我们想了解数据库中的User和Schema到底什么关系,那么让我们首先来了解一下数据库中User和Schema到底是什么概念.        在SQL Server2000中,由于架构的原因,Us ...

  2. ScrollView嵌套StackView提示需要宽度和高度限制

    场景: 在一个xib的view中,添加一个ScrollView,再在这个ScrollView中添加一个StackView,StackView中不加控件(用代码动态加). 问题: 提示ScrollVie ...

  3. 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 ...

  4. Swift - 自动布局库SnapKit的使用详解4(样例1:实现一个登录页面)

    前面的几篇文章讲解了自动布局库SnapKit的使用方法.本文通过一个完整的样例(登录页面)来演示在实际项目中如何使用SnapKit来实现自动化布局的.1,效果图如下

  5. Nginx介绍

    原文:http://www.aosabook.org/en/nginx.html 作者: Andrew Alexeev nginx(发音"engine x")是俄罗斯软件工程师Ig ...

  6. 标签视图控制器UITabBarController

    标签视图控制器 UITabBarController FirstViewController*first = [[FirstViewController alloc] init]; //创建一个UIT ...

  7. POJ 3094 Quicksum 难度:0

    http://poj.org/problem?id=3094 #include<iostream> #include <string> using namespace std; ...

  8. 一模 (3) day2

    第一题: 题目大意:和day1一样,给出m个小于n的数,求出出现次数大于m div 2 的数. 数据范围加大,1<=n<=2^31   1<=m<=3000000 解题过程: ...

  9. <input type="hidden" id="haha" name="wang" value="xiaodong" />

    jsp中一个隐藏的文本框,文本框里的值是:xiaodong id属性和name属性:就是在JavaScript中或者控制器中根据id或name属性取它的value的值 开发人员所需要,又不想让用户看到 ...

  10. [mr440] 崎岖的山区

    极类似动归的广搜?反正各种算法傻傻分不清…写之前叹了一句,好久不写广搜了啊!呵呵真的写了好久,大约一个钟头? f[i,j,0]表示到点(i,j)且最后一步为下降的最少步数,f[i,j,1]就是上升.莫 ...