Python 为什么要使用curses.ascii.islower?
我最近才偶然发现。它检查传递的字符是否为小写。 使用此功能与使用其他功能相比有什么好处?是的,它需要将ASCII字符转换为字符串对象,这会增加开销。但除此之外还有什么好处吗Python 为什么要使用curses.ascii.islower?,python,python-curses,Python,Python Curses,我最近才偶然发现。它检查传递的字符是否为小写。 使用此功能与使用其他功能相比有什么好处?是的,它需要将ASCII字符转换为字符串对象,这会增加开销。但除此之外还有什么好处吗 我发现的一个缺点是需要额外的库,这可能是可用的,也可能是不可用的。对两者进行计时似乎str.islower效率更高,因此这不仅仅是需要导入的开销: 蟒蛇2: In [68]: timeit islower("f") 1000000 loops, best of 3: 641 ns per loop In [69]: tim
我发现的一个缺点是需要额外的库,这可能是可用的,也可能是不可用的。对两者进行计时似乎
str.islower
效率更高,因此这不仅仅是需要导入的开销:
蟒蛇2:
In [68]: timeit islower("f")
1000000 loops, best of 3: 641 ns per loop
In [69]: timeit "f".islower()
10000000 loops, best of 3: 50.5 ns per loop
蟒蛇3
In [2]: timeit "f".islower()
10000000 loops, best of 3: 58.7 ns per loop
In [3]: timeit islower("f")
1000000 loops, best of 3: 801 ns per loop
一个区别/优势是,实际上不必强制转换到str对象,可以传递一个字符串或整数
In [38]: ascii.islower(97)
Out[38]: True
但将chr与str.lower
一起使用仍然更有效:
In [51]: timeit ascii.islower(122)
1000000 loops, best of 3: 583 ns per loop
In [52]: timeit chr(122).islower()
10000000 loops, best of 3: 122 ns per loop
关于使用curses.ascii的唯一参考是它在使用curses
库时的用处:
while 1:
c = stdscr.getch()
if c == ord('p'):
PrintDocument()
elif c == ord('q'):
break # Exit the while()
elif c == curses.KEY_HOME:
x = y = 0
curses.ascii模块提供接受整数或1个字符串参数的ascii类成员函数;在为命令解释器编写更具可读性的测试时,这些可能很有用。它还提供转换函数,这些函数接受整数或1个字符串参数,并返回相同的类型。
我想你很难发现使用ascii.islower比使用与curses模块相关的任何东西都有什么优势。运行了一些稍微不同的测试,试图只检查函数速度(没有属性查找或名称空间的差异)
在Python3.4中测试(自己可以轻松运行)
0.171 usec/循环
与之相比:
python3 -m timeit \
-s "import curses.ascii; f = curses.ascii.islower; del curses" \
"f('A')"
0.722 usec/循环
实际上,你不会这样打电话。让我们把这个留着吧。我觉得它不太宽。OP询问为什么存在该模块,因为有些功能似乎在其他地方得到了很好的介绍。我认为这是一个可以简单回答的问题。ascii.islower
在ascii上明确工作。大概这比str.islower
更有效?不要认为ascii.islower(“f”)
vs“f”。islower()
正在测试函数的速度(单独),因为第一个函数包括一个属性查找。@ideasman42,正如您所看到的,实际上是零差,几纳秒
python3 -m timeit \
-s "import curses.ascii; f = curses.ascii.islower; del curses" \
"f('A')"