Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么要使用curses.ascii.islower?_Python_Python Curses - Fatal编程技术网

Python 为什么要使用curses.ascii.islower?

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

我最近才偶然发现。它检查传递的字符是否为小写。 使用此功能与使用其他功能相比有什么好处?是的,它需要将ASCII字符转换为字符串对象,这会增加开销。但除此之外还有什么好处吗


我发现的一个缺点是需要额外的库,这可能是可用的,也可能是不可用的。

对两者进行计时似乎
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')"