Python模块函数以意想不到的方式使用

时间:2008-09-18 13:29:57

标签: python

基于"Split a string by spaces in Python",它使用 shlex.split 巧妙地用引号拆分字符串,我很想听听非显而易见的标准库函数解决的其他常见任务。

如果这变成Module of The Week,那也没关系。

10 个答案:

答案 0 :(得分:6)

我很惊讶地发现你可以使用bisect模块在序列中进行非常快速的二进制搜索。它的文档没有说明任何内容:

  

此模块支持按排序顺序维护列表,而无需在每次插入后对列表进行排序。

用法非常简单:

>>> import bisect
>>> lst = [4, 7, 10, 23, 25, 100, 103, 201, 333]
>>> bisect.bisect_left(lst, 23)
3

你必须记住,在列表中线性查找某些东西比逐项查找更快,而不是对列表进行排序,然后对其进行二进制搜索。第一个选项是O(n),第二个选项是O(nlogn)。

答案 1 :(得分:4)

Oft忽略了模块,用途和技巧:

collections.defaultdict():用于在dict中缺少键时具有默认值。

functools.wraps():用于编写与内省完美匹配的装饰器。

posixpath:POSIX系统的os.path模块。即使在Windows和其他非POSIX系统上,您也可以使用它来操作POSIX路径(包括URI元素)。

ntpath:Windows的os.path模块;可用于在非Windows系统上处理Windows路径。

(另外:macpath,对于MacOS 9及更早版本,os2emxpath用于OS / 2 EMX,但我不确定是否还有人关心。)

pprint:更加结构化的容器repr()打印使调试变得更加容易。

imp:编写自己的插件系统或从任意档案制作Python导入模块所需的所有工具。

rlcompleter:在普通的交互式解释器中获取制表符。只需要“导入readline,rlcompleter; readline.parse_and_bind('tab:complete')”

PYTHONSTARTUP环境变量:可以设置为进入交互式解释器时将在(在主命名空间中)执行的文件的路径;像上面的rlcompleter配方一样有用。

答案 2 :(得分:3)

我使用itertools(特别是循环,重复,链)使python的行为更像R和其他功能/矢量应用程序。通常这可以让我避免Numpy的开销和复杂化。

# in R, shorter iterables are automatically cycled
# and all functions "apply" in a "map"-like way over lists
> 0:10 + 0:2
 [1]  0  2  4  3  5  7  6  8 10  9 11

的Python     #Normal python     在[1]中:范围(10)+范围(3)     出[1]:[0,1,2,3,4,5,6,7,8,9,0,1,2]

## this code is terrible, but it demos the idea.
from itertools import cycle
def addR(L1,L2):
    n = max( len(L1), len(L2))
    out = [None,]*n
    gen1,gen2 = cycle(L1), cycle(L2)
    ii = 0
    while ii < n:
        out[ii] = gen1.next() + gen2.next()
        ii += 1
    return out

In [21]: addR(range(10), range(3))
Out[21]: [0, 2, 4, 3, 5, 7, 6, 8, 10, 9]

答案 3 :(得分:2)

在我得知它之后,我发现struct.unpack是一个解包二进制数据格式的天赐之物!

答案 4 :(得分:2)

getpass对于确定当前用户的登录名非常有用。

grp允许您按名称查找Unix组ID,反之亦然。

在您反复轮询目录内容的情况下,

dircache可能很有用。

glob可以找到与Unix shell相匹配的通配符的文件名。

当您需要复制,删除或重命名文件时,

shutil非常有用。

csv可以简化分隔文本文件的解析。

optparse提供了一种解析命令行选项的可靠方法。

当您需要操作bzip2压缩文件时,

bz2会派上用场。

urlparse将为您节省将URL拆分为组件部分的麻烦。

答案 5 :(得分:1)

我发现sched module对cron类活动很有帮助。它简化了很多事情。不幸的是我发现它太晚了。

答案 6 :(得分:1)

大多数其他示例仅仅被忽略,而不是模块的意外用途。

像shlex一样,fnmatch可以以意想不到的方式应用。 fnmatch是一种穷人的RE,可以用于匹配文件以上,它可以将字符串与简化的通配符模式进行比较。

答案 7 :(得分:1)

我开始欣赏的一个功能是string.translate。它的功能非常快,并且在您想要更改或删除字符串中的字符的任何地方都很有用。我只是在一个看似不适用的problem中使用它,并发现它轻松地击败了所有其他解决方案。

缺点是它的API有点笨重,但这在Py2.6 / Py3.0中有所改进。

答案 8 :(得分:1)

pickle模块非常棒

答案 9 :(得分:1)

复数。 (complexobject.c定义了一个类,所以从技术上讲它不是一个模块)。非常适合2D坐标,易于翻译/旋转等

例如

TURN_LEFT_90= 1j
TURN_RIGHT_90= -1j

coord= 5+4j # x=5 y=4
print coord*TURN_LEFT_90