一、 数据类型转换:
在Python中,数据类型转换是编程中常见的操作,它允许你将数据从一种类型转换为另一种类型。这种转换可以是隐式的,也可以是显式的。
(1)隐式类型转换:
隐式类型转换,也称为自动类型转换,是指Python解释器在执行某些操作时自动进行的数据类型转换。这种转换通常发生在不同类型的数据进行数学运算时。Python会根据需要自动将数据类型转换为更通用的类型,以确保操作的有效性和数据的完整性。
- 例如,当你将一个整数与一个浮点数相加时,整数会自动转换为浮点数,以保持精度:
num_int = 123
num_flo = 1.23
num_new = num_int + num_flo # num_int 被自动转换为浮点数
print(num_new) # 输出: 124.23
(2)显式类型转换:
显式类型转换是指程序员明确指定要将数据转换为哪种类型。这通常通过调用特定的类型转换函数来实现。Python提供了多种内置函数来执行显式类型转换,如int()
, float()
, str()
, list()
, tuple()
, set()
, dict()
等。
int(x)
: 将x转换为整数。float(x)
: 将x转换为浮点数。str(x)
: 将x转换为字符串。list(x)
: 将x转换为列表。tuple(x)
: 将x转换为元组。set(x)
: 将x转换为集合。dict(x)
: 将x转换为字典。- 例如,你可以将一个浮点数显式转换为整数:
num_flo = 3.14
num_int = int(num_flo) # 显式转换为整数
print(num_int) # 输出: 3
- 或者将一个字符串转换为浮点数:
num_str = "3.14"
num_flo = float(num_str) # 显式转换为浮点数
print(num_flo) # 输出: 3.14
(3)内置函数执行转换 :
int([x,base]) | 将x转换为一个整数 |
float(x) | 将x转换到一个浮点数 |
complex(real,[imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个 (key, value)元组序列。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
二、注释:
在Python中,注释是编写代码时用来解释代码的文字,它们不会被Python解释器执行。注释对于提高代码的可读性和维护性非常重要。Python支持两种类型的注释:单行注释和多行注释。
(1)单行注释:
- 单行注释是最常见的注释方式,它以井号(
#
)开头,直到该行结束的所有内容都会被视为注释。
# 这是一个单行注释
print("Hello, World!") # 这也是一个单行注释
(2)多行注释:
- 多行注释通常用于添加更详细的说明,或者在代码中暂时禁用多行代码。在Python中,多行注释可以通过三个连续的单引号(
'''
)或三个连续的双引号("""
)来实现。 -
使用三个单引号的多行注释:
'''
这是一个多行注释
它可以跨越多行
这些内容都不会被执行
'''
print("Hello, World!")
-
使用三个双引号的多行注释:
"""
这是一个多行注释
它也可以跨越多行
这些内容同样不会被执行
"""
print("Hello, World!")
(3)注意事项:
- 多行注释实际上是字符串的一种形式,因此它们可以被赋值给变量或用于其他字符串操作。只有当它们独立于代码存在时,才会被视为注释。
- 多行注释不能嵌套。尝试嵌套多行注释会导致语法错误。
- 单行注释可以嵌套在多行注释中,但通常不推荐这样做,因为它可能会使代码难以阅读。
(4)嵌套多行注释错误:
'''
这是外部的多行注释
可以包含一些描述性的内容
'''
这是尝试嵌套的多行注释
会导致语法错误
'''
'''
# 这段代码会导致语法错误
(5)推荐做法
- 为了保持代码的清晰和可维护性,建议使用单行注释来添加简短的说明,而将多行注释用于添加更详细的描述或在代码中暂时禁用代码块。避免在注释中使用嵌套结构,以减少混淆和潜在的错误。
三、运算符:
在Python中,运算符用于执行数学、逻辑、赋值等操作。
(1)算术运算符:
+ | 加 - 两个对象相加 |
- | 减 - 得到负数或是一个数减去另一个数 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 |
/ | 除 - x 除以 y |
% | 取模 - 返回除法的余数 |
** | 幂 - 返回x的y次幂 |
// | 取整除 - 往小的方向取整数 |
(2)比较(关系)运算符:
== | 等于 - 比较对象是否相等 |
!= | 不等于 - 比较两个对象是否不相等 |
> | 大于 - 返回x是否大于y |
< | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 |
>= | 大于等于 - 返回x是否大于等于y。 |
<= | 小于等于 - 返回x是否小于等于y。 |
(3)赋值运算符:
= | 简单的赋值运算符 |
+= | 加法赋值运算符 |
-= | 减法赋值运算符 |
*= | 乘法赋值运算符 |
/= | 除法赋值运算符 |
%= | 取模赋值运算符 |
**= | 幂赋值运算符 |
//= | 取整除赋值运算符 |
:= | 海象运算符,这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。 Python3.8 版本新增运算符。 |
- 海象运算符的使用:
# 传统写法
n = 10
if n > 5:
print(n)
# 使用海象运算符
if (n := 10) > 5:
print(n)
(4)逻辑运算符:
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。 |
or | x or y | 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 |
(5)位运算符:
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 |
>> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 |
(6)成员运算符:
n | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
(7)身份运算符:
-
is is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False is not is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(x) != id(y)。如果引用的不是同一个对象则返回结果 True,否则返回 False。
(8)运算符优先级:
以下表格列出了从最高到最低优先级的所有运算符, 相同单元格内的运算符具有相同优先级。 运算符均指二元运算,除非特别指出。 相同单元格内的运算符从左至右分组(除了幂运算是从右至左分组):
| 圆括号的表达式 |
| 读取,切片,调用,属性引用 |
await x | await 表达式 |
| 乘方(指数) |
| 正,负,按位非 NOT |
| 乘,矩阵乘,除,整除,取余 |
| 加和减 |
| 移位 |
| 按位与 AND |
| 按位异或 XOR |
| 按位或 OR |
| 比较运算,包括成员检测和标识号检测 |
| 逻辑非 NOT |
| 逻辑与 AND |
| 逻辑或 OR |
| 条件表达式 |
| lambda 表达式 |
| 赋值表达式 |
- 注意:Python3 已不支持 <> 运算符,可以使用 != 代替,如果你一定要使用这种比较运算符,可以使用以下的方式:
>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
True
(9)代码示例:
# 算术运算符
a = 10
b = 20
print(a + b) # 输出 30
print(a - b) # 输出 -10
print(a * b) # 输出 200
print(a / b) # 输出 0.5
print(a % b) # 输出 10
print(a ** b) # 输出 10**20
print(a // b) # 输出 0
# 比较运算符
print(a == b) # 输出 False
print(a != b) # 输出 True
print(a > b) # 输出 False
print(a < b) # 输出 True
print(a >= b) # 输出 False
print(a <= b) # 输出 True
# 赋值运算符
c = 0
c += a # 等同于 c = c + a
print(c) # 输出 10
c -= b
print(c) # 输出 -10
c *= a
print(c) # 输出 -100
c /= b
print(c) # 输出 -0.5
# 逻辑运算符
print(a and b) # 输出 20
print(a or b) # 输出 10
print(not a) # 输出 False
# 位运算符
x = 12 # 1100
y = 9 # 1001
print(x & y) # 输出 8 (1000)
print(x | y) # 输出 13 (1101)
print(x ^ y) # 输出 5 (0101)
print(~x) # 输出 -13 (二进制补码表示)
print(x << 2) # 输出 48 (11000)
print(x >> 2) # 输出 3 (0011)
# 成员运算符
print('a' in 'abc') # 输出 True
print('b' not in 'abc') # 输出 False
# 身份运算符
x = [1, 2, 3]
y = [1, 2, 3]
print(x is y) # 输出 False
print(x is not y) # 输出 True
# 运算符优先级
print(a + b * c) # 先乘法后加法,输出 50
print((a + b) * c) # 先加法后乘法,输出 500
四、 Python3 数字(Number):
在Python中,数字是内置的数据类型,用于表示整数、浮点数、复数等数值。Python的数字类型非常灵活,支持多种数值操作和转换。
(1)Python3数字类型:
- 整型(int):表示正或负整数,没有大小限制。
- 浮点型(float):表示带有小数部分的数,可以使用科学计数法表示。
- 复数(complex):由实数部分和虚数部分组成。
(2)数字的表示:
- 十六进制:以
0x
或0X
开头,如0xA0F
表示十六进制数。 - 八进制:以
0o
或0O
开头,如0o37
表示八进制数。
(3)数字类型转换:
int(x)
:将x
转换为整数。float(x)
:将x
转换为浮点数。complex(x)
:将x
转换为复数,虚数部分为0。complex(x, y)
:将x
和y
转换为复数,x
为实数部分,y
为虚数部分。
(4)数字运算:
- Python支持基本的算术运算,如加、减、乘、除、取模、幂运算等。整数除法使用
//
运算符,返回不大于结果的最大整数。使用%
运算符可以得到除法的余数。
(5)数学函数:
- Python的
math
模块提供了丰富的数学函数,如绝对值、三角函数、对数、幂函数等。使用这些函数前需要导入math
模块。
-
绝对值
math.fabs(x)
: 返回x的浮点数形式的绝对值。
-
幂函数
math.pow(x, y)
: 返回x的y次幂。math.sqrt(x)
: 返回x的平方根。
-
对数函数
math.log(x[, base])
: 返回x的自然对数(底数为e),如果指定了base,则返回以base为底的对数。math.log10(x)
: 返回x的以10为底的对数。
-
三角函数
math.sin(x)
: 返回x的正弦值,x是弧度。math.cos(x)
: 返回x的余弦值,x是弧度。math.tan(x)
: 返回x的正切值,x是弧度。
-
反三角函数
math.asin(x)
: 返回x的反正弦值,结果的单位是弧度。math.acos(x)
: 返回x的反余弦值,结果的单位是弧度。math.atan(x)
: 返回x的反正切值,结果的单位是弧度。math.atan2(y, x)
: 返回从原点到点(x, y)的反正切值,结果的单位是弧度。
-
角度与弧度转换
math.degrees(x)
: 将弧度x转换为角度。math.radians(x)
: 将角度x转换为弧度。
-
最大值和最小值
math.ceil(x)
: 返回大于或等于x的最小整数。math.floor(x)
: 返回小于或等于x的最大整数。math.trunc(x)
: 截去x的小数部分,返回整数部分。
-
其他函数
math.hypot(x, y)
: 计算直角三角形的斜边长度,即sqrt(x*x + y*y)
。math.copysign(x, y)
: 返回x的绝对值,但符号与y相同。math.degrees(x)
: 将弧度转换为角度。math.radians(x)
: 将角度转换为弧度。
-
数学常量
math.pi
: 圆周率π。math.e
: 自然对数的底数e。
import math
# 计算绝对值
print(math.fabs(-10)) # 输出 10.0
# 计算幂
print(math.pow(2, 3)) # 输出 8
print(math.sqrt(16)) # 输出 4.0
# 计算对数
print(math.log(10)) # 输出自然对数
print(math.log10(100)) # 输出 2.0
# 计算三角函数
print(math.sin(math.pi / 2)) # 输出 1.0
print(math.cos(0)) # 输出 1.0
# 计算反三角函数
print(math.asin(1)) # 输出 pi/2
print(math.atan(1)) # 输出 pi/4
# 角度与弧度转换
print(math.degrees(math.pi / 2)) # 输出 90.0
print(math.radians(180)) # 输出 pi
# 最大值和最小值
print(math.ceil(4.7)) # 输出 5
print(math.floor(4.7)) # 输出 4
# 其他函数
print(math.hypot(3, 4)) # 输出 5.0
# 数学常量
print(math.pi) # 输出 π
print(math.e) # 输出 e
(6)随机数函数:
- Python的
random
模块提供了生成随机数的函数,如随机选择、随机排列、生成指定范围内的随机数等。
(7)三角函数和数学常量:
- Python的
math
模块也包括了常用的三角函数和数学常量,如pi
和e
。
-
math.sin(x)
- 返回x的正弦值。x的单位是弧度。 -
math.cos(x)
- 返回x的余弦值。x的单位是弧度。 -
math.tan(x)
- 返回x的正切值。x的单位是弧度。 -
math.asin(x)
- 返回x的反正弦值。x的值域应该在[-1, 1]之间,返回值的单位是弧度。 -
math.acos(x)
- 返回x的反余弦值。x的值域应该在[-1, 1]之间,返回值的单位是弧度。 -
math.atan(x)
- 返回x的反正切值。返回值的单位是弧度。 -
math.atan2(y, x)
- 返回给定的Y和X坐标值的反正切值。与math.atan(y/x)
不同,它会考虑Y和X的符号以决定正确的象限。 -
math.radians(x)
- 将角度x转换为弧度。 -
math.degrees(x)
- 将弧度x转换为角度。
import math
# 计算sin(pi/2)
print(math.sin(math.pi / 2)) # 输出接近于 1.0
# 计算cos(pi)
print(math.cos(math.pi)) # 输出接近于 -1.0
# 计算tan(0)
print(math.tan(0)) # 输出 0
# 计算asin(1)
print(math.asin(1)) # 输出 pi/2
# 计算acos(-1)
print(math.acos(-1)) # 输出 3*pi/2
# 计算atan(1)
print(math.atan(1)) # 输出 pi/4
# 使用atan2确定象限
print(math.atan2(1, 1)) # 输出 pi/4
print(math.atan2(-1, -1)) # 输出 3*pi/4
# 角度转弧度
print(math.radians(180)) # 输出 pi
# 弧度转角度
print(math.degrees(math.pi)) # 输出 180
(8)示例代码:
import math
import random
# 整数
var1 = 1
var2 = 10
# 浮点数
float_num = 3.14
# 复数
complex_num = 3 + 4j
# 十六进制和八进制
hex_num = 0xA0F
oct_num = 0o37
# 整数运算
print(10 + 20) # 输出 30
print(100 - 15) # 输出 85
print(50 * 6) # 输出 300
print(8 / 5) # 输出 1.6
print(17 // 3) # 输出 5
print(17 % 3) # 输出 2
# 幂运算
print(5 ** 2) # 输出 25
# 绝对值和三角函数
print(abs(-10)) # 输出 10
print(math.cos(math.pi / 2)) # 输出 0.0
# 随机数
print(random.randint(1, 10)) # 输出 1 到 10 之间的随机整数
# 数学常量
print(math.pi) # 输出 π
print(math.e) # 输出 e
五、字符串:
在Python中,字符串是不可变的数据类型,这意味着一旦创建了字符串,就不能更改它。字符串可以用单引号'
、双引号"
或三引号'''
或"""
来创建。
(1)字符串的创建:
var1 = 'Hello World!'
var2 = "Runoob"
var3 = """This is a
multi-line string"""
(2)字符串的访问:
- Python中的字符串不能像列表那样直接访问单独的字符,因为字符串是不可变的。但是可以通过索引和切片来访问字符串中的部分内容。
(3)字符串的更新:
- 虽然字符串不可变,但可以通过拼接和格式化来创建新的字符串。
(4)字符串的转义字符:
- 在字符串中,特殊字符可以用反斜杠
\
来转义。
(5)字符串的运算符:
+
:连接两个字符串。*
:将字符串重复指定次数。[]
:通过索引访问字符串中的字符。in
和not in
:检查字符串中是否包含指定字符。
(6)字符串格式化:
- Python支持多种字符串格式化方法,包括传统的
%
格式化和str.format()
方法,以及Python 3.6中引入的f-string。
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
- 格式化操作符辅助指令:
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
(7)三引号字符串:
- 使用三引号可以创建多行字符串,这在处理多行文本时非常方便。
(8 )f-string:
- f-string是Python 3.6引入的一种新的字符串格式化机制,它允许在字符串中直接插入变量和表达式。
(9)Unicode字符串:
- 在Python 3中,所有字符串都是Unicode字符串。
(10)字符串内建函数:
Python 的字符串类型提供了许多内建的字符串操作方法,这些方法可以帮助你执行常见的字符串操作,如搜索、替换、大小写转换等。
-
capitalize()
- 将字符串的第一个字符转换为大写,其余字符转换为小写。 -
title()
- 将字符串的每个单词的首字母转换为大写,其余字母转换为小写。 -
upper()
- 将字符串中的所有小写字母转换为大写。 -
lower()
- 将字符串中的所有大写字母转换为小写。 -
swapcase()
- 将字符串中的小写字母转换为大写,大写字母转换为小写。 -
index(sub[, start[, end]])
- 返回子字符串sub
在字符串中首次出现的索引,如果找不到则抛出ValueError
。 -
find(sub[, start[, end]])
- 检查字符串中是否包含子字符串sub
,如果包含则返回首次出现的索引,否则返回-1
。 -
rfind(sub[, start[, end]])
- 类似于find()
,但是从字符串的右侧开始查找。 -
count(sub[, start[, end]])
- 返回子字符串sub
在字符串中出现的次数。 -
startswith(prefix[, start[, end]])
- 检查字符串是否以prefix
开始,如果是则返回True
。 -
endswith(suffix[, start[, end]])
- 检查字符串是否以suffix
结束,如果是则返回True
。 -
replace(old, new[, count])
- 将字符串中的old
子串替换为new
,如果指定了count
,则替换不超过count
次。 -
split(sep=None, maxsplit=-1)
- 根据分隔符sep
将字符串分割为一个列表,maxsplit
指定分割的次数。 -
splitlines([keepends])
- 将字符串按行分割为一个列表,如果keepends
为True
,则保留行尾的换行符。 -
strip([chars])
- 移除字符串头尾处的空白字符,或者指定的字符。 -
rstrip([chars])
- 移除字符串尾部的空白字符,或者指定的字符。 -
lstrip([chars])
- 移除字符串头部的空白字符,或者指定的字符。 -
center(width[, fillchar])
- 返回一个字符串,它是将原字符串居中,并用fillchar
填充至指定的width
。 -
ljust(width[, fillchar])
- 返回一个字符串,它是将原字符串左对齐,并用fillchar
填充至指定的width
。 -
rjust(width[, fillchar])
- 返回一个字符串,它是将原字符串右对齐,并用fillchar
填充至指定的width
。 -
zfill(width)
- 返回字符串的副本,其中字符串被填充为指定的宽度,用'0'
字符填充。 -
expandtabs(tabsize=8)
- 将字符串中的制表符\t
转换为空格,每个制表符转换为tabsize
指定数量的空格。 -
isalpha()
- 如果字符串至少有一个字符并且所有字符都是字母,则返回True
。 -
isdigit()
- 如果字符串只包含数字,则返回True
。 -
isalnum()
- 如果字符串至少有一个字符并且所有字符都是字母或数字,则返回True
。 -
isspace()
- 如果字符串中只包含空白字符,则返回True
。 -
islower()
- 如果字符串中所有区分大小写的字符都是小写,则返回True
。 -
isupper()
- 如果字符串中所有区分大小写的字符都是大写,则返回True
。 -
istitle()
- 如果字符串是“标题化”的(即每个单词的首字母都是大写),则返回True
。 -
encode(encoding='utf-8', errors='strict')
- 将字符串编码为指定的编码格式。 -
decode(encoding='utf-8', errors='strict')
- 解码字符串,将其转换为指定编码格式的字符串。 -
format(*args, **kwargs)
- 格式化字符串,类似于%
格式化。 -
join(iterable)
- 将序列中的元素连接成字符串,元素之间用该字符串分隔。 -
isdecimal()
- 检查字符串是否只包含十进制字符。 -
maketrans(x[, y[, z]])
- 返回一个转换表,用于字符串转换。
(11)示例代码:
# 字符串创建
s1 = 'Python'
s2 = "Hello, World!"
s3 = """This is a
multi-line string"""
# 字符串访问
print(s1[0]) # 输出 P
print(s2[7:-1]) # 输出 World
# 字符串更新
new_str = s1 + " 3.8"
print(new_str) # 输出 Python 3.8
# 字符串格式化
name = "Runoob"
age = 5
print("My name is %s, and I am %d years old." % (name, age))
# 使用f-string
name = 'Runoob'
age = 5
print(f"My name is {name}, and I am {age} years old.")
# 三引号字符串
multi_line_str = """This is a
multi-line string"""
print(multi_line_str)
# 字符串内建函数
print(s1.upper()) # 输出 PYTHON
print(s2.split(",")) # 输出 ['Hello', ' World!']