目录
函数 Function
定义参数
- 定义参数时默认参数必须是不可变的数据类型,比如int、float、bool、string、tuple(元组), etc.
- 默认参数一般在必选参数之后,避免错位。
- 顺序:
必选参数, 默认参数, 可变参数, 命名关键字参数, 关键字参数
def func(a, b, c=0, *args, **kw):
print('a=', a, 'b=', b, 'c=', c, 'args=', args, 'kw=', kw)
print(func(1, 2))
# 输出结果:a= 1 b= 2 c= 0 args= () kw= {}
print(func(1, 2, c=3))
# 输出结果:a= 1 b= 2 c= 3 args= () kw= {}
print(func(1, 2, 3, 'a', 'b'))
# 输出结果:a= 1 b= 2 c= 3 args= ('a', 'b') kw= {}
print(func(1, 2, 3, 'a', 'b', x=4))
# 输出结果:a= 1 b= 2 c= 3 args= ('a', 'b') kw= {'x': 4}
args = (1, 2, 3, 4)
kw = {'x': 5}
print(func(*args, **kw))
# 输出结果:a= 1 b= 2 c= 3 args= (4,) kw= {'x': 5}
Lambda函数
语法:
lambda [arg1[,arg2],....argn]]:expression
sum = lambda arg1, arg2: arg1 + arg2
print(sum(1, 2)) # 结果是:3
OOP特征
- 封装:找到变化并且把它封装起来,就可以在不影响其它部分的情况下修改或扩展被封装的变化部分,这是所有设计模式的基础。封装解决了程序的可扩展性。
- 继承:子类继承父类,可以继承父类的方法及属性,实现了多态以及代码的重用,解决了系统的重用性和扩展性。
- 多态:接口的多种不同的实现方式即为多态。接口的主要目的是为不相关的类提供通用处理服务。这实现了系统的可维护性和可扩展性。
类 Class
定义类
class A:
pass
class A():
pass
class A(object):
pass
"""
Python 3.X 新增属性和方法
__name__ :属性的名字
__doc__ :属性的文档字符串
__get__(object) :获取对象属性值的方法
__set__(object, value) :设置对象属性值的方法
__delete__(object, value) :删除对象属性的方法
"""
继承
(1)子类拥有父类的属性和方法。
(2)子类可以创建自己属性和方法。
(3)子类可以对父类的方法进行覆盖实现。
(4)子类可重新定义父类中的属性。
(5)一个父类可由多个子类继承,一个子类也可继承多个父类。
(6)如果父类定义了__init__()方法,子类也定义了自己的__init__()方法并且还要使用父类的__init__()方法,子类需要显式调用父类的__init__()方法。如果子类需要扩展父类的初始化行为,可以添加__init__()方法参数。
(7)当继承的多个父类中有相同的属性或方法时,会继承最前面的父类的属性或方法。
条件表达式
运算符号
分类 | 运算符 | 数学符号 | 含义 |
---|---|---|---|
关系 | == | = | 等于 |
关系 | != | ≠ \ne = | 不等于 |
关系 | > | > | 大于 |
关系 | < | < | 小于 |
关系 | >= | ⩾ \geqslant ⩾ | 大于等于 |
关系 | <= | ⩽ \leqslant ⩽ | 小于等于 |
成员 | in | ∈ \in ∈ | 存在 |
成员 | not in | ∉ \notin ∈/ | 不存在 |
循环
控制语句
Break | Continue |
---|---|
跳出整个循环 | 跳出本次循环,继续执行下次循环 |
字符串 String
Raw字符串格式
s= r'...'
在raw字符串中,所有的字符都是直接按照字面意思来解释,没有转义字符或者不能打印的字符。
字符串格式化符号
格式化符号 | 含义 |
---|---|
%c | 转换成字符(ASCII码,长度为1) |
%r | 用repr()转化 |
%s | 用str()转化 |
%d / %i | 转化成有符号十进制 |
%u | 转化成无符号十进制 |
%o | 转化成无符号八进制 |
%x / %X | 转化成无符号十六进制 |
%e / %E | 转化成科学技术法 |
%f / %F | 转化成浮点数 |
%g / %G | %e和%f的简写 |
%% | 格式化字符串中带%必须用%%来表示 |
数字格式化符号
格式化符号 | 含义 |
---|---|
{:.2f} | 保留小数点后两位 |
{:+.2f} | 带符号保留小数点后两位 |
{:.0f} | 不保留小数 |
{:0>2d} | 数字补0(填充左边,宽度为2) |
{:x<4d} | 数字补x(填充右边,宽度为4) |
{:,} | 每三位逗号分隔 |
{:.2%} | 百分比 |
{:.2e} | 指数记法 |
{:10d} | 右对齐, 宽度为10 |
{:<10d} | 左对齐, 宽度为10 |
{:^10d} | 中对齐, 宽度为10 |
表达式
列表推导式 List Comprehension
语法:
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
字典推导式
语法:
{键:值 for 迭代变量 in 可迭代对象 [if 条件表达式]}
三元表达式/条件表达式
语法:
表达式(1)为 True 执行语句 if 条件表达式(1) else 表达式(1)为 False 执行语句
元组条件表达式
语法:
(当后面的表达式为假时返回,当后面的表达式为真时返回)[条件表达式]
断言 Assert
常用断言函数
函数名 | 作用 |
---|---|
assertEqual(a,b,msg=msg) | 判断两个值是否相等 |
assertNotEqual(a,b,msg=msg) | 判断两个值是否不等 |
self.assertTrue(a,msg=none) | 判断变量是否为 True |
assertFalse(a,msg=none) | 判断变量是否为 False |
assertIsNone(obj=‘’) | 判断 obj 是否为空 |
assertIsNotNone(obj=‘’) | 判断 obj 是否为非空 |
上下文管理器:with ... as ...
语句
作用:
----自动分配并释放资源
语法:
with 表达式 [as 指定一个变量名]:
代码块
代码块
异常捕获
常见异常
异常名 | 意义 |
---|---|
AttributeError | 某个对象没有属性 |
Exception | 通用型异常对象 |
FileNotFoundError | 找不到文件 |
IOError | 输入输出异常 |
IndexError | 索引异常 |
KeyError | 键异常 |
NameError | 对象名称异常 |
SyntaxError | 语法错误 |
TypeError | 类型错误 |
ValueError | 值错误 |
处理异常
分别处理异常
try:
可能出错的代码块
except 异常对象1:
异常处理代码块
except 异常对象2:
异常处理代码块
统一处理异常
try:
可能出错的代码块
except (异常对象1,异常对象2...):
异常处理代码块
直接抛出异常
num1 = 20
num2 = 0
try:
num3 = num1 / num2
except ZeroDivisionError as e:
print(e)
except TypeError as e:
print(e)
else:
print("无异常,会被执行")
Finally 语句
语法:
try:
可能出错的代码块
except:
代码出错执行的代码块
else:
代码正常执行的代码块
finally:
无论代码是否有异常出现都会执行的的代码块