目录
五:python数据类型
5.1数字类型(int&float):
整数(int):
Python 支持任意大小的整数四则运算,并且支持乘方计算。
示例:
print(1 + 1)
# 加法运算,输出 2
print(1 - 1)
# 减法运算,输出 0
print(1 * 2)
# 乘法运算,输出 2
print(2 / 1)
# 除法运算,输出 2.0
print(3 % 2)
# 求余数运算,输出 1
# 如果不能整除,Python 会输出小数,使用 // 符号,可以向下取整
12 // 3.2 # 舍去0.75 , 输出 3.0
# 使用 `**` 符号计算乘方
3 ** 4
# 3 ** 4 = 3 * 3 * 3 * 3 输出 81
使用千分位表示数字
为了便于阅读Python还支持使用 _
下划线分割数字
100_000_2 与 1000002 等效
科学计数法
Python 支持使用 E (大小写均可) 符号表示科学计数法
示例:
print(1e+4 == 10000)
# 输出 True
浮点类型 (float):
和整数相同,Python 全面支持浮点数运算
混合类型运算数的运算会把整数转换为浮点数,只要运算中有任何一个元素是小数,运算结果都会包含小数点
示例:
print(4 * 3.0)
# 输出 12.0
5.2字符串类型 (str)
字符串是Python的基本类型之一
- 字符串有多种表现形式,包含在单引号中间:
'string'
,或者包含在双引号之间:"string"
- 反斜杠 \ 用于转义
示例:
# 用双引号标记的字符串
print("字符串")
# 用单引号标记的字符串
print('字符串')
Python中的转义符 \
一些特殊的符号需要转义才能正常输出
# 在一个双引号标记的字符串中,如果包含双引号,需要用 \ 符转义
print("字\"符串")
# 在字符串中包含 tab 键、换行、响铃符号需要转义
print("打印\n换行符")
print("打印\ttab符号")
print("打印\a响铃符,电脑会发出 '哔' 的响声")
转义符号表 (Escape sequences)
\a | 警报符 | \v | 垂直 tab |
\b | 后空格 | ' | 单引号 |
\f | 表单馈送 | " | 双引号 |
\n | 新起一行 | / | 反斜线 |
\r | 回车符 | ? | 问号 |
\t | 水平 tab |
字符串操作:
字符串连接:
# 使用空格分割的多个字符串Python解释器会自动连接
print("a" "b" "c")
# 输出 abc,使用控制连接字符串只能作用于字符串的字面值,不能用于变量或表达式
# 我们也可以用 + 号连接
print("a" + "b" + "c")
print("{} {}" "a" "b")
重复字符串:
print("=" * 3)
# 会输出三个 =
字符串还支持索引操作:
str = "ABCD"
# 注:所有编程语言的索引都以0开始
print(str[0]) # 输出 A
print(str[1]) # 输出 B
print(str[3]) # 输出 D
5.3空值类型 (NoneType)
空值类型的唯一值是 None
示例:
# 我们定一个一个函数
def func():
"""这个函数的文档信息"""
# """这个函数的文档信息"""
print("这是一个函数")
print(func.__doc__)
# 打印函数文档信息, 输出 "这个函数的文档信息",删掉文档信息后,
# 在使用 __doc__ 打印将会输出 None,请在代码中尝试
5.4布尔值类型(bool)
布尔值类型有两个值,True
真 和 False
假,当设定满足条件是 得到 True
值,否则将得到 False
值
示例:
print(1 == 1) # 输出 True
print("abc" == "abc") # 输出 True
print(1 == 2) # 输出 False
True、False、None 都术语Python内置常量,即不可修改的值
Python 还有一些内置常量,我就不一一说了,哈哈哈哈哈哈哈。
六:Python 数据类型转换
先看几个问题:
- 字符串 “10” 如何转换为整数 10
- 整数 10 如何转换为 浮点数 10.0
- 布尔类的 True 值转为整数类型会是多少
- 整数 -1 转换为布尔值会是 True 吗
为什么要进行类型转换?
使用Python编程时,经常会遇到 非预期类型的数据,此时如果直接使用可能会得到非预期的计算结果
示例:
# 首先定一个一个函数
def getPower(n: int):
print(n ** n)
getPower(3) # 输出 27
getPower("3") # 将函数的参数改为字符串 "3",就会报错,字符串不能直接进行乘方计算
由于Python中不能强制限制变量的类型(可以自主判断来限制),所以需要转换数据类型来的到预期的类型数据
我们重新修改 getPower 函数:
# 首先定一个一个函数
def getPower(n: int):
n = int(n) # 使用 int() 函数将输入的参数强制转换为整数
print(n ** n)
getPower("3") # 此时 参数 3 和 "3" 得到的结果相同,输出 27
如果系统无法正确推到出类型解释器则会报错
print(int("a")) # 显然字符串 a 无法推到出具体的 整数值,运行代码将会得到一个错误
# ValueError: invalid literal for int() with base 10: 'a'
显式的类型转换
顾名思义,开发者主动进行的类型转换称之为 “显式类型转换”
包括上面使用的 int() 函数,Python进行类型转换的内置函数的其他示例:
print(int("10")) # 将 字符串 "10" 转换为整数 10
print(str(10)) # 将 整数 10 转换为 字符串 "10"
print(float(10)) # 将 整数 10 转换为 浮点数 10.0
print(str(True)) # 将 布尔值转换为字符串 得到字符串 "True"
print(int(True)) # 将 布尔值转换为字符串 得到字符串 "True"
print(bool(1)) # 将 整数 1 转换为 True
隐式的类型转换
在整数和浮点数混合运算中,Python解释器会自动转换类型,将整数向浮点数转换以保持数值精度(有浮点数参与了就OK)
示例:
print(10 + 1.0) # 输出 11.0
七:Python 输入/输出 (I/O)
7.1输入数据
以交互方式输入
使用 input()
函数从终端接受用户输入:
# -*- coding: utf-8 -*-
input_word = input("键入任何字符,然后回车:\n")
if len(input_word) != 0:
# 输入任何字符然后输出字符和类型信息
# 你会使用input输入的任何数据都会是字符串
print(input_word + " is " + type(input_word).__name__ + " type")
else:
print("input is empty")
从文件中读取数据作为输入
# 示例文件:code/introduction/python-io.py
io = open("io.txt", "r")
print(io.readlines())
7.2输出
简单输出
最简单的输出就是使用 print()
函数打印,print 可以传入多个数据(参数)一起打印
示例:
print("字符串")
# 输出 字符串
print("字符串", ["a", "b", "c"], True)
# 输出: 字符串 ['a', 'b', 'c'] True
复杂的格式化输出
year = 2016
event = 'Referendum'
print(f"Results of the {year} {event}")
# 在字符串之前加上 f 表示需要解析字符串中的变量,变量使用 {变量名} 占位
# 输出: Results of the 2016 Referendum
# 在 f"" 中还可以进行数学运算 和 调用函数
print( f"3 * 3 = {3 * 3}" )
# 输出 9
print( f"3 ** 3 = {pow(3, 3)}" )
# 输出 27
在 f
字符串中 '、"
、"""
单引号、双引号和三引号是等效的
示例:
name = "Hello"
print( f'{name}' )
print( f"{name}" )
print( f"""{name}""" )
还可以使用字符串的 format() 方法格式化字符串(讲真的一个小白我感觉这个方法好迷,用途在哪里呢?希望我以后不要遇见它)
示例:
# 按顺序格式化字符串
print(str("{} {} {} {}").format(1,2,3,4))
# 输出 1 2 3 4
# 按位置格式化字符串
print(str("{3} {2} {1} {0}").format(1,2,3,4))
# 输出 4 3 2 1
# 按位置格式化字符串
string: str = "{3} {2} {1} {0}"
print(string.format(1,2,3,4))
# 输出 4 3 2 1
数字格式化
下表显示了使用 Python 的 str.格式格式()格式数字的各种方法,包括浮动格式和整数格式的示例。
要运行示例,请使用:print(“FORMAT”.format(NUMBER));
要获得第一个示例的输出,将浮子格式化为两个小数位,您将运行:
print("{:.2f}".format(3.1415926));
数 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 格式浮动 2 小数位 |
3.1415926 | {:+.2f} | +3.14 | 格式浮动 2 小数点的地方与标志 |
-1 | {:+.2f} | -1.00 | 格式浮动 2 小数点的地方与标志 |
2.71828 | {:.0f} | 3 | 格式浮动,无小数位 |
5 | {:0>2d} | 05 | 垫号为零(左衬垫,宽度 2) |
5 | {:x<4d} | 5xxx | 带x的垫号(右衬垫,宽度4) |
10 | {:x<4d} | 10xx | 带x的垫号(右衬垫,宽度4) |
1000000 | {:,} | 1,000,000 | 带逗号分离器的数字格式 |
0.25 | {:.2%} | 25.00% | 格式百分比 |
1000000000 | {:.2e} | 1.00e+09 | 指数符号 |
13 | {:10d} | 13 | 右对齐(默认值,宽度 10) |
13 | {:<10d} | 13 | 左对齐(宽度10) |
13 | {:^10d} | 13 | 中心对齐(宽度10) |
转换数字进制
print("{0:d}:十进制 - {0:x}:十六进制 - {0:o}:八进制 - {0:b}:二进制 ".format(12))
# 输出 12:十进制 - c:十六进制 - 14:八进制 - 1100:二进制
八:Python 中的运算
Python的内置类型有数字、序列、映射、类、实例和异常。
有一部分类型可以进行添加、移除或重排等运算,所有对象都可以比较是否相等、检测逻辑值,以及转换为字符串。
8.1逻辑值检测
and
or
not
这些属于布尔运算,按优先级升序排列:
运算 | 结果 | 注释 |
---|---|---|
x or y | if x is false, then y, else x | (1) |
x and y | if x is false, then x, else y | (2) |
not x | if x is false, then True , else False | (3) |
注释:
- 这是个短路运算符,因此只有在第一个参数为假值时才会对第二个参数求值。
- 这是个短路运算符,因此只有在第一个参数为真值时才会对第二个参数求值。
not
的优先级比非布尔运算符低,因此not a == b
会被解读为not (a == b)
而a == not b
会引发语法错误。
8.2比较操作
在 Python 中有八种比较运算符。 它们的优先级相同(比布尔运算的优先级高)。 比较运算可以任意串连;示例,x < y <= z
等价于 x < y and y <= z
,前者的不同之处在于 y 只被求值一次(但在两种情况下当 x < y
结果为假值时 z 都不会被求值)。
此表格汇总了比较运算:
运算 | 含义 |
---|---|
< | 严格小于 |
<= | 小于或等于 |
> | 严格大于 |
>= | 大于或等于 |
== | 等于 |
!= | 不等于 |
is | 对象标识 |
is not | 否定的对象标识 |
除不同的数字类型外,不同类型的对象不能进行相等比较。==
运算符总有定义,但对于某些对象类型(示例,类对象),它等于 is
。其他 <
、<=
、>
和 >=
运算符仅在有意义的地方定义。示例,当参与比较的参数之一为复数时,它们会抛出 TypeError
异常。
8.3数字类型运算
int
float
complex
Python存在三种不同的数字类型: 整数, 浮点数 和复数。 此外,布尔值属于整数的子类型。 整数具有无限的精度。 浮点数通常使用 C 中的 double
来实现;有关你的程序运行所在机器上浮点数的精度和内部表示法可在 sys.float_info
中查看。 复数包含实部和虚部,分别以一个浮点数表示。 要从一个复数 z 中提取这两个部分,可使用 z.real
和 z.imag
。(标准库包含附加的数字类型,如表示有理数的 fractions.Fraction
以及以用户定制精度表示浮点数的 decimal.Decimal
。)
数字是由数字字面值或内置函数与运算符的结果来创建的。 不带修饰的整数字面值(包括十六进制、八进制和二进制数)会生成整数。 包含小数点或幂运算符的数字字面值会生成浮点数。 在数字字面值末尾加上 'j'
或 'J'
会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚部的复数。
Python 完全支持混合运算:当一个二元算术运算符的操作数有不同数值类型时,"较窄"类型的操作数会拓宽到另一个操作数的类型,其中整数比浮点数窄,浮点数比复数窄。不同类型的数字之间的比较,同比较这些数字的精确值一样。[2]
构造函数 int()
、 float()
和 complex()
可以用来构造特定类型的数字。
所有数字类型(复数除外)都支持下列运算(有关运算优先级,请参阅: 运算符优先级 ):
运算 | 结果 | 注释 | 完整文档 | |||
---|---|---|---|---|---|---|
x + y | x 和 y 的和 | |||||
x - y | x 和 y 的差 | |||||
x * y | x 和 y 的乘积 | |||||
x / y | x 和 y 的商 | |||||
x // y | x 和 y 的商数 | (1) | ||||
x % y | x / y 的余数 | (2) | ||||
-x | x 取反 | |||||
+x | x 不变 | |||||
abs(x) | x 的绝对值或大小 | abs() | ||||
int(x) | 将 x 转换为整数 | (3)(6) | int() | |||
float(x) | 将 x 转换为浮点数 | (4)(6) | float() | |||
complex(re, im) | 一个带有实部 re 和虚部 im 的复数。im 默认为0。 | (6) | complex() | |||
|
| |||||
divmod(x, y) | (x // y, x % y) | (2) | divmod() | |||
pow(x, y) | x 的 y 次幂 | (5) | pow() | |||
|
|
|
注释:
-
也称为整数除法。 结果值是一个整数,但结果的类型不一定是 int。 运算结果总是向负无穷的方向舍入:
1//2
为0
,(-1)//2
为-1
,1//(-2)
为-1
而(-1)//(-2)
为0
。 -
不可用于复数。 而应在适当条件下使用
abs()
转换为浮点数。 -
从浮点数转换为整数会被舍入或是像在 C 语言中一样被截断;请参阅
math.floor()
和math.ceil()
函数查看转换的完整定义。 -
float 也接受字符串 “nan” 和附带可选前缀 “+” 或 “-” 的 “inf” 分别表示非数字 (NaN) 以及正或负无穷。
-
Python 将
pow(0, 0)
和0 ** 0
定义为1
,这是编程语言的普遍做法。 -
接受的数字字面值包括数码
0
到9
或任何等效的 Unicode 字符(具有Nd
特征属性的代码点)。请参阅 https://www.unicode.org/Public/13.0.0/ucd/extracted/DerivedNumericType.txt 查看具有
Nd
特征属性的代码点的完整列表。
所有 numbers.Real
类型 (int
和 float
) 还包括下列运算:
运算 | 结果 |
---|---|
math.trunc(x) | x 截断为 Integral |
round(x[, n\]) | x 舍入到 n 位小数,半数值会舍入到偶数。 如果省略 n,则默认为 0。 |
math.floor(x) | <= x 的最大 Integral |
math.ceil(x) | >= x 的最小 Integral |
8.4整数类型的按位运算
按位运算只对整数有意义。 计算按位运算的结果,就相当于使用无穷多个二进制符号位对二的补码执行操作。
二进制按位运算的优先级全都低于数字运算,但又高于比较运算;一元运算 ~
具有与其他一元算术运算 (+
and -
) 相同的优先级。
此表格是以优先级升序排序的按位运算列表:
运算 | 结果 | 注释 |
---|---|---|
`x | y` | x 和 y 按位 或 |
x ^ y | x 和 y 按位 异或 | (4) |
x & y | x 和 y 按位 与 | (4) |
x << n | x 左移 n 位 | (1)(2) |
x >> n | x 右移 n 位 | (1)(3) |
~x | x 逐位取反 |
注释:
- 负的移位数是非法的,会导致引发
ValueError
。 - 左移 n 位等价于乘以
pow(2, n)
。 - 右移 n 位等价于除以
pow(2, n)
,作向下取整除法。 - 使用带有至少一个额外符号扩展位的有限个二进制补码表示(有效位宽度为
1 + max(x.bit_length(), y.bit_length())
或以上)执行这些计算就足以获得相当于有无数个符号位时的同样结果。
整数和浮点数运算还包括一些附加方法,以及整数的哈希运算,请参考 Python 标准库
8.5成员检测运算
有两个成员检测符号:
- in 如果对象在序列中返回 True
- not in 如果对象不在序列中返回 True
成员检测主要作用于 列表 (list)、元祖 (tuple)、映射 (dict)。
关于列表 (list)、元祖 (tuple)、映射 (dict)将在 数据类型 一章介绍
示例:
# 列表成员检测
print(2 in [1,2,3]) # 输出 True
print(2 not in [1,3]) # 输出 True
# 元祖成员检测
print((2) in (1,2,3)) # 输出 True
print((2) not in (1,3)) # 输出 True
# 映射成员检测
print("one" in {"one": 1, "two": 2}) # 输出 True
print("three" not in {"one": 1, "two": 2}) # 输出 True
小结: