第五章
条件,循环,其他语句
5.1print , import 的更多信息
- 使用逗号输出
print ‘Age’:42 -> Age:42
1,2,3 -> (1,2,3)
print 1,2,3 ->1 2 3
print(1,2,3)->(1,2,3)
输出文本和变量值,又不使用字符串格式化。
name = ‘Gumby’,salution = ‘huty’
print name, salution ->Gumby,huty
5.2序列解包
- x,y,z = 1,2 ,3
print x, y, z -> 1 2 3
- 交换值
x , y = y, x - 链式赋值
- 增量赋值
x += 2
fnord = ‘foo’
fonrd += ‘bar’
- 交换值
比较运算符
函数 | 作用 | 例子 |
---|---|---|
相等运算符 | == | 两个字符串或数字是否相等 |
is:同一性运算符 | x=y=[1,2],z=[1,2]x,y,z相等但只有x,y同一 | |
in:成员资格运算符 | 判断一个子串是否被包含在母串中 | |
字符串和序列比较 | ‘Alpha’ < ‘Beta’ | |
布尔运算 | 有短路运算特征 | x and y, x or y |
assert:断言 | 设置检查点,让程序适时崩溃 | age = -1 assert 0 < age < 100,这时会出现崩溃 |
循环 | for,while | 可以循环遍历字典元素 |
pass | 有时条件为真时却什么也不做,用一个pass不出错 | if true: pass |
del | 只删除列表名称,删除他们的关联关系而已 | x=[1,2],x = y,del x,但y不会被删除 |
exec | 动态创建代码,执行一个语句,可以将代码放置在命名空间中 | |
eval | 计算表达式 | eval(raw_input(“enter an number: “)): 1+2*3 |
第六章 抽象
- 参数问题
- 只有列表的参数是可以改变的.
- 其他的参数只能作为局部变量,不可改变,当要使用全局参数时要用global表明。
收集参数
print_param(*param)能收集用逗号分隔的多个参数。
print_param(**param)能收集以关键字跟值出现的字典形式的参数。
print_param(x,y,z=3,*p,**pa)
print x,y,z
print p
print pa
print_param(1,2,3,5,6,7,foo=1,bar=2)
123
(5,6,7)
{‘foo’:1, ‘bar’:2}参数收集的逆过程:分配他们在另一端的使用。
def add(x,y): return x+y: 定义一个函数
param = (1,2): 定义一个参数数组
add(*param): 3 使用- 作用域
- 内建的var()函数可以返回上条语句定义的变量:
x = 1
scope = vars()
scope[‘x’]: 1
scope[‘x’] += 1
x: 2
除了全局作用域外,每个函数调用都会创建一个新的作用域
- 内建的var()函数可以返回上条语句定义的变量:
- 递归
先找出终止条件,再把问题细分直到到达终止条件。
应用与二分查找等。
第七章 更加抽象
7.1 多态
对不同类的对象使用同样的操作。
‘abc’.count(‘a’):1
[1,2,’a’].count(‘a’):1
7.2 封装
指程序中的其他部分隐藏对象的具体实现细节的原则。
7.3 继承
子类继承父类
7.4 特性,函数和方法
在函数前面加 “__”表示私有化函数
在类外访问私有化函数:实例名.类名_私有化方法名()
7.5 指定超类
子类可以扩展超类的定义,也可以重写超类的方法。
7.6 检查继承
issubclass(1,2):1是否是2的子类
isinstance(1,2):检查1是否是2的实例
类名.bases:查找它的基类
7.7 多个超类
多重继承时,后继承的会重写先继承的方法
7.8 本章新函数
函数 | 作用 |
---|---|
callable(object) | 确定对象是否可调用 |
getattr(object,name[,default]) | 确定特性的值,可选择提供默认值 |
hasattr(object,name) | 确定是否由给定的属性 |
random.choice(sequence) | 从非空序列中随机选择元素 |
setattr(object,name,value) | 设定对象的给定属性为value |
type(object) | 返回对象类型 |