鱼C论坛

 找回密码
 立即注册

[技术交流] py3000愉快的开始

[复制链接]
 楼主| 发表于 2017-9-2 06:00:30 | 显示全部楼层

031永久存储:腌制一缸美味的泡菜

本帖最后由 摆渡终极鉴黄师 于 2017-9-2 06:15 编辑

用pickle算法把列表计算出存进去的二进制文件,例如
>>> import pickle
>>> my_list = [233, 666, '里番', ['磁力链接']]
>>> 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)
>>> [233, 666, '里番', ['磁力链接']]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-3 08:24:05 | 显示全部楼层

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 = [1, 2, 3]
>>> my_list[3]
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    my_list[3]
IndexError: list index out of range
>>>

FloatingPointError        浮点计算错误

GeneratorExit                generator.close()方法被调用的时候

ImportError                导入模块失败的时候

IndexError                索引超出序列的范围

KeyError                        字典中查找一个不存在的关键字,例如
>>> my_list[2]
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
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-4 08:04:39 | 显示全部楼层

033异常处理:你不可能总是对的2(上)

本帖最后由 摆渡终极鉴黄师 于 2017-9-5 11:11 编辑

try-finally语句
try:
        检测范围
except Exception[as reason]:
        出现异常(Exception)后的处理代码
finally:
        无论是否产生异常都会被执行的代码
——————————————————
try:
    sum = 1 + '1'
    f = open('我为什么是一个文件.txt')
    print(f.read())
    f.close()
except (OSError, TypeError):
    print('文件出错啦')
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-5 09:04:23 | 显示全部楼层

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: 除数为零的异常
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-6 20:49:34 | 显示全部楼层

034丰富的else语句及简洁的with语句

本帖最后由 摆渡终极鉴黄师 于 2017-9-6 20:51 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-9-7 17:01:16 | 显示全部楼层

035图形用户界面入门:EasyGui 1

本帖最后由 摆渡终极鉴黄师 于 2017-9-7 20:24 编辑

EasyGui是运行在Tkinter上并拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序,并也拥有自身的事件循环,因此当两者同时运行的时候,有可能会发生冲突,且带来不可预测的结果。因此如果你发现你的EasyGui程序有这样的问题,请尝试在IDLE外去运行你的程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-8 14:15:37 | 显示全部楼层

035图形用户界面入门:EasyGui 2

本帖最后由 摆渡终极鉴黄师 于 2017-9-20 14:38 编辑

http://bbs.fishc.com/forum.php?m ... peid%26typeid%3D403
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-9 11:10:42 | 显示全部楼层

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("困了,睡了,晚安~")
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-10 13:26:22 | 显示全部楼层

036类和对象:给大家介绍对象(下)

本帖最后由 摆渡终极鉴黄师 于 2017-9-11 17:07 编辑

面相对象的三大特性:封装,继承,多态
封装:是面向对象方法的重要原则,就是把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,就是把不想告诉或者不该告诉别人的东西隐藏起来,把可以告诉别人的公开,别人只能用我提供的功能实现需求,而不知道是如何实现的。增加安全性

继承:是面向对象最显著的一个特性,继承是从已有的类中派生出新的类称为子类,子类继承父类的数据属性和行为,并能根据自己的需求扩展出新的行为,提高了代码的复用性

多态:指允许不同的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。封装和继承几乎都是为多态而准备的,在执行期间判断引用对象的实际类型,根据其实际的类型调用其相应的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-11 17:17:54 | 显示全部楼层

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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-12 19:50:01 | 显示全部楼层

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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-13 20:31:33 | 显示全部楼层

037类和对象:面向对象编程(3)

在Python中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-14 21:37:14 | 显示全部楼层

037类和对象:面向对象编程(4)

本帖最后由 摆渡终极鉴黄师 于 2017-9-14 22:06 编辑

python的私有机制是“伪”私有,python的类是没有权限控制的,不像其他的编程语言,所以变量是可以被外部调用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-16 22:34:37 | 显示全部楼层

038类和对象:继承(上)

本帖最后由 摆渡终极鉴黄师 于 2017-9-17 12:40 编辑

class DerivedClassName(BaseClassName),例如
                子类↑                         ↑父类
>>> class Parent:
        def hello(self):
                print("正在调用父类的方法...")

               
>>> class Chlid(Parent):
        pass

>>> p = Parent()
>>> p.hello()
正在调用父类的方法...
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-17 12:40:09 | 显示全部楼层

038类和对象:继承(下)

import random as r

class 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("太撑了,吃不下了!")

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-18 22:43:50 | 显示全部楼层

039类和对象:拾遗

本帖最后由 摆渡终极鉴黄师 于 2017-9-18 23:44 编辑

Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-20 13:44:05 | 显示全部楼层

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
>>>
-        不要试图在一个类里边定义出所有能想到的特性和方法,应该利用继承和组合机制来进行扩展。
-        用不动的词性命名,如属性名用名词,方法名用动词。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-21 12:46:04 | 显示全部楼层
本帖最后由 摆渡终极鉴黄师 于 2017-9-21 17:22 编辑

组合:把类的实例话放到一个新类里面
python的继承很有用,但容易把代码复杂化以及依赖隐含继承。因此,可以用组合代替。
直接在类定义中把需要的类放进去实例化就可以了

组合:“有一个”,例如,水池里有一个乌龟,天上有一个鸟。
继承:“是一个”,例如,青瓜是瓜,女人是人,鲨鱼是鱼。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-23 23:47:56 | 显示全部楼层

040类和对象:一些相关的BIF(上)

本帖最后由 摆渡终极鉴黄师 于 2017-9-26 17:47 编辑

issubclass(class, classinfo)

1、(非严格性的检查)一个类被认为是其自身的子类
2、classinfo可以是类对象组成的元祖,只要class与其中任何一个候选类的子类,则返回True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-24 21:03:30 | 显示全部楼层
本帖最后由 摆渡终极鉴黄师 于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 11:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表