05 2018 档案

摘要:用 timeit.Timer.timeit() 方法来测试代码的运行时间: 测试一下append 和 insert 哪一个效率更高, 实例化Timer类时,第一个参数 是字符串类型,表示的是执行函数的语句. 第二个参数是设置,需要 从当前模块导入一个测试函数. 因为并不是在这个文件中执行的. 调用 阅读全文
posted @ 2018-05-30 16:21 cccy0 阅读(2666) 评论(0) 推荐(0)
摘要:算法的五大特性 : 1. 输入, 0 个或多个 2. 输入 1 个或多个 3. 有穷性 4. 确定性 5. 可行性 如果一个算法执行效率(步骤) 标记成 T(n) = n^3 * 2 ,那么这个2 可以看作一个常数 k ,就可以写成 T(n) = n^3 * k 可以看出,如果改变常数k的值,并不会 阅读全文
posted @ 2018-05-30 15:46 cccy0 阅读(552) 评论(0) 推荐(0)
摘要:re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 re.search 扫描整个字符串并返回第一个成功的匹配。 替换: re.sub(pattern, repl, string, count=0, flags=0) 参数: patter 阅读全文
posted @ 2018-05-30 14:11 cccy0 阅读(264) 评论(0) 推荐(0)
摘要:TCP 三次握手: SYN --> SYN+ACK --> ACK 四次挥手: FIN --> ACK (FIN) --> ACK TCP十种状态: LISTEN SYN_SENT SYN_RECV ESTABLISHED FIN_WAIT1 FIN_WAIT2 CLOSE_WAIT LAST_AC 阅读全文
posted @ 2018-05-27 12:23 cccy0 阅读(176) 评论(0) 推荐(0)
摘要:tcp和udp对比起来.还是tcp相对稳定一些,但是因为有三次挥手和四次握手,以及确认包(ack)的存在,可能在速度上会比udp慢. 用python的socket模块可以建立tcp服务端: 其中 listen() 可以把建立的套接字变成被动监听的状态. accept() 这一步会导致堵塞,等待客户端 阅读全文
posted @ 2018-05-26 15:07 cccy0 阅读(242) 评论(0) 推荐(0)
摘要:socket.socket() 可以创建一个套接字: 简单的发送和接收信息的socket程序. 另: 用 struct.pack() 打包 ,用 unpack() 解包. 还可以直接广播: 阅读全文
posted @ 2018-05-25 23:18 cccy0 阅读(167) 评论(0) 推荐(0)
摘要:创建进程的方式中有个 callback ,也就是回调. 看代码: 主进程 一直在重复 print(' 主进程-pid=%d ' %os.getpid()) 这一句话, 当子进程 执行完 test 之后,有个返回值 haha 然后主进程放下手中的工作去执行 test2 ,返回值就是传进去的参数 .这就 阅读全文
posted @ 2018-05-25 00:26 cccy0 阅读(349) 评论(0) 推荐(0)
摘要:线程之间,全局变量可以共享,但是局部变量依然是不共享的,线程的创建方式: threading.Thread(),还可以定义一个类继承Thread,重写他的run方法,具体和进程的写法一样. 那么,线程之前全局变量共享,如果两个线程同时修改一个全局变量,就会有一些麻烦,所以需要用到互斥锁: Lock( 阅读全文
posted @ 2018-05-24 23:51 cccy0 阅读(195) 评论(0) 推荐(0)
摘要:在类unix操作系统下,可以用 os.fork() 创建一个新的进程,windows系统不可以: 在执行了 os.fork() 这一句之后,会有两个进程同时向下执行, 返回的 ret 分别是 0(子进程)的 和 大于0(父进程)的 , getpid() 是获取当前进程的pid getppid() 是 阅读全文
posted @ 2018-05-21 23:37 cccy0 阅读(250) 评论(0) 推荐(0)
摘要:在类 里面,其实并没有方法这个东西,所有的东西都保存在属性里面,所谓的调用方法其实是类里面的一个同名属性指向了一个函数(方法),返回的是函数的引用,再用 函数() 这种方式就可以调用它 在调用实例的方法的时候,实际上给对象传过去的只是一个字符串而已, 比如 t = Test() , 假设 func 阅读全文
posted @ 2018-05-20 16:09 cccy0 阅读(8664) 评论(0) 推荐(2)
摘要:python的垃圾回收机制是以引用计数为主,加上标记-清除,分代收集等辅助方式组成的,如果想打开gc功能,需要 import gc 模块 ,然后 gc.enable() 就打开了这个功能,关闭是 gc.disable() . 查看一个对象的引用计数: sys.getrefcount() 总是会比实际 阅读全文
posted @ 2018-05-19 21:59 cccy0 阅读(1482) 评论(0) 推荐(0)
摘要:类在创建对象时,会调用 __init__ 初始化一些东西 , 然后 如果类中定义了 __call__ 方法,可以直接用 对象() 这种方法调用,所以可以用类来装饰函数: 首先 @Test 就是 test = Test(test) 先创建了Test类的一个对象 这个时候 test 就不是指向函数了,而 阅读全文
posted @ 2018-05-19 15:04 cccy0 阅读(246) 评论(0) 推荐(0)
摘要:实例在创建出来之后,可以动态的添加属性和方法, 那如果想要限制添加的实例属性,可以用一下 __slots__ 这个东西: 在添加 name, age 的时候都没有问题 ,在添加 addr 的时候,会限制添加,就算在 __init__ 里面添加也不行. 需要注意的是,对继承这个父类的子类没有任何作用. 阅读全文
posted @ 2018-05-19 13:47 cccy0 阅读(214) 评论(0) 推荐(0)
摘要:给对象添加实例属性,可以直接这样 t.age = 18 ( 假设 t = Test() ) 给类添加类属性 , 也可以直接这样 Test.age = 18 那给对象添加实例方法,可以在类外面先定义一个函数 然后 用 types.MethodType() 方法 把 函数绑定到对象的一个属性上面: 这个 阅读全文
posted @ 2018-05-19 13:38 cccy0 阅读(296) 评论(0) 推荐(0)
摘要:一个类中,假如一个私有属性,有两个方法,一个是getNum , 一个是setNum 它,那么可以用 Property 来使这两个方法结合一下,比如这样用 num = property(getNum, setNum) 那么 如果创建一个对象 t = Test() , t.num 这样就相当于调用了 g 阅读全文
posted @ 2018-05-18 18:40 cccy0 阅读(225) 评论(0) 推荐(1)
摘要:sys模块中的 argv 保存的是当你运行一个py文件的时候给他传递进去的参数,如: 他会保存传递进去的参数,第一个参数默认就是执行文件的路径和文件名,加的多个参数会以空格来区分开.保存在这个列表中. sys.path 中保存的是默认模块的搜索路径,里面是这样的: 如果有自己的模块,和主要的文件不在 阅读全文
posted @ 2018-05-17 13:54 cccy0 阅读(272) 评论(0) 推荐(0)
摘要:异常处理方法一般为: 可以用 raise 抛出一个异常,以下是一个输入字符太短的异常例子: 如果输入字符长度小于3,那么将会抛出 ShortInputException 异常: 注意 如果异常处理时 再次 使用 raise 后面什么都没有,那么代表把这个异常还给系统,让解释器用默认的方式处理它. 阅读全文
posted @ 2018-05-16 23:06 cccy0 阅读(5794) 评论(0) 推荐(0)
摘要:__new__ : 这个方法的作用主要是创建一个实例,在创建实例时首先会调用 __new__方法 ,然后调用__init__对实例进行初始化, 如果想修改 __new__ 这个方法,那么最后要 return 调用一下父类的 __new__ 方法,因为里面有创建实例的过程,除非你在自定义的 __new 阅读全文
posted @ 2018-05-16 21:38 cccy0 阅读(590) 评论(0) 推荐(0)
摘要:类属性 定义在类里面,方法外面的属性,一般属于这个类,如下面的 num 就是类属性: 类属性用 实例.类属性 或者 类.类属性 都可以访问, 如 a = Test() 用 a.num 可以访问 ,但是如果这个实例有一个实例属性 self.num 那么这样访问的其实是 self.num , 所以一般用 阅读全文
posted @ 2018-05-15 21:51 cccy0 阅读(328) 评论(0) 推荐(0)
摘要:1.继承,调用父类属性方法 在python里面,继承一个类只需要这样写: 这样Cat就有了Animal的所有属性和方法,调用的时候直接调用就可以了: 这个时候,如果子类想重写父类的方法,可以直接重写: 如果想调用父类的 heshui 这个方法,可以用 super() : 2.强制调用父类私有属性方法 阅读全文
posted @ 2018-05-15 11:42 cccy0 阅读(34325) 评论(1) 推荐(1)
摘要:__init__:当实例化一个类的时候,首相会执行__new__方法创建一个对象,接下来会执行__init__方法对对象的一些属性进行初始化. 所以如果对象有属性,一般会直接写在__init__方法里面: __str__:当实例化一个类之后,就有了一个对象的引用,如 test = Test() 这个 阅读全文
posted @ 2018-05-14 23:08 cccy0 阅读(412) 评论(0) 推荐(0)
摘要:对于列表这样的可变类型来说,对它操作是不会改变内存地址的. 若列表里面存的元素是整数这样的不可变类型,若修改这个元素那地址还是会改变,如: 这个时候改变 a 列表第一个元素的值: 可以看出,b没有受任何影响,因为元素类型是不可变类型(整数) 但是如果元素类型是可变类型,如列表: 现在如果改变a列表的 阅读全文
posted @ 2018-05-10 00:08 cccy0 阅读(3635) 评论(1) 推荐(0)
摘要:copy : 相当于只是拷贝表面一层,如果里面还有深层次的引用,那么也是直接拷贝引用的地址,而且如果拷贝对象是不可变类型比如元组,那么也是直接拷贝引用. deepcopy: 无论是拷贝可变类型还是不可变类型,无论是里面嵌套了多深层次的引用关系,统统复制一份,在新的空间中存储起来. 之前在廖雪峰老师的 阅读全文
posted @ 2018-05-08 02:07 cccy0 阅读(390) 评论(0) 推荐(0)
摘要:话不多,上例子 没什么问题,每次循环都要修改一次列表, 下个例子 .....不想说话,这个坑踩了俩回了= = 原因是等号= 这个东西右边东西计算完成之后才会赋值(引用)给左边... 第一个例子每次循环都有一个赋值语句: L[i] = L[i] + L[i-1] 而下边这个列表生成式需要全部生成完之后 阅读全文
posted @ 2018-05-08 00:34 cccy0 阅读(515) 评论(0) 推荐(0)
摘要:1. debug:在app.run()里面加上app.run(debug=True), 在浏览器中调试的时候可以直接显示出错误. 2. 在url中传递参数,可以这样 3. 根据视图函数来找url地址: 4. 跳转/重定向: 5. 模板: 6. 模板传参: 7. jinja2 语句: 8. jinja 阅读全文
posted @ 2018-05-04 23:01 cccy0 阅读(263) 评论(0) 推荐(0)