Python

Python

第一章 前言

1.1 Python 语言特点

  1. 易于学习
  2. 易于阅读
  3. 易于维护
  4. 一个广泛的标准库
  5. 互动模式
  6. 可移植
  7. 可扩展
  8. 数据库
  9. GUI编程
  10. 可嵌入

1.2 Python 应用领域/就业方向

  1. Web开发(Python后端)/后端
  2. Python爬虫工程师
  3. AI工程师
  4. 自动化测试工程师
  5. Python游戏开发

1.3 Python 开发工具

  • IDLE
  • PyCharm
  • Sublilme Text
  • Eric

1.4 PyCharm 快捷键

  1. 删除当前行:Shift+delete
  2. 复制当前行:Ctrl+D
  3. 添加注释,取消注释:Ctrl+/
  4. 快速格式化:Ctrl+Alt+L
  5. 快速运行:Ctrl+Shift+F10
  6. 查看一个类的层次关系(学习OOP继承后,非常有用):Ctrl+H
  7. 复制/粘贴/剪切:Ctrl+C/V/X
  8. 查找:Ctrl+F
  9. 替换:Ctrl+R

第二章 基础语法

2.1 编码

默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。

2.2 标识符

注意:

  • Python 对各种变量、函数和类等命名时使用的各种字符序列称为标识符
  • 第一个字符必须是字母表中字母下划线 _ ,不可以数字开头
  • 标识符的其他的部分由字母数字下划线组成
  • 标识符不能包含空格
  • 标识符对大小写敏感
  • 不能使用关键字作为标识符,但可以包含关键字
  • 在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了

标识符命名规范:

  • 变量:变量要小写,若有多个单词,用下划线分开
  • 常量:常量全部大写
  • 函数:函数名一律小写,若有多个单词,用下划线分开。特别注意的是,私有函数双下划线开头
  • 类:使用大驼峰命名
拓展:驼峰命名法
  • 驼峰命名法有两种,分别是大驼峰命名和小驼峰命名
  • 大驼峰命名,多个单词的首字母用大写开头,例如:MyName
  • 小驼峰命名,第一个单词的首字母用小写,后面的首字母都大写,例如:myName

2.3 保留字

保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

2.4 注释(Comment)

2.4.1 单行注释和多行注释
# 注释

# 使用#进行单行注释
# print("0")

# 使用'''注释文字'''进行多行注释
'''
print("1")
print("2")
print("3")
'''

# 使用"""注释文字"""进行多行注释
"""
print("4")
print("5")
print("6")
"""

# 使用#进行单多行注释
# print("7")
# print("8")
# print("9")

# 嵌套注释
"""
print("10")
# print("11")
# print("12")
"""
2.4.2 文件编码声明注释
image-20240729234934025

2.5 转义字符

# \t 制表
print("jack\t20\n")

# \n 换行
print("Hello,jack\nhello,tom\n")

# \\ 输出\
print("D\\:python\\chapter02\n")

# \\\\   输出\\
print("D\\\\:python\\\\chapter02\n")

# \" 输出"
print("杨过说:\"小龙女你嫁给我吧\"\n")

# \' 输出'
print("郭靖说:\'hello\'\n")  # Python单引号也可以不使用转义字符
print("郭靖说:'hello'\n")

# \r 回车
print("段誉向西行,\r他虽不会武功\n")
image-20240729230024578

2.6 格式化输出

2.6.1 %操作符输出
符 号描述
%s格式化字符串
%d格式化整数,%06表示输出6位整数,不足的位数补0
%f格式化浮点数字,可指定小数点后的精度
%%输出%

语法:print(“格式化字符串”%(变量1,变量2,……))

2.6.2 format()函数输出
2.6.3 f-string输出
# 格式化输出

# 定义变量
name = '张三'
age = 18
score = 90.5
gender = '男'

# %操作符输出
print("个人信息:%s %d %.2f %s " % (name, age, score, gender))

# # format()输出
print("个人信息:{} {} {} {}".format(name, age, score, gender))
print("个人信息:{} {} {:.2f} {}".format(name, age, score, gender))

# f-string输出
print(f"个人信息:{name} {age} {score} {gender}")
image-20240730213558310

2.7 加号的使用

# 加号的使用
name = '张三'
score = 39.3
print(score + 38)  # 77.3
print(name + "hi")  # 张三hi
print("288" + "27")  # 28827
print(2345.2 + 243)  # 2578.2
image-20240730214815842

2.8 进制转换

# 进制转换
# 二进制binary,八进制octal,十进制decimal,十六进制hexadecimal

# 二进制转换
bin_number = '10101010'
dec_number = int(bin_number, 2)  # int()函数,将二进制转换为十进制
oct_number = oct(dec_number)  # oct()函数,将十进制转换为八进制
hex_number = hex(dec_number)  # hex()函数,将十进制转换为十六进制
print("二进制数为:", bin_number)  # 10101010
print("十进制数为:", dec_number)  # 170
print("八进制数为:", oct_number)  # 0o256
print("十六进制数为:", hex_number)  # 0xaa

print("------------------------")

# 八进制转换
oct_number = '52'
dec_number = int(oct_number, 8)  # int()函数,将八进制转换为十进制
bin_number = bin(dec_number)  # bin()函数,将十进制转换为二进制
hex_number = hex(dec_number)  # hex()函数,将十进制转换为十六进制
print("八进制数为:", oct_number)  # 52
print("十进制数为:", dec_number)  # 42
print("二进制数为:", bin_number)  # 0b101010
print("十六进制数为:", hex_number)  # 0x2a

print("------------------------")

# 十进制转换
dec_number = 100
bin_number = bin(dec_number)  # bin()函数,将十进制转换为二进制
oct_number = oct(dec_number)  # oct()函数,将十进制转换为八进制
hex_number = hex(dec_number)  # hex()函数,将十进制转换为十六进制
print("十进制数为:", dec_number)  # 100
print("二进制数为:", bin_number)  # 0b1100100
print("八进制数为:", oct_number)  # 0o144
print("十六进制数为:", hex_number)  # 0x64

print("------------------------")

# 十六进制转换
hex_number = '2a'
dec_number = int(hex_number, 16)  # int()函数,将十六进制转换为十进制
bin_number = bin(dec_number)  # bin()函数,将十进制转换为二进制
oct_number = oct(dec_number)  # oct()函数,将十进制转换为八进制
print("十六进制数为:", hex_number)  # 2a
print("十进制数为:", dec_number)  # 42
print("二进制数为:", bin_number)  # 0b101010
print("八进制数为:", oct_number)  # 0o52
image-20240803101733378

2.9 import 与 from…import

在 python 用 import 或者 from…import 来导入相应的模块。

将整个模块(somemodule)导入,格式为: import somemodule

从某个模块中导入某个函数,格式为: from somemodule import somefunction

从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

将某个模块中的全部函数导入,格式为: from somemodule import *

# 导入 sys 模块
import sys
print('================Python import mode==========================')
print ('命令行参数为:')
for i in sys.argv:
    print (i)
print ('\n python 路径为',sys.path)
# 导入 sys 模块的 argv,path 成员
from sys import argv,path  #  导入特定的成员
 
print('================python from import===================================')
print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path

第三章 基本数据类型

3.1 变量

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

等号**(=)**用来给变量赋值。

等号**(=)**运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。

# 变量的实列

# 定义了一个变量,变量的名称是a,变量的值是1,变量的类型是int类型
a = 4
# 定义了一个变量,变量的名称是b,变量的值是3.1,变量的类型是float类型
b = 2
b = 3.1
print("a的值是:", a, "类型是:", type(a))
print("b的值是:", b, "类型是:", type(b))
print("a+b的值是:", a + b, "类型是:", type(a + b))
print("a-b的值是:", a - b, "类型是:", type(a - b))
print("a*b的值是:", a * b, "类型是:", type(a * b))
print("a/b的值是:", a / b, "类型是:", type(a / b))
image-20240730211525806

3.2 标准数据类型

Python 3 中常见的数据类型有:

  • Number(数字)
  • String(字符串)
  • bool(布尔类型)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

Python 3 的六个标准数据类型中:

  • **不可变数据(3 个):**Number(数字)、String(字符串)、Tuple(元组)
  • **可变数据(3 个):**List(列表)、Dictionary(字典)、Set(集合)

此外还有一些高级的数据类型,如: 字节数组类型(bytes)。

3.3 Number(数字)

在Python 3 里,只有一种整数类型 int,表示为长整型,没有 python 2 中的 Long。

3.3.1 整型 int
# 整型

# 范围: -2**63 ~ 2**63-1
the limit (4300 digits) for integer
n1 = 9 ** 8888
print(n1)
3.3.2 浮点型 float
# 浮点型

# 范围:-1.8E308 ~ 1.8E308
import sys

sys.float_info
print(sys.float_info)

# 浮点类型的一般形式
n1 = 5.12
n2 = .512
print("n1=", n1)  # n1= 5.12
print("n2=", n2)  # n2= 0.512

# 科学计数法
n3 = 5.12e2
n4 = 5.12e+2
n5 = 5.12E2
n6 = 5.12e-2
print("n3=", n3)  # n3= 512.0
print("n4=", n4)  # n4= 512.0
print("n5=", n5)  # n5= 512.0
print("n6=", n6)  # n6= 0.0512

# 浮点数精度
# 使用Decimal类进行精度计算
from decimal import Decimal

n7 = Decimal('8.1') / Decimal('2.7')
print("n7=", n7)  # n7= 3
image-20240730214436035

注意:

  • Python 可以同时为多个变量赋值,如 a, b = 1, 2
  • 一个变量可以通过赋值指向不同类型的对象
  • 数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数
  • 在混合计算时,Python 会把整型转换成为浮点数
3.3.3 数值运算
>>> 5 + 4  # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7  # 乘法
21
>>> 2 / 4  # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 17 % 3 # 取余 
2
>>> 2 ** 5 # 乘方
32
3.3.4 数值类型实例
intfloatcomplex
100.03.14j
10015.2045.j
-786-21.99.322e-36j
08032.3e+18.876j
-0490-90.-.6545+0J
-0x260-32.54e1003e+26J
0x6970.2E-124.53e-7j

Python 还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。

3.3.5 查询变量所指的对象类型
# tpye
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
# isinstance
>>> a = 111
>>> isinstance(a, int)
True
>>>
拓展:isinstance 和 type 的区别在于:
  • type() 不会认为子类是一种父类类型
  • isinstance() 会认为子类是一种父类类型
>>> class A:
...     pass
... 
>>> class B(A):
...     pass
... 
>>> isinstance(A(), A)
True
>>> type(A()) == A 
True
>>> isinstance(B(), A)
True
>>> type(B()) == A
False

3.4 String(字符串)

Python 中的字符串用单引号 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。

字符串的截取的语法格式如下:

变量[头下标:尾下标]

索引值以 0 为开始值,-1 为从末尾的开始位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

加号 + 是字符串的连接符, 星号 ***** 表示复制当前字符串,与之结合的数字为复制的次数。

str = 'Runoob'  # 定义一个字符串变量

print(str)           # 打印整个字符串
print(str[0:-1])     # 打印字符串第一个到倒数第二个字符(不包含倒数第一个字符)
print(str[0])        # 打印字符串的第一个字符
print(str[2:5])      # 打印字符串第三到第五个字符(包含第五个字符)
print(str[2:])       # 打印字符串从第三个字符开始到末尾
print(str * 2)       # 打印字符串两次
print(str + "TEST")  # 打印字符串和"TEST"拼接在一起
image-20240731154727008

Python 使用反斜杠 \ 转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个r,表示原始字符串。

print('Ru\noob')
print(r'Ru\noob')
image-20240731155252857

另外,反斜杠 \ 可以作为续行符,表示下一行是上一行的延续。也可以使用 “”“…”“” 或者 ‘’‘…’‘’ 跨越多行。

注意,Python 没有单独的字符类型,一个字符就是长度为1字符串

与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如 word[0] = ‘m’ 会导致错误。

注意:

  • 反斜杠 \ 可以用来转义,使用r可以让反斜杠不发生转义
  • 字符串可以用**+运算符连接在一起,用***运算符重复
  • Python中的字符串有两种索引方式,从左往右0开始,从右往左以**-1**开始
  • Python 中的字符串不能改变
拓展:字符串驻留机制

Python仅保存一份相同且不可变字符串,不同的值被存放在字符串的驻留池中,Python的驻留池机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。

Python的字符串驻留机制是一种优化技术,用于提高内存使用效率和性能

# 字符串驻留机制
# Python的字符串驻留机制是一种优化技术,用于提高内存使用效率和性能。
# 它通过将相同的字符串对象存储在内存中一次,而不是每次创建字符串时都分配新的内存空间。

# 内置函数id(),用于获取对象的内存地址
str1="hello"
str2="hello"
str3="hello"
print(id(str1),id(str2),id(str3))
image-20240731190346490

驻留机制几种情况讨论(交互模式下):

  • 字符串是由26个英文字母大小写0-9,**__**组成
  • 字符串长度为01
  • 字符串在编译时进行驻留,而非运行时
  • [5,256]整数数字

image-20240731192459127image-20240731192519647image-20240731192529742image-20240731192542873image-20240731192554410

注意:

  • PyCharm对字符串进行了优化处理
  • sys中的intern方法可以强制2个字符串指向同一个对象
str1 = "abc123#"
str2 = "abc123#"
str3 = -100
str4 = -100
print(id(str1))
print(id(str2))
print(id(str3))
print(id(str4))

image-20240731193252735image-20240731194039531

3.5 bool(布尔类型)

布尔类型即 TrueFalse

在 Python 中,True 和 False 都是关键字,表示布尔值

布尔类型可以用来控制程序的流程,比如判断某个条件是否成立,或者在某个条件满足时执行某段代码。

布尔类型特点:

  • 布尔类型只有两个值:TrueFalse
  • bool 是 int 的子类,因此布尔值可以被看作整数来使用,其中 True 等价于 1,Flase 等价于0
  • 布尔类型可以和其他数据类型进行比较,比如数字、字符串等。在比较时,Python 会将 True 视为 1,False 视为 0
  • 布尔类型可以和逻辑运算符一起使用,包括 and、or 和 not。这些运算符可以用来组合多个布尔表达式,生成一个新的布尔值
  • 布尔类型也可以被转换成其他数据类型,比如整数、浮点数和字符串。在转换时,True 会被转换成 1,False 会被转换成 0
  • 可以使用 bool() 函数将其他类型的值转换为布尔值。以下值在转换为布尔值时为 False:None、False、零 (0、0.0、0j)、空序列(如 ‘’、()、[])和空映射(如 {})。其他所有值转换为布尔值时均为 True
# 布尔类型的值和类型
a = True
b = False
print(type(a))  # <class 'bool'>
print(type(b))  # <class 'bool'>

print("------------------------")

# 布尔类型的整数表现
print(int(True))  # 1
print(int(False))  # 0

print("------------------------")

# 使用 bool() 函数进行转换
print(bool(0))  # False
print(bool(42))  # True
print(bool(''))  # False
print(bool('Python'))  # True
print(bool([]))  # False
print(bool([1, 2, 3]))  # True

print("------------------------")

# 布尔逻辑运算
print(True and False)  # False
print(True or False)  # True
print(not True)  # False

print("------------------------")

# 布尔比较运算
print(5 > 3)  # True
print(2 == 2)  # True
print(7 < 4)  # False

print("------------------------")

# 布尔值在控制流中的应用
if True:
    print("This will always print")

if not False:
    print("This will also always print")

x = 10
if x:
    print("x is non-zero and thus True in a boolean context")

image-20240802161329443image-20240802161404084

注意: 在 Python 中,所有非零的数字非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False。因此,在进行布尔类型转换时,需要注意数据类型的真假性。

3.6 List(列表)

3.7 Tuple(元组)

3.8 Dictionary(字典)

3.9 Set(集合)

3.10 bytes 类型

3.11 数据类型转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。

Python 数据类型转换可以分为两种:

  • 隐式类型转换 - 自动完成
  • 显式类型转换 - 需要使用类型函数来转换
3.11.1 隐式类型转换

在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。

以下实例中,我们对两种不同类型的数据进行运算,较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失。

num_int = 123
num_flo = 1.23

num_new = num_int + num_flo

print("num_int 数据类型为:",type(num_int))
print("num_flo 数据类型为:",type(num_flo))

print("num_new 值为:",num_new)
print("num_new 数据类型为:",type(num_new))
image-20240731224739749
3.11.2 显式类型转换
# 数据类型转换

# 显式类型转换int()、float()、str()
i = 10
j = float(i)
print(j, type(j))  # 10.0 <class 'float'>
k = str(i)
print(k, type(k))  # 10 <class 'str'>

print("------------------------")

# 显式类型转换注意事项
n1 = 100
n2 = 123.123
print(float(n1))  # 100.0
print(int(n2))  # 123
print(int(n1 + n2))  # 223
print(float(int(n1 + n2)))  # 223.0

n3 = "12.3"
n4 = "123"
print(float(n3))  # 12.3
print(int(float(n3)))  # 12
print(int(n4))  # 123
print(float(n4))  # 123.0

n5 = "abc"
print(int(n5))  # ValueError
print(float(n5))  # ValueError
image-20240731225029730
函数描述
int()将x转换为一个整数
float(x)将x转换到一个浮点数
complex()创建一个复数
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)将一个整数转换为一个八进制字符串

第四章 运算符

4.1 算术运算符

运算符描述
+加 + :两个对象相加
-减 - :得到负数或是一个数减去另一个数
*乘 * : 两个数相乘或是返回一个被重复若干次的字符串
/除 / : x 除以 y
//整除 // : 向下取整
%取余 % : 返回除法的余数,对应的运算公式为:a % b = a - a // b * b
**幂 ** :返回x的y次幂,对应的运算公式为:a ** b = a^b
# 算数运算符
# +,-,*,/,//,%,**

# /:除法,返回浮点数
print(10 / 3)  # 3.3333333333333335
print(-10 / 3)  # -3.3333333333333335
print(10 / -3)  # -3.3333333333333335

print("------------------------")

# //:整除,返回整数(向下取整)
print(10 // 3)  # 3
print(-10 // 3)  # -4
print(10 // -3)  # -4
print(-10 // -3)  # 3

print("------------------------")

# %:取余,对应的运算公式为:a % b = a - a // b * b
print(10 % 3)  # 1
print(-10 % 3)  # 2
print(10 % -3)  # -2
print(-10 % -3)  # -1

print("------------------------")

# **:指数运算,对应的运算公式为:a ** b = a^b
print(2 ** 3)  # 8
image-20240802102318099

4.2 比较运算符

比较运算符的结果要么是 True,要么是 Flase

运算符描述
==等于:比较对象是否相等
!=不等于 :比较两个对象是否不相等
>大于 :返回x是否大于y
<小于 :返回x是否小于y
>=大于等于 :返回x是否大于等于y
<=小于等于 :返回x是否小于等于y
is判断两个变量引用对象是否为同一个
is not判断两个变量引用对象是否不同
# 比较运算符
# ==, !=, >, <, >=, <=, is, is not

a = 21
b = 10
print(a == b)  # False
print(a != b)  # True
print(a > b)  # True
print(a < b)  # False
print(a >= b)  # True
print(a <= b)  # False
print(a is b)  # False
print(a is not b)  # True

print("------------------------")

# PyCharm对字符串驻留的优化
c = "abc#"
d = "abc#"
print(c == d)  # True
print(c != d)  # False
print(c is d)  # True
print(c is not d)  # False
image-20240802113422485

注意:

  • 在交互模式下,发生驻留会导致值相同但数据空间不同
image-20240802113646677

4.3 赋值运算符

运算符描述实例
=简单的赋值运算符c = a + b 将 a + b 的运算结果赋值为 c
+=加法赋值运算符c += a 等效于 c = c + a
-=减法赋值运算符c -= a 等效于 c = c - a
*=乘法赋值运算符c *= a 等效于 c = c * a
/=除法赋值运算符c /= a 等效于 c = c / a
//=取整除赋值运算符c //= a 等效于 c = c // a
%=取模赋值运算符c %= a 等效于 c = c % a
**=幂赋值运算符c **= a 等效于 c = c ** a
:=同时进行赋值和返回赋值的值
# 赋值运算符
# =,+=,-=,*=,/=,//=,%=,**=

a, b, c, d, e, f, g, h, i, j = 12, 23, 34, 45, 56, 67, 78, 89, 90, 2

# =
c = a + b
print(c)  # 35

# +=
d += a
print(d)  # 57

# -=
e -= a
print(e)  # 44

# *=
f *= a
print(f)  # 804

# /=
g /= a
print(g)  # 6.5

# //=
h //= a
print(h)  # 7

# %=
i %= a
print(i)  # 6

# **=
j **= a
print(j)  # 4096
拓展:海象运算符
  • 在 Python 3.8 及更高版本中,引入了一种新的语法特性,称为"海象运算符"(Walrus Operator)
  • 它使用 := 符号。这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值
  • 使用海象运算符可以在一些情况下简化代码,尤其是在需要在表达式中使用赋值结果的情况下。这对于简化循环条件或表达式中的重复计算很有用
  • 海象运算符的主要用途是在需要同时进行赋值和条件判断的情况下,简化代码。例如,在循环中,你可能需要检查某个条件,并在满足条件时更新一个变量,同时打印这个变量的值。使用海象运算符可以避免额外的变量赋值步骤
  • 海象运算符只能在表达式内部使用,不能在函数定义、类定义、循环或条件语句之外使用
  • 海象运算符的引入是为了提高代码的简洁性和可读性,但过度使用可能会导致代码难以理解。因此,建议在确实需要简化代码的情况下使用
# 海象运算符 := 可以在表达式内部为变量赋值
# 适用于需要先计算表达式结果,再赋值给变量的场景

# 传统写法
n = 10
if n > 5:
    print(n)    # 10

# 使用海象运算符
if (n := 10) > 5:
    print(n)       # 10

if (n := 19) > 388:
    print(n)       # 19
else:
    print("n<388")   # n<388
image-20240802115800346

4.4 逻辑运算符

运算符逻辑表达式描述
andx and y布尔"与" : 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值
orx or y布尔"或" : 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值
notnot x布尔"非" : 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True
# 逻辑运算符
# and, or, not

# and: 两个条件都为真,结果才为真
# or: 两个条件中有一个为真,结果就为真
# not: 取反,如果条件为真,结果为假,如果条件为假,结果为真
# 逻辑运算符可以用于比较运算符的结果,也可以用于布尔值
# 逻辑运算符的优先级:not > and > or
# 逻辑运算符的短路:如果逻辑运算符的第一个条件已经可以确定结果,那么后面的条件就不会再执行

a, b = 10, 20
print(a and b)  # 20
print(a or b)  # 10
print(not (a and b))  # False

print("------------------------")

# and
score = 70
if score >= 60 and score <= 80:
    print("及格")

c, d = 1, 99
print(c and d)  # 99
print((c > d) and d)  # False
print(d and (c > d))  # False
print((c < d) and d)  # 99
print(d and (c < d))  # True
print((c < d) and (d > c))  # True

print("------------------------")

# or
score = 70
if score >= 60 or score <= 80:
    print("及格")

e, f = 1, 99
print(e or f)  # 1
print((e > f) or f)  # 99
print(f or (e > f))  # 99
print((e < f) or f)  # True
print(f or (e < f))  # 99
print((e < f) or (f > e))  # True

print("------------------------")

# not
g = 9
h = not (g > 9)
print(not g)  # False
print(not h)  # False
print(not True)  # False
print(not False)  # True
print(not 0)    # True
print(not 1)    # False
print(not 18.74)    # False
print(not "")    # True
print(not "jack")    # False

image-20240802155935048image-20240802155955878

4.5 成员运算符

4.6 身份运算符

身份运算符用于比较两个对象的存储单元

运算符描述实例
is判断两个标识符是不是引用自一个对象x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is not判断两个标识符是不是引用自不同对象x is not y , 类似 id(x) != id(y)。如果引用的不是同一个对象则返回结果 True,否则返回 False
# 身份运算符
a,b=20,20

if (a is b):
    print("1 - a 和 b 有相同的标识")
else:
    print("1 - a 和 b 没有相同的标识")

if (id(a) == id(b)):
    print("2 - a 和 b 有相同的标识")
else:
    print("2 - a 和 b 没有相同的标识")

print("------------------------")

# 修改变量 b 的值
b = 30
if (a is b):
    print("3 - a 和 b 有相同的标识")
else:
    print("3 - a 和 b 没有相同的标识")

if (a is not b):
    print("4 - a 和 b 没有相同的标识")
else:
    print("4 - a 和 b 有相同的标识")
image-20240802201901288

is== 区别:

  • is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等
>>>a = [1, 2, 3]
>>> b = a
>>> b is a 
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True

4.7 位运算符

在Python中,负数是以补码形式存储的。

运算符描述
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1
^按位异或运算符:当两对应的二进位相异时,结果为1
<<左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,符号位不变,高位丢弃,低位补0。左移多少位就是乘以2的多少次方
>>右移动运算符:把">>“左边的运算数的各二进制全部右移若干位,由”>>"右边的数指定移动的位数,低位丢弃,符号位不变,并用符号位补溢出的高位。右移多少位就是整除2的多少次方
# 位运算
# 按位取反~,按位与&,按位或|,按位异或^,左移<<,右移>>

# 按位取反~:将数字的每一位都取反
a = 60  # 60的原码是0011 1100,反码是0011 0011,补码是0011 1100
b = -60  # -60的原码是1011 1100,反码是1100 0011,补码是1100 0100
c = 13  # 13的原码是0000 1101,反码是0000 1101,补码是0000 1101
print(~a)  # -61    60的补码是0011 1100,取反后(补码)是1100 0011,取反后的反码是1100 0010,取反后的原码是1011 1101,即-61
print(~b)  # 59     -60的补码是1100 0100,取反后(补码)是0011 1011,取反后的反码是0011 1011,取反后的原码是0011 1011,即59
print(~c)  # -14    13的补码是0000 1101,取反后(补码)是1111 0010,取反后的反码是1111 0001,取反后的原码是1000 1110,即-14

print("------------------------")

# 按位与&:将两个数字的每一位都进行与运算。参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。
d = a & b  # 60的补码是0011 1100,-60的补码是1100 0100,与运算后(补码)是0000 0100,与运算后的反码是0000 0100,与运算后的原码是0000 0100,即4
e = a & c  # 60的补码是0011 1100,13的补码是0000 1101,与运算后(补码)是0000 1100,与运算后的反码是0000 1100,与运算后的原码是0000 1100,即12
print(d)  # 4
print(e)  # 12

print("------------------------")

# 按位或|:将两个数字的每一位都进行或运算。只要对应的二个二进位有一个为1时,结果位就为1。
f = a | b  # 60的补码是0011 1100,-60的补码是1100 0100,或运算后(补码)是1111 1100,或运算后的反码是1111 1011,或运算后的原码是1000 0100,即-4
g = a | c  # 60的补码是0011 1100,13的补码是0000 1101,或运算后(补码)是0011 1101,或运算后的反码是0011 1101,或运算后的原码是0011 1101,即61
print(f)  # -4
print(g)  # 61

print("------------------------")

# 按位异或^:将两个数字的每一位都进行异或运算。当两对应的二进位相异时,结果为1。
h = a ^ b  # 60的补码是0011 1100,-60的补码是1100 0100,异或运算后(补码)是1111 1000,异或运算后的反码是1111 0111,异或运算后的原码是1000 1000,即-8
i = a ^ c  # 60的补码是0011 1100,13的补码是0000 1101,异或运算后(补码)是0011 0001,异或运算后的反码是0011 0001,异或运算后的原码是0011 0001,即49
print(h)  # -8
print(i)  # 49

print("------------------------")

# 左移<<:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,符号位不变,高位丢弃,低位补0。左移多少位就是乘以2的多少次方。
j = a << 2  # 60*2^2=240
k = b << 2  # -60*2^2=-240
l = c << 2  # 13*2^2=52
print(j)  # 240
print(k)  # -240
print(l)  # 52

print("------------------------")

# 右移>>:把">>"左边的运算数的各二进制全部右移若干位,由">>"右边的数指定移动的位数,低位丢弃,符号位不变,并用符号位补溢出的高位。右移多少位就是整除2的多少次方。
m = a >> 2  # 60//2^2=15
n = b >> 2  # -60//2^2=-15
o = c >> 2  # 13//2^2=3
print(m)  # 15
print(n)  # -15
print(o)  # 3
image-20240803160632170

4.8 运算符优先级

以下表格列出了从最高到最低优先级的所有运算符, 相同单元格内的运算符具有相同优先级。 运算符均指二元运算,除非特别指出。 相同单元格内的运算符从左至右分组(除了幂运算是从右至左分组):

运算符描述
(expressions…),[expressions…], {key: value…}, {expressions…}圆括号的表达式
x[index], x[index:index], x(arguments…), x.attribute读取,切片,调用,属性引用
await xawait 表达式
**乘方(指数)
+x, -x, ~x正,负,按位非 NOT
*, @, /, //, %乘,矩阵乘,除,整除,取余
+, -加和减
<<, >>移位
&按位与 AND
^按位异或 XOR
|按位或 OR
in,not in, is,is not, <, <=, >, >=, !=, ==比较运算,包括成员检测和标识号检测
not逻辑非 NOT
and逻辑与 AND
or逻辑或 OR
if – else条件表达式
lambdalambda 表达式
:=赋值表达式

注意:

  • Python3 已不支持 <> 运算符,可以使用 != 代替,如果你一定要使用这种比较运算符,可以使用以下的方式:
>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
True

第五章 Number(数字)

第六章 String(字符串)

第七章 bool(布尔类型)

第八章 List(列表)

第九章 Tuple(元组)

第十章 Dictionary(字典)

第十一章 Set(集合)

第十二章 条件控制

image-20240803224157929image-20240803224222552

image-20240803224245584
12.1 if 语句

Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else

注意:

  • 1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块
  • 2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块
  • 3、在 Python 中没有 switch…case 语句,但在 Python3.10 版本添加了 match…case,功能也类似,详见下文
img

以下为if中常用的操作运算符:

操作符描述
<小于
<=小于或等于
>大于
>=大于或等于
==等于,比较两个值是否相等
!=不等于
# 判断一个年份是否为闰年
year = int(input("请输入一个年份:"))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    print(f"{year}年是闰年")
else:
    print(f"{year}年不是闰年")
image-20240803225323041
score1 = float(input("请输入第一个成绩:"))
score2 = float(input("请输入第二个成绩:"))
score3 = float(input("请输入第三个成绩:"))
if score1 >= 90 and score2 >= 90 and score3 >= 90:
    print("A")
elif score1 >= 90 or score2 >= 60 or score3 >= 60:
    print("B")
else:
    print("C")
image-20240803225159051
12.2 if 嵌套

在嵌套 if 语句中,可以把 if…elif…else 结构放在另外一个 if…elif…else 结构中。

age = int(input("请输入年龄:"))
month = int(input("请输入月份:"))
if 4 <= month <= 10:
    if age < 18:
        print("儿童票30")
    elif 18 <= age <= 60:
        print("成人票60")
    else:
        print("老年票20")
else:
    if 18 <= age <= 60:
        print("成人票40")
    else:
        print("儿童老人票20")
image-20240803225629128
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值