首页 / 知识

Python模块函数以意外方式使用

2023-04-17 03:33:00

Python模块函数以意外方式使用

Python module functions used in unexpected ways

基于使用shlex.split巧妙地将带引号的字符串分割成字符串的"在Python中用空格分割字符串",我很想了解其他由非显而易见的标准库函数解决的常见任务。

如果这成为本周的模块,那也很好。


得知您可以使用bisect模块在序列中进行非常快速的二进制搜索,我感到非常惊讶。它的文档没有说什么:

This module provides support for maintaining a list in sorted order without having to sort the list after each insertion.

用法很简单:

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

但是,您必须记住,线性排序列表中的某些内容比逐项排序然后对它进行二进制搜索要快。第一个选项是O(n),第二个选项是O(nlogn)。


我使用itertools(尤其是循环,重复,链接)来使python的行为更像R和其他功能/矢量应用程序。通常,这使我避免了Numpy的开销和复杂性。

1
2
3
4
# 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
#普通python
在[1]中:范围(10)+范围(3)
Out [1]:[0、1、2、3、4、5、6、7、8、9、0、1、2]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 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]

通常忽略了模块,用法和窍门:

collections.defaultdict():当您想让字典中的键丢失时使用默认值。

functools.wraps():用于编写可以很好地与内省一起使用的装饰器。

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

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

(另请参阅:macpath,对于MacOS 9和更早版本,对于OS / 2 EMX,为os2emxpath,但是我不确定是否有人在乎。)

pprint:对容器的repr()进行更结构化的打印可以使调试更加容易。

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

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

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


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

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

在重复轮询目录内容的情况下,dircache可能会很有用。

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

当需要复制,删除或重命名文件时,shutil非常有用。

csv可以简化定界文本文件的解析。

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

当您需要处理bzip2压缩文件时,bz2会派上用场。

urlparse可以避免将URL分解为组成部分的麻烦。


我了解到struct.unpack是解压缩二进制数据格式的天赐之物!


复数。 (complexobject.c定义了一个类,因此从技术上讲它不是模块)。 非常适合2D坐标,具有轻松的平移/旋转等

例如。

1
2
3
4
5
TURN_LEFT_90= 1j
TURN_RIGHT_90= -1j

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

泡菜模块非常棒


我逐渐欣赏的一个功能是string.translate。它的执行速度非常快,在您想要更改或删除字符串中的字符的任何地方都非常有用。我只是在一个看似不适用的问题中使用了它,发现它轻而易举地击败了所有其他解决方案。

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


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

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


我发现sched模块对类似cron的活动很有帮助。它大大简化了事情。不幸的是我发现为时已晚。


模块函数分割字符串字符串分割

最新内容

相关内容

猜你喜欢