写在前面
最近这段时间比较充裕,想要系统学习一下python,这个系列算是对自己学习的一个记录吧。同时也想提供一个比较完整详细的python教程供有需要的小伙伴进行学习,大家一起共同进步!!!努力冲冲冲!!!
虽然我也不知道自己能够坚持多久,但我尽量坚持不断更哈哈哈。如果这篇文章对你有帮助的话,请多多点赞支持呀。你们的鼓励和支持就是我坚持的最大动力【比心】。
如果需要查看往期文章的话,可以点击下面的文章链接,全部都已经汇总好了
目录
前言
本文为python学习笔记系列文章。
本文主要介绍了python中的变量,数据类型,输入输出函数,格式化字符串,转义字符以及数据类型转换。
注:本文主要参考了C语言中文网中的python教程。
变量
变量的定义
变量(Variable):变量是一个可以临时存放数据的存储空间,是数据的载体。
变量可以看成一个小盒子,用来“盛放”程序中的数据。每个变量都拥有独一无二的名字,通过变量的名字能够查找到存储中的数据。
常量(Constant):和变量相对应,也是用来“盛放”数据的小盒子,但不同的是:变量保存的数据可以被多次修改,而常量一旦保存某个数据之后就不能修改了。
变量的赋值
将数据放入变量的过程叫做赋值(Assignment)。在Python中, 使用等号=
作为赋值运算符,语法格式为:
name = value
其中,name 表示变量名;value 表示值,也就是要存储的数据。
注意,变量是标识符的一种,它的名字不能随便起,要遵循python标识符命名规范,避免和python内置函数以及python保留字重名。
python标识符命名规范
- 标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。
- 标识符不能和 Python 中的保留字相同。
- Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。
- 在 Python 中,标识符中的字母是严格区分大小写的,比如说,下面这 3 个变量之间,就是完全独立、毫无关系的,它们彼此之间是相互独立的个体。
number = 0
Number = 0
NUMBER = 0
- Python 语言中,以下划线开头的标识符有特殊含义,例如:
(1)以单下划线开头的标识符(如 _width),表示不能直接访问的类属性,其无法通过 from...import* 的方式导入;
(2)以双下划线开头的标识符(如__add)表示类的私有成员;
(3)以双下划线作为开头和结尾的标识符(如 __init__),是专用标识符。
所以,除非特定场景需要,应避免使用以下划线开头的标识符。
另外需要注意的是,Python 允许使用汉字作为标识符。但应尽量避免使用汉字作为标识符,这会避免遇到很多奇葩的错误。
标识符的命名,除了要遵守以上这几条规则外,不同场景中的标识符,其名称也有一定的规范可循,例如:
- 当标识符用作模块名时,应尽量短小,并且全部使用小写字母,可以使用下划线分割多个字母,例如 game_mian、game_register 等。
- 当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下划线,例如 com.mr、com.mr.book 等。
- 当标识符用作类名时,应采用单词首字母大写的形式。例如,定义一个图书类,可以命名为 Book。
- 模块内部的类名,可以采用 "下划线+首字母大写" 的形式,如 _Book;
- 函数名、类中的属性名和方法名,应全部使用小写字母,多个单词之间可以用下划线分割;
- 常量命名应全部使用大写字母,单词之间可以用下划线分割;
python内置函数
python解释器自带的函数叫做内置函数,这些函数可以直接使用。不能作为标识符定义给变量。
内置函数 | ||||
---|---|---|---|---|
abs() | delattr() | hash() | memoryview() | set() |
all() | dict() | help() | min() | setattr() |
any() | dir() | hex() | next() | slicea() |
ascii() | divmod() | id() | object() | sorted() |
bin() | enumerate() | input() | oct() | staticmethod() |
bool() | eval() | int() | open() | str() |
breakpoint() | exec() | isinstance() | ord() | sum() |
bytearray() | filter() | issubclass() | pow() | super() |
bytes() | float() | iter() | print() | tuple() |
callable() | format() | len() | property() | type() |
chr() | frozenset() | list() | range() | vars() |
classmethod() | getattr() | locals() | repr() | zip() |
compile() | globals() | map() | reversed() | __import__() |
complex() | hasattr() | max() | round() |
python保留字
保留字是python语言中一些已经被赋予特定意义的单词,不能作为标识符定义给变量。
and | as | assert | break | class | continue |
def | del | elif | else | except | finally |
for | from | False | global | if | import |
in | is | lambda | nonlocal | not | None |
or | pass | raise | return | try | True |
while | with | yield |
举例
#赋值举例
n=10 #表示将10赋值给变量n
PI=3.14 #将圆周率赋值给变量PI
url="http://www.baidu.com" #将百度网址赋值给变量url
flag=False #将布尔值赋值给变量flag
变量的值不是一成不变的,可以随时被修改,只要重新赋值即可。也可以将不同类型的数据赋值给同一个变量。
#变量修改举例
n = 100 #将100赋值给变量n
n = -95 #将-95赋值给变量n
n = 200 #将200赋值给变量n
num = 12.5 #将小数赋值给变量num
num = 85 #将整数赋值给变量num
num = "http://www.baidu.com" #将字符串赋值给变量num
注意,变量的值一旦被修改,之前的值就被覆盖了,不复存在了,无法找回。
除了赋值单个数据,也可以将表达式的运行结果赋值给变量。
#表达式赋值给变量举例
str="百度"+"http://www.baidu.com" #字符串拼接结果赋值给变量
sum=10+20 #加法结果赋值给变量
变量的使用
python中变量的使用很广泛,如函数传参,四则运算,参与表达式运算,字符串拼接等。
#变量的使用举例
n=15
print(n) #变量传递给函数
m=10/2*5+n #变量参与四则运算
print(m)
print(m-10) #由变量构成的表达式作为参数传递给函数
m=m*2 #变量自身运算
print(m)
url="www.baidu.com"
str="百度网页:"+url #变量参与字符串拼接
print(str)
运行结果为
数据类型
python中有许多数据类型,包括整数,浮动数,字符串以及布尔类型
整数类型
整数就是没有小数部分的数字,python中的整数包括正整数、0 和负整数。
Python中整数的取值范围是无限的,不管多大或多小的数字,python都可以处理。
当所用数值超过计算机自身的计算能力时,Python 会自动转用高精度计算(大数计算)。
#将 90 赋值给变量 n
n = 90
print(n)
print( type(n) )
#给x赋值一个很大的整数
x = 222222222222222222222222222222222
print(x)
print( type(x) )
#给y赋值一个很小的整数
y = -55555555555555555555555555555555
print(y)
print( type(y) )
运行结果为:
Python 3.x 只有int 一种类型存储整数,但是 Python 2.x 会使用 long 类型来存储较大的整数。以上代码在 Python 2.x 下的运行结果为:
78
<type 'int'>
8888888888888888888888
<type 'long'>
-7777777777777777777777
<type 'long'>
整数的不同进制
在 Python 中,可以使用多种进制来表示整数:
1) 十进制形式
平时常见的整数就是十进制形式,它由 0~9 共十个数字排列组合而成。
注意,使用十进制形式的整数不能以 0 作为开头,除非这个数值本身就是 0。2) 二进制形式
由 0 和 1 两个数字组成,书写时以
0b
或0B
开头。例如,101 对应十进制数是 5。3) 八进制形式
八进制整数由 0~7 共八个数字组成,以
0o
或0O
开头。注意,第一个符号是数字 0,第二个符号是大写或小写的字母 O。
在 Python 2.x 中,八进制数字还可以直接以0
(数字零)开头。4) 十六进制形式
由 0~9 十个数字以及 A~F(或 a~f)六个字母组成,书写时以
0x
或0X
开头,
举例:
#十六进制
hex1 = 0x45
hex2 = 0x4Af
print("hex1Value: ", hex1)
print("hex2Value: ", hex2)
#二进制
bin1 = 0b101
print('bin1Value: ', bin1)
bin2 = 0B110
print('bin2Value: ', bin2)
#八进制
oct1 = 0o26
print('oct1Value: ', oct1)
oct2 = 0O41
print('oct2Value: ', oct2)
运行结果为:
hex1Value: 69
hex2Value: 1199
bin1Value: 5
bin2Value: 6
oct1Value: 22
oct2Value: 33
注意:输出均为十进制
数字分隔符
为了提高数字的的可读性,Python 3.x 允许使用下划线
_
作为数字(包括整数和小数)的分隔符。通常每隔三个数字添加一个下划线,类似于英文数字中的逗号。下划线不会影响数字本身的值。
#数字分隔符举例
distance=384_000_000
time=192300220000
print("地球和月球的距离:",distance)
print("时间:",time)
运行结果为:
小数/浮点数类型
浮点数:小数在存储过程中小数点发生移动。
定点数:小数在存储过程中小数点不发生移动。
小数通常以浮点数的形式存储。浮点数和定点数是相对的。
python只有一种小数类型,就是float.
小数有两种书写形式:
1) 十进制形式
这种就是我们平时看到的小数形式,例如 34.6、346.0、0.346。
书写小数时必须包含一个小数点,否则会被 Python 当作整数处理。
2) 指数形式
Python 小数的指数形式的写法为:
aEn 或 aen
a 为尾数部分,是一个十进制数;n 为指数部分,是一个十进制整数;E
或e
是固定的字符,用于分割尾数部分和指数部分。整个表达式等价于 a×10n。
指数形式的小数举例:
- 2.1E5 = 2.1×105,其中 2.1 是尾数,5 是指数。
- 3.7E-2 = 3.7×10-2,其中 3.7 是尾数,-2 是指数。
- 0.5E7 = 0.5×107,其中 0.5 是尾数,7 是指数。
注意,只要写成指数形式就是小数,即使它的最终值看起来像一个整数。例如 14E3 等价于 14000,但 14E3 是一个小数。
举例:
#浮点数举例
f1 = 12.5
print("f1Value: ", f1)
print("f1Type: ", type(f1))
f2 = 0.34557808421257003
print("f2Value: ", f2)
print("f2Type: ", type(f2))
f3 = 0.0000000000000000000000000847
print("f3Value: ", f3)
print("f3Type: ", type(f3))
f4 = 345679745132456787324523453.45006
print("f4Value: ", f4)
print("f4Type: ", type(f4))
f5 = 12e4
print("f5Value: ", f5)
print("f5Type: ", type(f5))
f6 = 12.3 * 0.1
print("f6Value: ", f6)
print("f6Type: ", type(f6))
运行结果:
注意:
1 print 在输出浮点数时,会根据浮点数的长度和大小适当的舍去一部分数字,或者采用科学计数法。
2 12.3*0.1
的计算结果很明显是 1.23,但是 print 的输出却不精确。这是因为小数在内存中是以二进制形式存储的,小数点后面的部分在转换成二进制时很有可能是一串无限循环的数字,无法精确表示。
复数类型
复数(Complex)是python的内置类型,直接书写即可。
复数由实部(real)和虚部(imag)构成,在 Python 中,复数的虚部以j
或者J
作为后缀,具体格式为:a + bj。a 表示实部,b 表示虚部。
举例
#复数类型举例
c1 = 10 + 0.5j
print("c1Value: ", c1)
print("c1Type", type(c1))
c2 = 12 - 0.5j
print("c2Value: ", c2)
print("c2Type", type(c2))
#对复数进行简单计算
print("c1+c2: ", c1+c2)
print("c1*c2: ", c1*c2)
运行结果:
字符串类型
若干个字符的集合就是一个字符串(String)。
python中的字符串必须由双引号" "
或者单引号' '
包围,具体格式为:
"字符串内容"
'字符串内容'
字符串的内容可以包含字母、标点、特殊符号、中文、日文等全世界的所有文字。
字符串举例:
- "123456789"
- "123abcABC"
- "http://www.taobao.com"
注意:Python 字符串中的双引号和单引号没有任何区别。
处理字符串中的引号
当字符串内容中出现引号时,需要进行特殊处理,否则 Python 会解析出错,例如:
'I'm a great coder!'
由于上面字符串中包含了单引号,此时 Python 会将字符串中的单引号与第一个单引号配对,这样就会把'I'
当成字符串,而后面的m a great coder!'
就变成了多余的内容,从而导致语法错误。
对于这种情况,有两种处理方案:
1) 对引号进行转义
在引号前面添加反斜杠\
就可以对引号进行转义,让 Python 把它作为普通文本对待,例如:
str1 = 'I\'m a great coder!'
str2 = "引文双引号是\",中文双引号是“"
print(str1)
print(str2)
运行结果:
I'm a great coder!
引文双引号是",中文双引号是“
2) 使用不同的引号包围字符串
如果字符串内容中出现了单引号,那么我们可以使用双引号包围字符串,反之亦然。例如:
str1 = "I'm a great coder!" #使用双引号包围含有单引号的字符串
str2 = '引文双引号是",中文双引号是“' #使用单引号包围含有双引号的字符串
print(str1)
print(str2)
运行结果:
I'm a great coder!
引文双引号是",中文双引号是“
字符串的换行
实现一个比较长的字符串换行,需要在行尾添加反斜杠\
。
s2 = 'It took me six months to write this Python tutorial. \
Please give me more support. \
I will keep it updated.'
上面 s2 字符串的比较长,所以使用了转义字符\
对字符串内容进行了换行,这样就可以把一个长字符串写成多行。
另外,Python 也支持表达式的换行,例如:
num = 20 + 3 / 4 + \
2 * 3
print(num)
长字符串
长字符串,就是可以直接换行(不用加反斜杠
\
)书写的字符串。并且三个单引号或者双引号可以对多行内容进行注释。
Python 长字符串由三个双引号"""
或者三个单引号'''
包围,语法格式如下:
"""长字符串内容"""
'''长字符串内容'''
说明:在长字符串中放置单引号或者双引号不会导致解析错误。
如果长字符串没有赋值给任何变量,那么这个长字符串就不会起到任何作用,和一段普通的文本无异,相当于被注释掉了。注意,此时 Python 解释器并不会忽略长字符串,也会按照语法解析,只是长字符串起不到实际作用而已。
当程序中有大段文本内容需要定义成字符串时,优先推荐使用长字符串形式,因为这种形式非常强大,可以在字符串中放置任何内容,包括单引号和双引号。
举例:
longstr = '''It took me 6 months to write this Python tutorial.
Please give me a to 'thumb' to keep it updated.
The Python tutorial is available at http://c.biancheng.net/python/.'''
print(longstr)
长字符串中的换行、空格、缩进等空白符都会原样输出,所以不能写成下面的样子:
longstr = '''
It took me 6 months to write this Python tutorial.
Please give me a to 'thumb' to keep it updated.
The Python tutorial is available at http://c.biancheng.net/python/.
'''
print(longstr)
输出结果将变成:
It took me 6 months to write this Python tutorial.
Please give me a to 'thumb' to keep it updated.
The Python tutorial is available at http://c.biancheng.net/python/.
字符串内容前后多出了两个空行,并且每一行的前面会多出四个空格。
原始字符串
Python 字符串中的反斜杠
\
有着特殊的作用,就是转义字符,例如上面的\'
和\"。
转义字符有时候会带来一些麻烦,例如我要表示一个包含 Windows 路径D:\Program Files\Python 3.8\python.exe
这样的字符串,在 Python 程序中直接这样写肯定是不行的,不管是普通字符串还是长字符串。因为\
的特殊性,我们需要对字符串中的每个\
都进行转义,也就是写成D:\\Program Files\\Python 3.8\\python.exe
这种形式才行。但是这种写法比较麻烦。
为了解决转义字符的问题,Python 支持原始字符串。在原始字符串中,\
不会被当作转义字符。
在普通字符串或者长字符串的开头加上r
前缀,就变成了原始字符串,具体格式为:
str1 = r'原始字符串内容'
str2 = r"""原始字符串内容"""
将上面的 Windows 路径改写成原始字符串的形式:
#原始字符串举例
rstr = r'D:\Program Files\Python 3.8\python.exe'
print(rstr)
运行结果为:
原始字符串中的引号
如果普通格式的原始字符串中出现引号,程序同样需要对引号进行转义,否则 Python 照样无法对字符串的引号精确配对;但是和普通字符串不同的是,此时用于转义的反斜杠会变成字符串内容的一部分。
举例:
#原始字符串中的引号举例
str1 = r'I\'m a great coder!'
print(str1)
输出结果:
注意:Python 原始字符串中的反斜杠仍然会对引号进行转义,因此原始字符串的结尾处不能是反斜杠,否则字符串结尾处的引号会被转义,导致字符串不能正确结束。
有两种方式解决这个问题:
1 改用长字符串的写法,不要使用原始字符串;
2 单独书写反斜杠。
例如想表示D:\Program Files\Python 3.8\
,可以这样写:
#解法原始字符串中的引号问题方法一
str1 = r'D:\Program Files\Python 3.8' '\\'
print(str1)
我们先写了一个原始字符串r'D:\Program Files\Python 3.8'
,紧接着又使用'\\'
写了一个包含转义字符的普通字符串,Python 会自动将这两个字符串拼接在一起,所以上面代码的输出结果是:
bytes类型
bytes 类型用来表示一个字节串。
bytes 只负责以字节序列的形式(二进制形式)来存储数据,只是简单地记录内存中的原始数据。如果采用合适的字符编码方式(字符集),字节串可以恢复成字符串;反之亦然。
bytes 类型的数据非常适合在互联网上传输,可以用于网络通信编程,存储图片、音频、视频等二进制格式的文件。
bytes 是 Python 3.x 新增的类型,在 Python 2.x 中是不存在的。
字节串(bytes)和字符串(string)的对比:
- 字符串由若干个字符组成,以字符为单位进行操作;字节串由若干个字节组成,以字节为单位进行操作。
- 字节串和字符串除了操作的数据单元不同之外,它们支持的所有方法都基本相同。
- 字节串和字符串都是不可变序列,不能随意增加和删除数据。
字符串和 bytes 存在着千丝万缕的联系,可以通过字符串来创建 bytes 对象,或者说将字符串转换成 bytes 对象。有以下三种方法可以达到这个目的:
- 如果字符串的内容都是 ASCII 字符,那么直接在字符串前面添加
b
前缀就可以转换成 bytes。- bytes 是一个类,调用它的构造方法,也就是 bytes(),可以将字符串按照指定的字符集转换成 bytes;如果不指定字符集,那么默认采用 UTF-8。
- 字符串本身有一个 encode() 方法,该方法专门用来将字符串按照指定的字符集转换成对应的字节串;如果不指定字符集,那么默认采用 UTF-8。
举例:
#创建bytes类型举例
#通过构造函数创建空 bytes
b1 = bytes()
#通过空字符串创建空 bytes
b2 = b''
#通过b前缀将字符串转换成 bytes
b3 = b'http://c.biancheng.net/python/'
print("b3: ", b3)
print(b3[3])
print(b3[7:22])
#为 bytes() 方法指定字符集
b4 = bytes('C语言中文网8岁了', encoding='UTF-8')
print("b4: ", b4)
#通过 encode() 方法将字符串转换成 bytes
b5 = "C语言中文网8岁了".encode('UTF-8')
print("b5: ", b5)
运行结果:
从运行结果可以发现,对于非 ASCII 字符,print 输出的是它的字符编码值(十六进制形式),而不是字符本身。非 ASCII 字符一般占用两个字节以上的内存,而 bytes 是按照单个字节来处理数据的,所以不能一次处理多个字节。
bytes 类也有一个 decode() 方法,通过该方法可以将 bytes 对象转换为字符串。
在上面基础上添加
#通过 decode() 方法将 bytes 转换成字符串
str1 = b5.decode('UTF-8')
print("str1: ", str1)
输出结果:
str1: C语言中文网8岁了
布尔类型
python使用bool 类型表示真(对)或假(错),真使用 True 来代表;假使用 False 来代表。
True 和 False 是 Python 中的关键字,当作为 Python 代码输入时,一定要注意字母的大小写,否则解释器会报错。
布尔类型可以当做整数来对待,即 True 相当于整数值 1,False 相当于整数值 0。
举例:
print(False+1)
print(True+1)
运行结果为:
注意,这里只是为了说明 True 和 False 对应的整型值,在实际应用中不要这么用。
总的来说,bool 类型就是用于代表某个事情的真(对)或假(错),如果这个事情是正确的,用 True(或 1)代表;如果这个事情是错误的,用 False(或 0)代表。
举例:
print(4>3)
print(5<2)
运行结果为:
输入输出函数
input()函数
input() 是python的内置函数,用于从控制台读取用户输入的内容。input() 函数总是以字符串的形式来处理用户输入的内容,所以用户输入的内容可以包含任何字符。
input() 函数的用法为:
str = input(tipmsg)
说明:
- str 表示一个字符串类型的变量,input 会将读取到的字符串放入 str 中。
- tipmsg 表示提示信息,它会显示在控制台上,告诉用户应该输入什么样的内容;如果不写 tipmsg,就不会有任何提示信息。
举例:
#input函数举例
a = input("Enter a number: ")
b = input("Enter another number: ")
print("aType: ", type(a))
print("bType: ", type(b))
result = a + b
print("resultValue: ", result)
print("resultType: ", type(result))
运行结果示例:
注意:
1每次输入后按下回车键,就表示input() 读取结束了。
2 本例中输入了两个整数,希望计算出它们的和,但是Python 将它们当成了字符串进行了拼接。
我们可以使用 Python 内置函数将字符串转换成想要的类型,比如:
- int(string) 将字符串转换成 int 类型;
- float(string) 将字符串转换成 float 类型;
- bool(string) 将字符串转换成 bool 类型。
修改上面的代码,将用户输入的内容转换成数字:
#修改后input函数举例
a = input("Enter a number: ")
b = input("Enter another number: ")
a = float(a)
b = int(b)
print("aType: ", type(a))
print("bType: ", type(b))
result = a + b
print("resultValue: ", result)
print("resultType: ", type(result))
运行结果:
Python 2.x中的input函数
上面讲解的是 Python 3.x 中 input() 的用法,但是在较老的 Python 2.x 中情况就不一样了。Python 2.x 共提供了两个输入函数,分别是 input() 和 raw_input():
- Python 2.x raw_input() 和 Python 3.x input() 效果是一样的,都只能以字符串的形式读取用户输入的内容。
- Python 2.x input() 看起来有点奇怪,它要求用户输入的内容必须符合 Python 的语法,通常来说只能是整数、小数、复数、字符串等。
- Python 2.x input() 要求用户在输入字符串时必须使用引号包围
修改代码,去掉 print 后面的括号:
#python2.x下的input函数举例
a = input("Enter a number: ")
b = input("Enter another number: ")
print "aType: ", type(a)
print "bType: ", type(b)
result = a + b
print "resultValue: ", result
print "resultType: ", type(result)
在 Python 2.x 下运行该代码,结果为:
Enter a number: 45↙
Enter another number: 100↙
aType: <type 'int'>
bType: <type 'int'>
resultValue: 145
resultType: <type 'int'>
print()函数
print() 函数的详细语法格式如下:
print (value,...,sep='',end='\n',file=sys.stdout,flush=False)
说明:value 参数可以接受任意多个变量或值,因此 print() 函数完全可以输出多个值。
举例
#print函数用法举例
user_name = 'Charlie'
user_age = 8
#同时输出多个变量和字符串
print("读者名:",user_name,"年龄:",user_age)
运行结果为:
从输出结果来看,使用 print() 函数输出多个变量时,print() 函数默认以空格隔开多个变量,如果希望改变默认的分隔符,可通过 sep 参数进行设置。
举例
#print函数同时输出多个变量和字符串,指定分隔符举例
print("读者名:" ,user_name,"年龄:",user_age,sep='|')
运行上面代码,可以看到如下输出结果:
在默认情况下,print() 函数输出之后总会换行,这是因为 print() 函数的 end 参数的默认值是“\n”,如果希望 print() 函数输出之后不会换行,则重设 end 参数即可。
举例:
#print函数设置end 参数,指定输出之后不再换行
print(40,'\t',end="")
print(50,'\t',end="")
print(60,'\t',end="")
运行结果为:
file 参数指定 print() 函数的输出目标,file 参数的默认值为 sys.stdout,该默认值代表了系统标准输出,也就是屏幕,因此 print() 函数默认输出到屏幕。可以通过改变该参数让 print() 函数输出到特定文件中。
举例:
#print函数file参数举例
f = open("demo.txt","w")#打开文件以便写入
print('沧海月明珠有泪',file=f)
print('蓝田日暖玉生烟',file=f)
f.close()
说明:上面程序中,open() 函数用于打开 demo.txt 文件,接连 2 个 print 函数会将这 2 段字符串依次写入此文件,最后调用 close() 函数关闭文件。
print() 函数的 flush 参数用于控制输出缓存,该参数一般保持为 False 即可,这样可以获得较好的性能。
格式化字符串(格式化输出)
print() 函数使用以%
开头的转换说明符对各种类型的数据进行格式化输出,具体请看下表。
转换说明符 | 解释 |
---|---|
%d、%i | 转换为带符号的十进制整数 |
%o | 转换为带符号的八进制整数 |
%x、%X | 转换为带符号的十六进制整数 |
%e | 转化为科学计数法表示的浮点数(e 小写) |
%E | 转化为科学计数法表示的浮点数(E 大写) |
%f、%F | 转化为十进制浮点数 |
%g | 智能选择使用 %f 或 %e 格式 |
%G | 智能选择使用 %F 或 %E 格式 |
%c | 格式化字符及其 ASCII 码 |
%r | 使用 repr() 函数将表达式转换为字符串 |
%s | 使用 str() 函数将表达式转换为字符串 |
说明:转换说明符(Conversion Specifier)只是一个占位符,它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的值代替。
举例:
#格式化字符串举例
age = 8
print("小明已经%d岁了!" %age)
运行结果:
说明:在 print() 函数中,由引号包围的是格式化字符串,它相当于一个字符串模板,可以放置一些转换说明符(占位符)。本例的格式化字符串中包含一个
%d
说明符,它最终会被后面的 age 变量的值所替代。中间的
%
是一个分隔符,它前面是格式化字符串,后面是要输出的表达式。
格式化字符串中也可以包含多个转换说明符,这个时候也得提供多个表达式,用以替换对应的转换说明符;多个表达式必须使用小括号( )
包围起来。
举例:
#格式化字符串举例(多个)
name = "小明"
age = 8
print("%s已经%d岁了。" %(name, age))
运行结果:
指定最小输出宽度
转换说明符 | 解释 |
---|---|
%d、%i | 转换为带符号的十进制整数 |
%o | 转换为带符号的八进制整数 |
%x、%X | 转换为带符号的十六进制整数 |
%e | 转化为科学计数法表示的浮点数(e 小写) |
%E | 转化为科学计数法表示的浮点数(E 大写) |
%f、%F | 转化为十进制浮点数 |
%g | 智能选择使用 %f 或 %e 格式 |
%G | 智能选择使用 %F 或 %E 格式 |
%c | 格式化字符及其 ASCII 码 |
%r | 使用 repr() 函数将表达式转换为字符串 |
%s | 使用 str() 函数将表达式转换为字符串 |
当使用表中的转换说明符时,可以使用下面的格式指定最小输出宽度(至少占用多少个字符的位置)
- %10d 表示输出的整数宽度至少为 10;
- %20s 表示输出的字符串宽度至少为 20。
举例:
#最小输出宽度举例
n = 1234567
print("n(10):%10d." % n)
print("n(5):%5d." % n)
url = "http://c.biancheng.net/python/"
print("url(35):%35s." % url)
print("url(20):%20s." % url)
运行结果:
说明:从运行结果可以发现,对于整数和字符串,当数据的实际宽度小于指定宽度时,会在左侧以空格补齐;当数据的实际宽度大于指定宽度时,会按照数据的实际宽度输出。
当数据的实际宽度足够时,指定的宽度就没有实际意义了。
指定对齐方式
默认情况下,print() 输出的数据总是右对齐的。也就是说,当数据不够宽时,数据总是靠右边输出,而在左边补充空格以达到指定的宽度。Python 允许在最小宽度之前增加一个标志来改变对齐方式,Python 支持的标志如下:
标志 | 说明 |
---|---|
- | 指定左对齐 |
+ | 表示输出的数字总要带着符号;正数带+ ,负数带- 。 |
0 | 表示宽度不足时补充 0,而不是补充空格。 |
说明:
- 对于整数,指定左对齐时,在右边补 0 是没有效果的,因为这样会改变整数的值。
- 对于小数,以上三个标志可以同时存在。
- 对于字符串,只能使用
-
标志,因为符号对于字符串没有意义,而补 0 会改变字符串的值。
举例:
#指定对齐方式举例
n = 123456
# %09d 表示最小宽度为9,左边补0
print("n(09):%09d" % n)
# %+9d 表示最小宽度为9,带上符号
print("n(+9):%+9d" % n)
f = 140.5
# %-+010f 表示最小宽度为10,左对齐,带上符号
print("f(-+0):%-+010f" % f)
s = "Hello"
# %-10s 表示最小宽度为10,左对齐
print("s(-10):%-10s." % s)
运行结果为:
指定小数精度
对于小数(浮点数),print() 还允许指定小数点后的数字位数,也即指定小数的输出精度。
精度值需要放在最小宽度之后,中间用点号.
隔开;也可以不写最小宽度,只写精度。具体格式如下:
%m.nf
%.nf
m 表示最小宽度,n 表示输出精度,.
是必须存在的。
举例:
#print函数指定小数精度举例
f = 3.141592653
# 最小宽度为8,小数点后保留3位
print("%8.3f" % f)
# 最小宽度为8,小数点后保留3位,左边补0
print("%08.3f" % f)
# 最小宽度为8,小数点后保留3位,左边补0,带符号
print("%+08.3f" % f)
运行结果:
转义字符及用法
简单来说,转义字符就是以反斜杠
\
开头的字符。
ASCII 编码为每个字符都分配了唯一的编号,称为编码值。在python中,一个 ASCII 字符除了可以用它的实体(也就是真正的字符)表示,还可以用它的编码值表示。这种使用编码值来间接地表示字符的方式称为转义字符(Escape Character)。
转义字符以\0
或者\x
开头,以\0
开头表示后跟八进制形式的编码值,以\x
开头表示后跟十六进制形式的编码值,Python 中的转义字符只能使用八进制或者十六进制。具体格式如下:
\0dd
\xhh
dd 表示八进制数字,hh 表示十六进制数字。
说明:ASCII 编码共收录了 128 个字符,
\0
和\x
后面最多只能跟两位数字,所以八进制形式\0
并不能表示所有的 ASCII 字符,只有十六进制形式\x
才能表示所有 ASCII 字符。
字符 1、2、3、x、y、z 对应的 ASCII 码的八进制形式分别是 61、62、63、170、171、172,十六进制形式分别是 31、32、33、78、79、7A。下面的例子演示了转义字符的用法:
#转义字符及其用法举例
str1 = "Oct: \061\062\063"
str2 = "Hex: \x31\x32\x33\x78\x79\x7A"
print(str1)
print(str2)
运行结果:
注意,使用八进制形式的转义字符没法表示 xyz,因为它们的编码值转换成八进制以后有三位。
对于 ASCII 编码,0~31(十进制)范围内的字符为控制字符,它们都是看不见的,不能在显示器上显示,甚至无法从键盘输入,只能用转义字符的形式来表示。
转义字符 说明
- \n 换行符,将光标位置移到下一行开头。
- \r 回车符,将光标位置移到本行开头。
- \t 水平制表符,也即 Tab 键,一般相当于四个空格。
- \a 蜂鸣器响铃。
- \b 退格(Backspace),将光标位置移到前一列。
- \\ 反斜线 \' 单引号 \" 双引号 \ 在字符串行尾的续行符,即一行未完,转到下一行继续写。
转义字符在书写形式上由多个字符组成,但 Python 将它们看作是一个整体,表示一个字符。
举例:
#转义字符综合用法举例
#使用\t排版
str1 = '网站\t\t域名\t\t\t年龄\t\t价值'
str2 = 'C语言中文网\tc.biancheng.net\t\t8\t\t500W'
str3 = '百度\t\twww.baidu.com\t\t20\t\t500000W'
print(str1)
print(str2)
print(str3)
print("--------------------------------------------------")
# \n在输出时换行,\在书写字符串时换行
info = "Python教程:http://c.biancheng.net/python/\n\
C++教程:http://c.biancheng.net/cplus/\n\
Linux教程:http://c.biancheng.net/linux_tutorial/"
print(info)
运行结果:
数据类型转换函数
python在一些特定场景中,仍然需要用到类型转换。
比如说,我们想通过使用 print() 函数输出信息“您的身高:”以及浮点类型 height 的值,如果在交互式解释器中执行如下代码:
>>> height = 70.0
>>> print("您的身高"+height)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
print("您的身高"+height)
TypeError: must be str, not float
这是错误的,解释器提示我们字符串和浮点类型变量不能直接相连,需要提前将浮点类型变量 height 转换为字符串才可以。
Python 提供了多种可实现数据类型转换的函数,如下表所示。
函 数 | 作 用 |
---|---|
int(x) | 将 x 转换成整数类型 |
float(x) | 将 x 转换成浮点数类型 |
complex(real,[,imag]) | 创建一个复数 |
str(x) | 将 x 转换为字符串 |
repr(x) | 将 x 转换为表达式字符串 |
eval(str) | 计算在字符串中的有效 Python 表达式,并返回一个对象 |
chr(x) | 将整数 x 转换为一个字符 |
ord(x) | 将一个字符 x 转换为它对应的整数值 |
hex(x) | 将一个整数 x 转换为一个十六进制字符串 |
oct(x) | 将一个整数 x 转换为一个八进制的字符串 |
需要注意的是,在使用类型转换函数时,提供给它的数据必须是有意义的。例如,int() 函数无法将一个非数字字符串转换成整数
>>> int("123") #转换成功
123
>>> int("123个") #转换失败
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
int("123个")
ValueError: invalid literal for int() with base 10: '123个'
>>>
总结
本文主要介绍了python中的变量,数据类型,输入输出函数,格式化字符串,转义字符以及数据类型转换。变量包括变量的定义,赋值和使用。数据类型包括整型,浮点型,字符串,复数,bytes类型以及布尔型。输入输出函数包括input()函数,print()函数。格式化字符串包括指定最小输出宽度,指定对齐方式和指定小数精度。转义字符包括其定义及用法,数据类型转换包括各种数据类型装换的函数。