031永久存储:腌制一缸美味的泡菜
本帖最后由 摆渡终极鉴黄师 于 2017-9-2 06:15 编辑用pickle算法把列表计算出存进去的二进制文件,例如
>>> import pickle
>>> my_list = ]
>>> pickle_file = open('my_list.ccav', 'wb')
>>> pickle.dump(my_list, pickle_file)
>>> pickle_file.close()
这样打开,例如
>>> pickle_file = open('my_list.ccav', 'rb')
>>> mylist2 = pickle.load(pickle_file)
>>> print(mylist2)
>>> ]
032异常处理:你不可能总是对的
本帖最后由 摆渡终极鉴黄师 于 2017-9-3 11:24 编辑AssertionError 断言语句(assert)失败,例如
>>> my_list = ['小甲鱼是不是帅哥']
>>> assert len(my_list) > 0
>>> my_list.pop()
'小甲鱼是不是帅哥'
>>> assert len(my_list) > 0
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
assert len(my_list) > 0
AssertionError
>>>
AttributeError 尝试访问未知的对象属性,例如
>>> my_list.fishc
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
my_list.fishc
AttributeError: 'list' object has no attribute 'fishc'
>>>
EOFError input()读取到EOF却没有接受任何数据,例如
>>> my_list =
>>> my_list
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
my_list
IndexError: list index out of range
>>>
FloatingPointError 浮点计算错误
GeneratorExit generator.close()方法被调用的时候
ImportError 导入模块失败的时候
IndexError 索引超出序列的范围
KeyError 字典中查找一个不存在的关键字,例如
>>> my_list
3
>>> my_dict = {'one':1, 'two':2, 'three':3}
>>> my_dict['one']
1
>>> my_dict['four']
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
my_dict['four']
KeyError: 'four'
>>>
KeyboardInterrupt 用户输入中断键(Ctrl+c)
MemoryError 内存溢出(可通过删除对象释放内存)
NameError 尝试访问一个不存在的变量,例如
NotImplementedError尚未实现的方法
OSError 操作系统产生的一场(例如打开一个不存在的文件)
OverflowError 数值运算超出最大限制
ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾机制回收了的对象
RuntimeError 一般的运行时错误
StopIteration 迭代器没有更多的值
SyntaxError python的语法错误,例如
>>> print 'I love FishC.com'
SyntaxError: Missing parentheses in call to 'print'
>>>
IndentationError 缩进错误
TabError Tab和空格混合使用
SystemError Python编译器系统错误
SystemExit python编译器进程被关闭
TypeError 不同类型间的无效操作
UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)
UnicodeError Unicode相关的错误(ValueError的子类)
UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)
UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)
UnicodeTranslateError Unicode转换时的错误(UnicodeError的子类)
ValueError 传入无效的参数
ZeroDivisionError 除数为零,例如
>>> 5/0
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
5/0
ZeroDivisionError: division by zero
>>>
033异常处理:你不可能总是对的2(上)
本帖最后由 摆渡终极鉴黄师 于 2017-9-5 11:11 编辑try-finally语句
try:
检测范围
except Exception:
出现异常(Exception)后的处理代码
finally:
无论是否产生异常都会被执行的代码
——————————————————
try:
sum = 1 + '1'
f = open('我为什么是一个文件.txt')
print(f.read())
f.close()
except (OSError, TypeError):
print('文件出错啦')
033异常处理:你不可能总是对的2(下)
本帖最后由 摆渡终极鉴黄师 于 2017-9-5 10:56 编辑raise语句可以自己引发一个异常,例如
>>> raise ZeroDivisionError('除数为零的异常')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
raise ZeroDivisionError('除数为零的异常')
ZeroDivisionError: 除数为零的异常
>>>
034丰富的else语句及简洁的with语句
本帖最后由 摆渡终极鉴黄师 于 2017-9-6 20:51 编辑略
035图形用户界面入门:EasyGui 1
本帖最后由 摆渡终极鉴黄师 于 2017-9-7 20:24 编辑EasyGui是运行在Tkinter上并拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序,并也拥有自身的事件循环,因此当两者同时运行的时候,有可能会发生冲突,且带来不可预测的结果。因此如果你发现你的EasyGui程序有这样的问题,请尝试在IDLE外去运行你的程序
035图形用户界面入门:EasyGui 2
本帖最后由 摆渡终极鉴黄师 于 2017-9-20 14:38 编辑http://bbs.fishc.com/forum.php?mod=viewthread&tid=46069&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
036类和对象:给大家介绍对象(上)
本帖最后由 摆渡终极鉴黄师 于 2017-9-12 19:52 编辑类名以大写字母为开头,函数名以小写字母为开头
# 属性
color = 'yellow'
weight = 15
legs = 2
shell = True
mouth = '尖嘴'
# 方法
def fly(self):
print("我正在缓慢的向前飞啊飞")
def bite(self):
print("咬死你咬死你!!!")
def eat(self):
print("有得吃,真舒服")
def sleep(self):
print("困了,睡了,晚安~")
036类和对象:给大家介绍对象(下)
本帖最后由 摆渡终极鉴黄师 于 2017-9-11 17:07 编辑面相对象的三大特性:封装,继承,多态
封装:是面向对象方法的重要原则,就是把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,就是把不想告诉或者不该告诉别人的东西隐藏起来,把可以告诉别人的公开,别人只能用我提供的功能实现需求,而不知道是如何实现的。增加安全性
继承:是面向对象最显著的一个特性,继承是从已有的类中派生出新的类称为子类,子类继承父类的数据属性和行为,并能根据自己的需求扩展出新的行为,提高了代码的复用性
多态:指允许不同的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。封装和继承几乎都是为多态而准备的,在执行期间判断引用对象的实际类型,根据其实际的类型调用其相应的方法
037类和对象:面向对象编程(1)
本帖最后由 摆渡终极鉴黄师 于 2017-9-12 19:52 编辑class Ball:
def setName(self, name):
self.name = name
def kick(self):
print("我叫%s,该死的,谁踢我..." % self.name)
a = Ball()
a.setName('球A')
# 第一个参数self告诉Python是a对象在调用方法,因为是隐藏的并且由Python自己传入,所以我们这里不需要写进来。
b = Ball()
b.setName('球B')
c = Ball()
c.setName('土豆') # 这叫不按套路出牌
a.kick()
b.kick()
c.kick()
037类和对象:面向对象编程(2)
本帖最后由 摆渡终极鉴黄师 于 2017-9-13 20:33 编辑我们把__init__(self)方法称之为构造方法,只要实例化一个对象的时候,那么这个方法就会在对象被创建的时候自动调用,例如
class Ball:
def __init__(self, name):
self.name = name
def kick(self):
print("我叫%s,该死的,谁踢我..." % self.name)
b = Ball('土豆')
b.kick()
037类和对象:面向对象编程(3)
在Python中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的了。037类和对象:面向对象编程(4)
本帖最后由 摆渡终极鉴黄师 于 2017-9-14 22:06 编辑python的私有机制是“伪”私有,python的类是没有权限控制的,不像其他的编程语言,所以变量是可以被外部调用的
038类和对象:继承(上)
本帖最后由 摆渡终极鉴黄师 于 2017-9-17 12:40 编辑class DerivedClassName(BaseClassName),例如
子类↑ ↑父类
>>> class Parent:
def hello(self):
print("正在调用父类的方法...")
>>> class Chlid(Parent):
pass
>>> p = Parent()
>>> p.hello()
正在调用父类的方法...
>>>
038类和对象:继承(下)
import random as rclass Fish:
def __init__(self):
self.x = r.randint(0, 10)
self.y = r.randint(0, 10)
def move(self):
self.x -= 1
print("我的位置是:", self.x, self.y)
class Goldfish(Fish):
pass
class Carp(Fish):
pass
class Salmon(Fish):
pass
class Shark(Fish):
def __init__(self):
super().__init__()
self.hungry = True
def eat(self):
if self.hungry:
print("吃货的梦想就是天天有的吃^_^")
self.hungry = False
else:
print("太撑了,吃不下了!")
039类和对象:拾遗
本帖最后由 摆渡终极鉴黄师 于 2017-9-18 23:44 编辑Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。
039类和对象:拾遗2
本帖最后由 摆渡终极鉴黄师 于 2017-9-20 14:37 编辑属性的名字跟方法名相同,属性会覆盖方法,例如
>>> class c:
def x(self):
print("X-man!")
>>> C = c()
>>> C.x()
X-man!
>>> c.x = 1
>>> c.x
1
>>> c.x()
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
c.x()
TypeError: 'int' object is not callable
>>>
- 不要试图在一个类里边定义出所有能想到的特性和方法,应该利用继承和组合机制来进行扩展。
- 用不动的词性命名,如属性名用名词,方法名用动词。
本帖最后由 摆渡终极鉴黄师 于 2017-9-21 17:22 编辑
组合:把类的实例话放到一个新类里面
python的继承很有用,但容易把代码复杂化以及依赖隐含继承。因此,可以用组合代替。
直接在类定义中把需要的类放进去实例化就可以了
组合:“有一个”,例如,水池里有一个乌龟,天上有一个鸟。
继承:“是一个”,例如,青瓜是瓜,女人是人,鲨鱼是鱼。
040类和对象:一些相关的BIF(上)
本帖最后由 摆渡终极鉴黄师 于 2017-9-26 17:47 编辑issubclass(class, classinfo)
1、(非严格性的检查)一个类被认为是其自身的子类
2、classinfo可以是类对象组成的元祖,只要class与其中任何一个候选类的子类,则返回True 本帖最后由 摆渡终极鉴黄师 于 2017-9-27 21:41 编辑
attr = attribute:属性
hasattr(object, name)#测试一个对象里面是否有指定的属性,第一个参数object是对象,第二个参数name是属性名,例如
>>> class C:
def __init__(self, x=0):
self.x = x
>>> c1 = C()
>>> hasattr(c1,'x')
True