Python 变量赋值问题

我们先看一下如下代码: c = {} def foo(): f = dict(zip(list("abcd"), [1, 2 ,3 ,4])) c.update(f) if __name__ == "__main__": a = b = d = c b['e'] = 5 d['f'] = 6 foo() print(a) print(b) print(c) print(d) 输入结果: {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'f': 6} {'a': 1...

阅读更多

Python 相对导入与绝对导入

Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的。包内导入即是包内的模块导入包内部的模块。 Python import 的搜索路径 在当前目录下搜索该模块 在环境变量 PYTHONPATH 中指定的路径列表中依次搜索 在 Python 安装路径的 lib 库中搜索 Python import 的步骤 python 所有加载的模块信息都存放在 sys.modules 结构中,当 import 一个模块时,会按如下步骤来进行 如果是 import A,检查 sys.modules 中是否已经有 A,如果有则不加载,如果没有则为 A 创建 module 对象,...

阅读更多

Python 对象属性的访问

在 Python 中,一切皆对象。属性访问可以理解为是从一个已有的对象中获得另一个对象的方法。对象属性的访问涉及到对象的 __dict__ 属性、描述符等概念,以及 __getattribute__、__getattr__ 等方法。 对象字典属性 Python 中的对象有一个 __dict__ 属性,其是一个字典类型,对象当前可用的属性和方法都保存在合格字典中。它存储着对象属性的名称与值的键值对。示例(在 Python 2.7 环境测试): >>> class C(object): ... x = 1 ... >>> C.__dict__ ...

阅读更多

Python 模块简介 -- argparse

argparse 是 Python 标准库中用来解析命令行参数和选项的模块,其是为替代已经过时的 optparse 模块而生的,该模块在 Python2.7 中被引入。argparse模块的作用是用于解析命令行参数。 创建解析器 使用 argparse 解析命令行参数时,首先需要创建一个解析器,创建方式如下所示: import argparse parser = argparse.ArgumentParser() ArgumentParser 的原型如下所示: class ArgumentParser(self, prog=None, usage=None, description...

阅读更多

Python 快速统计数据的去重数和去重数据

之前用 Python 写过一个脚本,用来处理上千万用户的一些数据,其中有一个需求是统计用户的某一数据的去重数量。为了加快程序的速度,我启用了多进程。但不幸的是,程序跑了近一个星期,还没处理完。这时,我感觉到了不对,于是开始查看程序的性能瓶颈。 对于统计去重数,我是将用户的数据放到一个列表中,然后用 len(set(data)) 去统计去重数量。刚开始我以为这的数据量并不大,每个用户的数据不会过百,我并没有注意到有的用户会有上万条的数据,因此消耗了大量的时间(其实我的脚本消耗时间最大的地方是因为从远程 redis 中取大量数据时发生长时间的阻塞,甚至连接超时,最后我采用的方式分而治之,每...

阅读更多

Python 模块简介 -- math

Python 的 math 模块提供了一些基本的数学运行功能,例如求弦、求根、求对数等等。一般情况下,我们能够用上的 math 模块的函数不多,常用的函数应该是 fabs、ceil、floor、factorial 等,对于求幂,用 ** 效率更高。 下表是对一些函数的说明: 函数 说明 math.acos(x) 返回 x 的反余弦 math.acosh(x) 返回 x 的反双曲余弦 math.asin(x) 返回 x 的反正弦 math.asinh(x) 返回 x 的反双曲正弦 math.atan(x) 返回 x 的反正切 math.atan2(y, x...

阅读更多

Python3 的一些新特性

Python 3 加入了很多新的特性,使得代码更加简洁,以及运行起来更加高效。这里收集一些很棒的、用得上的新特性。 高级解包 对解包功能进行了增强: >>> a, b, *rest = range(10) >>> a 0 >>> b 1 >>> rest [2, 3, 4, 5, 6, 7, 8, 9] >>> a, *rest, b = range(10) >>> rest [1, 2, 3, 4, 5, 6, 7, 8] >>> *rest, a, b =...

阅读更多

Python 二分查找与 bisect 模块

Python 的列表(list)内部实现是一个数组,也就是一个线性表。在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n)。对于大数据量,则可以用二分查找进行优化。二分查找要求对象必须有序,其基本原理如下: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束; 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。 3.如果在某一步骤数组为空,则代表找不到。 二分查找也称为折半查找,算法每一次比较都使搜索范围缩小一半, 其 时间复杂度为 O(logn)。 我们分别用...

阅读更多