2016年07月26日
我们先看一下如下代码:
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...
阅读更多
2016年07月21日
Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的。包内导入即是包内的模块导入包内部的模块。
Python import 的搜索路径
在当前目录下搜索该模块
在环境变量 PYTHONPATH 中指定的路径列表中依次搜索
在 Python 安装路径的 lib 库中搜索
Python import 的步骤
python 所有加载的模块信息都存放在 sys.modules 结构中,当 import 一个模块时,会按如下步骤来进行
如果是 import A,检查 sys.modules 中是否已经有 A,如果有则不加载,如果没有则为 A 创建 module 对象,...
阅读更多
2016年07月04日
在 Python 中,一切皆对象。属性访问可以理解为是从一个已有的对象中获得另一个对象的方法。对象属性的访问涉及到对象的 __dict__ 属性、描述符等概念,以及 __getattribute__、__getattr__ 等方法。
对象字典属性
Python 中的对象有一个 __dict__ 属性,其是一个字典类型,对象当前可用的属性和方法都保存在合格字典中。它存储着对象属性的名称与值的键值对。示例(在 Python 2.7 环境测试):
>>> class C(object):
... x = 1
...
>>> C.__dict__
...
阅读更多
2016年06月30日
argparse 是 Python 标准库中用来解析命令行参数和选项的模块,其是为替代已经过时的 optparse 模块而生的,该模块在 Python2.7 中被引入。argparse模块的作用是用于解析命令行参数。
创建解析器
使用 argparse 解析命令行参数时,首先需要创建一个解析器,创建方式如下所示:
import argparse
parser = argparse.ArgumentParser()
ArgumentParser 的原型如下所示:
class ArgumentParser(self, prog=None, usage=None, description...
阅读更多
2016年06月24日
之前用 Python 写过一个脚本,用来处理上千万用户的一些数据,其中有一个需求是统计用户的某一数据的去重数量。为了加快程序的速度,我启用了多进程。但不幸的是,程序跑了近一个星期,还没处理完。这时,我感觉到了不对,于是开始查看程序的性能瓶颈。
对于统计去重数,我是将用户的数据放到一个列表中,然后用 len(set(data)) 去统计去重数量。刚开始我以为这的数据量并不大,每个用户的数据不会过百,我并没有注意到有的用户会有上万条的数据,因此消耗了大量的时间(其实我的脚本消耗时间最大的地方是因为从远程 redis 中取大量数据时发生长时间的阻塞,甚至连接超时,最后我采用的方式分而治之,每...
阅读更多
2016年06月24日
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...
阅读更多
2016年06月23日
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 =...
阅读更多
2016年06月14日
Python 的列表(list)内部实现是一个数组,也就是一个线性表。在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n)。对于大数据量,则可以用二分查找进行优化。二分查找要求对象必须有序,其基本原理如下:
1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;
2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
3.如果在某一步骤数组为空,则代表找不到。
二分查找也称为折半查找,算法每一次比较都使搜索范围缩小一半, 其 时间复杂度为 O(logn)。
我们分别用...
阅读更多