Python
1、 基础
1.1、基本数据类型
| 类型 | 描述 |
|---|---|
| Number | 整形、浮点数、复数、布尔值 |
| String | 字符串 |
| List | 有序的可变列表 |
| Tuple | 有序的不可变列表 |
| Set | 无序的不重复集合 |
| Dictionary | 无序的键值对 |
TIP
1、查看变量 a 的类型:type(a) —— type不会认为子类是一种父类类型
2、判断变量 a 的类型:isinstance(a,类型) —— isinstance会认为子类是一种父类类型
3、判断 a 是否是 b 的类型:issubclass(a,b)
4、在内存中清除变量所占控件:del 变量1,变量2
| 类型转换 | 描述 |
|---|---|
| int(xxx) | 转换为整数 |
| float(xxx) | 转换为浮点数 |
| str(xxx) | 转换为字符串 |
| frozenset(xxx) | 转化为不可变集合 |
| chr(xxx) | 将一个整数转化为一个字符 |
| ord(xxx) | 将一个字符转化为一个整数 |
| hex(xxx) | 将一个整数转化为一个十六进制,类型是字符串 |
| oct(xxx) | 将一个整数转化为一个八进制,类型是字符串 |
1.2、运算符
| 算数运算符 | 描述 |
|---|---|
| +、-、*、/ | 加减乘除 |
| // | 取整 |
| % | 取余 |
| ** | 幂运算 |
| 赋值运算符 | 描述 |
|---|---|
| +=、-=、*=、/= | 加减乘除赋值运算符 |
| //= | 取整赋值运算符 |
| %= | 取余赋值运算符 |
| **= | 幂运算赋值运算符 |
| := | 海象运算符,在表达式内部进行赋值 |
# 不使用海象运算符
value = input("请输入一个字符串(输入 'exit' 退出): ")
while value != 'exit':
print(f"你输入了: {
value}")
value = input("请输入一个字符串(输入 'exit' 退出): ")
# 使用海象运算符
while (value := input("请输入一个字符串(输入 'exit' 退出): ")) != 'exit':
print(f"你输入了: {
value}")
海象运算符的优点:可以减少代码的重复,提高代码的可读性和简洁性
| 逻辑运算符 | 描述 |
|---|---|
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或 |
| ~ | 按位取反 |
| << | 逻辑左移 |
| >> | 逻辑右移 |
| and | 逻辑与 |
| or | 逻辑或 |
| not | 逻辑非 |
| 成员运算符 | 描述 |
|---|---|
| in | 是否在指定的序列中 |
| not in | 是否不在指定的序列中 |
| 身份运算符 | 描述 |
|---|---|
| is | 是否引用同个对象,类似于 id(xxx) == id(yyy) |
| is not | 是否引用不同的对象,类似于 id(xxx) != id(yyy) |
| 优先级(由上往下) | 描述 | 类型 |
|---|---|---|
| (expr…)、[expr…]、{expression…} | 括号中的表达式 | 括号 |
| x[index],x[index1:index2]、x.attr | 索引、切片、调用、属性引用 | 自操作 |
| await x | await 表达式 | |
| ** | 乘方 | 运算 |
| +x、-x、~x | 正,负,非 | 自运算 |
| *、@、/、//、% | 乘、矩阵乘、除、整除、取余 | 运算 |
| +、- | 加减 | 运算 |
| <<、>> | 移位 | 比特运算 |
| & | 按位与 | 比特操作 |
| ^ | 按位异或 | 比特操作 |
| | | 按位或 | 比特操作 |
| in、not in、is、is not、<、<=、>、>=、!=、== | 比较运算 | 比较运算 |
| not | 非 | 逻辑运算 |
| and | 与 | 逻辑运算 |
| or | 或 | 逻辑运算 |
| lambda | lambda表达式 | |
| := | 海象运算符 |
TIP:在交互模式中,最后被输出的表达式结果会被赋值给变量_,例如
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
1.3、数字
| 常用操作 | 描述 |
|---|---|
| abs(x) | 返回数字的绝对值 |
| fabs(x) | 以浮点数的形式返回数字的绝对值 |
| ceil(x) | 向上取整 |
| floor(x) | 向下取整 |
| cmp(x,y) | 如果 x<y 则返回 -1,x==y 则返回 0,x>y 则返回 1 |
| exp(x) | 返回 e 的 x 次方,例如 exp(1) 返回 2.71828… |
| log(x,e) | 以 e 为基数求对数 |
| log10(x) | 以 10 为基数求对数 |
| max(x1,x2…) | 返回最大值 |
| min(x1,x2…) | 返回最小值 |
| modf(x) | 返回 x 的整数部分和小数部分,整数部分以浮点型进行表示 |
| pow(x,y) | 计算 x**y 的值 |
| round(x,[,n]) | 返回浮点数 x 四舍五入的值,n表示保留的位数 |
| sqrt(x) | 返回数字 x 的平方根 |
| 随机数函数 | 描述 |
|---|---|
| choice(seq) | 从序列的元素中随机挑一个元素 |
| randrange([start,] stop [,strp]) | 在指定返回内,start 默认是1,按 step 递增的集合中获取一个随机数 |
| random() | 随机生成 [ 0,1 ) 范围内的数 |
| shuffle(list) | 将序列的所有元素随机进行排序 |
| uniform(x,y) | 随机生成下一个实数,它在 [ x,y ] 范围内 |
| 三角函数 | 描述 |
|---|---|
| sin(x)、cos(x)、tan(x) | 正弦、余弦、正切 |
| asin(x)、acos(x)、atan(x) | 反正弦、反余弦、反正切 |
| degrees(x) | 将弧度转换为角度,如 degrees(math.pi/2) 返回 90° |
| radians(x) | 将角度转换为弧度 |
数字常量:
pi:Π、e:自然常数
1.3、字符串基础
① 引号输出
name = 'my name is "niki"'
print(name) # my name is "niki"
name = "my name is 'niki'"
print(name) # my name is 'niki'
name = 'my name is \'niki\''
print(name) # my name is 'niki'
② 多行语句
str1 = 'my' + \
'name is' + \
'niki'
print(str1)
③ 让 \ 不发生转义
str1 = r'this is a line with \n'
print(str1)
④ 运算
str1 = 'a'
str2 = 'b'
print(str1+str2) # 连接
print(str1*3) # 打印三次
其他数据容器也可以进行同样的 +、* 运算
⑤ 字符串中的特殊字符
| 特殊字符 | 描述 |
|---|---|
| \b | 退格 |
| \000 | 空 |
| \n | 换行 |
| \t | 横向制表符 |
| \v | 纵向制表符 |
| \r | 将 \r 后面的部分逐一替换掉 \r 前的字符,直到 \r 后的内容完全替换完成 |
| \yyy | \三位数字,表示八进制 |
| \xyy | \x两位数字,表示十六进制 |
⑥ 字符串的常用操作
| 大小写转换 | 描述 |
|---|---|
| str.upper() | 转大写 |
| str.lower() | 转小写 |
| str.capitalize() | 将字符串的第一个字符转为大写,其余的转为小写 |
| str.title() | 将字符串每个单词的首字母转为大写 |
| str.swapcase() | 将字符串中大小写互换 |
| 查找与替换 | 描述 |
|---|---|
| str.find(str) | 返回子串的索引,找不到返回 -1 |
| str.rfind(str) | 类似于 find,只不过是从右边开始找 |
| str.index(str) | 类似于 find ,但是找不到会抛出异常 |
| str.rindex(str) | 类似于 index ,只不过是从右边开始找 |
| str.replace(old,new) | 将子串进行替换 |
| str.count(sub) | 计算子串出现的次数 |
| 拆分与拼接 | 描述 |
|---|---|
| str.split(sep) | 将字符串按照 sep 进行分割,返回一个列表 |
| str.splitlines() | 按行拆分字符串,返回一个列表 |
| str.join(iterable) | 使用字符串作为分隔符,将 iterable 中的元素连接成一个字符串 |
s = "hello world"
print(s.split(" ")) # ['hello', 'world']
print("-".join(["hello", "world"])) # "hello-world"
| 去除空白字符 | 描述 |
|---|---|
| str.strip() | 去除字符串两端的空白字符 |
| str.lstrip() | 去除字符串左边的空白字符 |
| str.rstrip() | 去除字符串右边的空白字符 |
| 判断字符串的内容 | 描述 |
|---|---|
| str.isalpha() | 检查字符串是否只包含字符且非空 |
| str.isdigit() | 检查字符串是否只包含数字且非空 |
| str.isalnum() | 检查字符串是否只包含字母和数字且非空 |
| str.isspace() | 检查字符串是否只包含空白字符 |
| str.isupper() | 检查字符串是否只包含大写字符 |
| str.islower() | 检查字符串是否只包含小写字符 |
| str.startswith(prefix) | 检查字符串是否以指定前缀开头 |
| str.endswith(suffix) | 检查字符串是否以指定前缀结尾 |
| 其他 | 描述 |
|---|---|
| str.ljust(width) | 左对齐,默认用空格填充 |
| str.center(width) | 将字符串居中,默认用空格填充 |
| str.rjust(width) | 右对齐,默认用空格填充 |
| str.zfill(width) | 前填充0 |
| str.partition(sep) | 将字符串按 sep 进行分割,分割为‘前’、‘中’、‘后’,seq 处于‘中’ |
| str.expandtabs(tabsize=8) | 将字符串中的 tab 转化为一定数量的空格 |
1.4、字符串扩展
① 格式化法1
| 格式符号 | 描述 |
|---|---|
| %s | 字符串占位符 |
| %d | 整数占位符 %5d表示整数的宽度是5,不足5位时用空格补 |
| %f | 浮点数占位符 %.2f表示精确到小数点后两位 |
| %c | ASCII码占位符 |
| %u | 无符号数占位符 |
| %o | 无符号八进制占位符 |
| %x 或 %X | 无符号十六进制占位符 |
| %e 或 %E | 浮点数(科学计数法形式)占位符 |
name = 'niki'
hobby = 'football'
str1 = "my name is %s" % name
print(str1) # my name is niki
str2 = "my name is %s, my hobby is %s" % (name,hobby)
print(str2) # my name is niki, my hobby is football
② 格式化法2
name = 'niki'
age = 18
str1 = f"my namae is {
name}, my age is {
age}"
print(str1) # my name i s niki, my age is 18
③ 格式化法3
# 基本使用
print('{}网址: "{}!"'.format('xxx', 'www.xxx.com')) # xxx网址: "www.xxx.com!"
# 位置型
print('{1} 和 {0}'.format('Google', 'Runoob')) # Runoob 和 Google
# 关键词型
print('{name}网址: {site}'.format(name='xxx', site='www.xxx.com')) # xxx网址: "www.xxx.com!"
# 保留三位小数
print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi)) # 常量 PI 的值近似为 3.142。
# 左填充和右填充
print('{0:10} ==> {1:10d}'.format(Google, 1)) # Google ==> 1
# 传入一个容器
table = {
'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {0[Runoob]:d}; Google: {0[Google]:d}; Taobao: {0[Taobao]:d}'.format(table) # Runoob: 2; Google: 1; Taobao: 3
# **类似于一种解构
table = {
'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {Runoob:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table)) # Runoob: 2; Google: 1; Taobao: 3
1.5、函数
① 在函数内部声明变量为全局变量:global
num = 100
def test():
global num
num = 200
test()
print(num) # 200
② 多返回值
def test():
return 'niki',18,True
name,age,isMale = test()
print(x,y,z) # niki 18 True
③ 传入参数时,位置参数需要在关键字参数之前,位置参数有先后顺序,关键字参数没有先后顺序的要求
def test(name,age,gender):
print(f"my name is {
name}, my age is {
age}, I'm a {
gender}")
test('Tom',gender='boy',age=18)
④ *args 参数,它会以元组的形式接收参数
def test(*args):
print(args)
test('niki') # ('niki',)
test('niki',20) # ('niki',20,)
⑤ **kwargs 参数 ,它会以字典的额方式接收参数
def test(**kwargs):
print(kwargs)
test(name='niki',age=18) # {'name':'niki','age':18}
⑥ 函数作为参数
def add(x,y):
return x+y
def compute(add):
result = add(6,3)
print(result)
compute(add)
⑦ 函数的参数有可变类型、不可变类型之分
| 可变类型 | 不可变类型 |
|---|---|
| 列表、字典 | 数字、字符串、元组 |
# 不可变类型
def test1(a):
a=10 # a指向了一个新空间
print(a) # 10
a=1
print(test1(a)) # 1
# 可变类型
def test2(l):
l.append([10,20,30]) # l在原来的空间进行更改
print(l) # [1,2,3,[10,20,30]]
l=[1,2,3]
print(test2(l)) # [1,2,3,[10,20,30]]
⑧ 强制位置参数:\之前的参数必须使用位置参数,*之后的参数必须使用关键字参数,中间的参数既可以选择位置参数、也可以选择关键字参数
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
f(10, 20, 30, d=40, e=50, f=60)
⑨ 匿名函数 lambda:一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式,基本使用如下
x = lambda a, b, c : a + b + c
print(x(5, 6, 2)) # 13
lambda 函数通常与 map()、filter() 和 reduce() 等一起使用,以便在集合上执行操作
numbers = [1,