python
January 12, 2025About 3 min
python
切片
a = [1, 2, 3]
a[0 : 2 : 1]
起始下标:终止下标(不包括):步长
enumerate()
for index, item for enumerate(list1):
print(index, item)
'''
0 1
1 3
2 45
'''
sort()
a.sort(key=a.age, reverse=False)
key指定比较的键, reverse默认为False即升序
列表推导式
a = [表达式 for 循环变量 in range if i >= 0]
a = [i * 2 for i in range(10)]
a = [0, 2, ..]
zip()
a = [1, 2]
b = [2, 3]
zip(a, b)
就是把两个列表的对应的下标的值进行组合,可以让其变成元祖,字典等
函数
加类型
def sum(a: int, b: int)-> int:
return a + b
*item
把两个参数放在一个元组中赋值给item
**item
def sum(**nums):
a = 0
for i in nums:
a += i
# 这个**就是收集函数,将剩余的参数放到一个列表中
lambda
lambda 参数: 一个表达式
lambda a: print(a)
类
创建类
class a:
"""类的说明"""
# 这个会挂载到类的属性__doc__
# py中函数以__方法名__的一般是自带一些方法,如构造
# 而且在类中的每个方法都要在第一个参数名为self,表示这个类的实例本身
def __init__(self, a: int):
# 这就是构造方法
修饰词
- 成员
- _单下划线
- __双下划线:保护类型
- 不能通过实例.属性访问
- 但能通过实例.类名__属性名访问
- 方法
- 前后双下划线
- 一些特殊的方法
- 前后双下划线
创建用于计算的属性
class a:
def __init__(self, a: int, b: int):
self.a = a
self.b = b
@property # 加这个装饰器,就能像访问属性一样访问下面的方法,不能有参数就是
def sum(self):
return a + b
# 这玩意有点像js的getter
c = a(1, 2)
c.sum# 3
继承
class a(b):
def __init__(self):
super().__init__()
# 就这样在括号里写继承的类就行了
# 一样可以通过super访问父类的东西
模块
导入模块
import a as 别名 # 这相当于创建了新的命名空间
# 导入a模块
# 使用a.方法或属性访问a模块的东西
from a import * # 在当前的命名空间加入
# 这种相当于把代码放过来一样,可以直接使用对应的方法名或属性访问
包
包可以看做一个特殊的类
只需要在文件中有
__init__.py
这个文件,那就是一个包
导包
就多了一个包名前缀
import 包名.模块名
import package1.utools
小知识点
# 在模块内这样写
if __name__ == '__main__':
pass
# 这是如果从别的包导入的模块,那么就不会运行那个模块中这段里面的代码
# 貌似就是py有运行模块的东西,当前文件为__main__,如果被其他文件导入运行的就是其他的
异常
try:
print(1 / 1)# 可能出现错误的代码
except ZeroDivisionError as e:# 用except 指明对应的出错的类型对应的方法
# 貌似类型不对也会执行,如果有多个except那就执行第一个
print(e)
else:# 如果没有异常,就执行这段代码
print(2222)
finally:
# 你知道的
print(1111111)
手动抛出异常
raise ZeroDivisionError("里面就是上面的e,如果不给出,那就显示原始的")
断言
assert a != 1, "a == 1"
# 当前面的为真,啥也不做,为假就抛出异常,后面的就是信息