摘要:查看系统里过期的python库,可以用pip命令 但此命令不支持全局全部库升级。 在stackoverflow上有人提供了批量更新的办法,一个循环就搞定(注意--upgrade后面的空格) pip如果升级到10.0以后需要用以下方法批量更新:
阅读全文
摘要:\d - Digit (0-9) \D - Not a Digit (0-9) \w - Word Character (a-z, A-Z, 0-9, _) \W - Not a word Character \s - Whitespace (space, tab, \n) \S - Not Whitespace \b - Word Bou...
阅读全文
摘要:(一)使用List Comprehension的好处 在了解Python的List Comprehension之前,我们习惯使用for循环创建列表,比如下面的例子: 可是在Python中,我们有更简洁,可读性更好的方式创建列表,就是List Comprehension: 我们也可以用map加上lam
阅读全文
摘要:(一)浅复制 复制列表最简单的方式是使用内置类型的构造方法: 对于列表和其他可变序列来说,也可以使用[:]: 然而构造方法和[:]都是浅复制,其复制原理如下图所示: 在上面的列表中,有元素是可变的,这可能导致意想不到的问题: 比如我们现在执行语句 l1[1].remove(2) 其结果如下图: 对l
阅读全文
摘要:函数内省(function introspection) 除了__doc__属性, 函数对象还有很多属性,对于下面的函数,可以使用dir()查看函数具有的属性: 其中大多数是Python常规类都有的属性,下面重点看看常规对象没有而函数对象有的属性: 对于上面列出的函数特有属性,说明如下: 接下来我们
阅读全文
摘要:Python 最好的特性之一是提供了极为灵活的参数处理机制,而且Python3进一步提供了keyword-only 参数。与之密切相关的是,调用函数时使用*, **展开可迭代对象,映射到单个参数。 下面通过代码示例展示这些特性: 上面定义的tag函数的参数: (1)name是定位参数(Positio
阅读全文
摘要:除了用户定义的函数,调用运算符(即 ())还可以应用到其他对象上。如果想判断对象能否调用,可以使用内置的 callable() 函数。Python 数据模型文档列出了 7 种可调用对象。(1)用户定义的函数 使用 def 语句或 lambda 表达式创建。 (2)内置函数 使用 C 语言(CPyth
阅读全文
摘要:在了解闭包之前,我们先来看Python里变量的作用域 (一)变量作用域 在下面的示例中,我们定义一个函数,包含两个变量a和b,b在函数里没有定义 b没有定义,出现以上的错误并不奇怪 如果我们先给全局变量b赋值,再调用f1呢? 可见程序并没有报错,可以正确的打印b的值 我们再看一个示例: 结果很让人惊
阅读全文
摘要:(一) 装饰器基础知识 什么是Python装饰器?Python里装饰器是一个可调用的对象(函数),其参数是另一个函数(被装饰的函数) 假如有一个名字为somedecorator的装饰器,target是被装饰的函数: 上面代码的效果和下面的书写一样: @somedecorator只是语法糖,工作原来就
阅读全文
摘要:Pyhton中序列类型支持切片功能,比如list: tuple也是序列类型,同样支持切片。 (一)我们是否可以使自定义类型支持切片呢? 在Python中创建功能完善的序列类型不需要使用继承,只要实现符合序列协议的方法就可以,Python的序列协议需要__len__, __getitem__两个方法,
阅读全文
摘要:关于Python的memoryview内置类,搜索国内网站相关博客后发现对其解释都很简单, 我觉得学习一个新的知识点一般都要弄清楚两点: 1, 什么时候使用?(也就是能解决什么问题) 2,如何使用? 对照Fluent Python一书2.9.2 以及网上相关资料后,对memoryview内置类做一些
阅读全文
摘要:Fluent Python一书9.4节比较了 Classmethod 和 Staticmethod 两个装饰器的区别: 给出的结论是一个非常有用(Classmethod), 一个不太有用(Staticmethod). 今天我们就对这两个装饰器做更深入的了解和比较, (一) Classmethod:
阅读全文
摘要:Fluent Python 9.6节讲到hashable Class, 为了使Vector2d类可散列,有以下条件: (1)实现__hash__方法 (2)实现__eq__方法 (3)让Vector2d向量不可变 如何让Vector2d类实例的向量只读呢?可以使用property,如下所示: 现在我
阅读全文
摘要:在Fluent Python一书第八章有一个示例,未看书以先很难理解这个示例运行的结果,我们先看结果,然后再分析问题原因: 定义了如下Bus类: 创建两个Bus 类实例,bus1, bus2 假如bus1接到一个一名乘客Alice: 此时我们看看bus2里的乘客: bus2本应该是空的,但是此时却有
阅读全文
摘要:paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。 由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可
阅读全文
摘要:如果安装python3时出现 因为没有安装OpenSSL,yum安装openssl-devel 重新编译: 安装scapy 安装完成后运行scapy: 解决Can't load Python libreadline or completer的问题: 再次运行scapy,这时已经支持自动补全了:
阅读全文
摘要:Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。 首先我们看看itertools模块提供的几个“无限”迭代器, 因为count()会创建一个无限的迭代器,所以上述代码会打印出自然数序列,根本停不下来,只能按Ctrl+C退出 islice() 正好适用于在迭代器和生成器
阅读全文
摘要:你想在迭代一个序列的同时跟踪正在被处理的元素索引?内置的enumerate() 函数可以很好的解决这个问题: 为了按传统行号输出(行号从1 开始),你可以传递一个开始参数: 利用enumerate()函数,在你遍历文件时想在错误消息中使用行号定位时候非常有用: enumerate() 函数返回的是一
阅读全文
摘要:在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: 可以随时修改变量,比如把age改成20,但是一旦程序结束,变量所占用的内存就被操作系统全部回收。如果没有把修改后的'Bill'存储到磁盘上,下次重新运行程序,变量又被初始化为19。很多游戏有存档的功能,就是使用的序列化,将用户的状
阅读全文
摘要:要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识。 Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子
阅读全文