文档地址
https://liaoxuefeng.com/books/python/oop/index.html
一、函数默认参数
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
# 1.没有写默认值的是必须传递的
enroll('Sarah', 'F')
# 2.写了默认值的传递了,就覆盖默认值
enroll('Bob', 'M', 7)
# 3.当默认参数的位置不一样时,需要指定变量名
enroll('Adam', 'M', city='Tianjin')
二、切片
# 1.默认索引0开始,不包括右边数字,取出0,1,2索引的值
L[:3]
# 2.取出最后10个值
L[-10:]
# 3.取到倒数第二个
L[:-2]
# 4.取全部
L[:]
# 5.全部数据,步长为2取
L[::2]
# 6.前10个数,步长为2取
L[:10:2]
三、for循环与迭代
from collections.abc import Iterable
isinstance('abc', Iterable) # str是否可迭代
True
四、列表生成式
# 把要生成的元素x * x放到前面操作
[x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
五、生成器
# 节约内存
通过列表生成式,我们可以直接创建一个列表。
但是,受到内存限制,列表容量肯定是有限的。
而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,
如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
# 用法:把一个列表生成式的[]改成()
>>> g = (x * x for x in range(10))
>>> for n in g:
... print(n)
六、生成器函数(yiled关键字)
函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator函数
generator的函数,在每次调用next()的时候执行,
遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
def odd():
print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5)
七、*args-元组, **kwargs-字典
# 传递的参数,解包为元组,解包为字典
def example(a, b, *args, c=10, **kwargs):
print(f"a={a}, b={b}, args={args}, c={c}, kwargs={kwargs}")
# 调用示例
example(1, 2, 3, 4, c=20, d=100, e="hello")
a=1, b=2, args=(3, 4), c=20, kwargs={'d': 100, 'e': 'hello'}
八、类
1.封装
1.封装
# __init__:构造方法,初始化方法
# __name,表示私有属性
class Student(object):
aa: str # 声明实例属性类型
def __init__(self, name, gender):
self.name = name
self.gender = gender
def get_name(self):
return self.__name
def get_score(self):
return self.__score
def set_score(self, score):
self.__score = score
bart = Student('Bart', 'male')
2.继承和多态
1.子类继承父类,拥有父类的方法
2.子类对父类的方法进行重写,叫做多态
十、错误处理
try:
print('try...')
r = 10 / 0
print('result:', r)
except ZeroDivisionError as e:
print('except:', e)
十一、日志(结合错误处理使用)
1.使用方法
import logging
1.基础使用
#debug,info,warning,error等几个级别
logging.basicConfig(level=logging.INFO) # 定义日志级别的阈值,比这个低的级别会输出
2.创建子模块日志器
命名日志器:通过logging.getLogger(name)创建的子日志器
3.进阶配置:自定义格式 + 输出到文件(同时输出到控制台)
logging.basicConfig(
level=logging.INFO,
# 日志格式:时间 - 日志器名称 - 级别 - 模块名 - 日志内容
format="%(asctime)s - %(name)s - %(levelname)s - %(module)s - %(message)s",
# 时间格式
datefmt="%Y-%m-%d %H:%M:%S",
# 输出目标:同时输出到文件和控制台(默认只输出到控制台)
handlers=[
logging.FileHandler("flight_rag.log", encoding="utf-8"), # 输出到文件
logging.StreamHandler() # 输出到控制台
]
)
4.使用,在可能出错的节点
2.级别说明
级别 数值 是否输出(level=INFO 时)
DEBUG 10 ❌ 过滤
INFO 20 ✅ 输出
WARNING 30 ✅ 输出
ERROR 40 ✅ 输出
CRITICAL 50 ✅ 输出
十二、IO概念
程序和外部设备之间的数据交换、
只要程序和 "内存 / CPU 之外的东西" 做数据交互,就是 IO 操作。
十三、文件读写
1.文件读操作
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
with open('/path/to/file', 'r') as f:
print(f.read())
2.文件写操作
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')