Показаны сообщения с ярлыком python. Показать все сообщения
Показаны сообщения с ярлыком python. Показать все сообщения

вторник, 7 сентября 2010 г.

Python range vs xrange

В Python существуют две, аналогичные с виду фунцкции: range и xrange, которые часто используются в циклах for. Обе они имеют сходный синтаксис:
range(start,stop,step) или xeange(start,stop,range). Где start,stop и step соответственно: начальное, конечное значения и шаг. Однако, если range возвращает список значений (list), xrange возвращает объект, что более эффективно использует память и более производительно в циклах.

Вот пример скрипта, демонстрирующий разницу в производительности (для сравнения еще и цикл while):

#!/usr/bin/python

def test_range(rng):
    for i in range(rng): pass

def test_xrange(rng):
    for i in xrange(rng): pass

def test_while(rng):
    i=0
    while i<=rng:
        i=i+1

if __name__=='__main__':
    from timeit import Timer
    testing_range=(100,1000,10000,100000,1000000,4000000)
    print "%7s %10s %16s %16s"%('Size','Range','XRange','While')
    for rng in testing_range:
        t_range=Timer('test_range(%i)'%rng,'from __main__ import\ test_range').timeit(number=1)*1000000
        t_xrange=Timer('test_xrange(%i)'%rng,'from __main__ import\ test_xrange').timeit(number=1)*1000000
        t_while=Timer('test_while(%i)'%rng,'from __main__ import\ test_while').timeit(number=1)*1000000
        print "%7d\t %9.2f\t %9.2f\t %9.2f\t"%(rng,t_range,t_xrange,t_while)


И вот резальтат вывода:
 Size      Range           XRange            While
    100         17.17         10.97         20.98    
   1000         82.97         59.84        221.97    
  10000       1345.16        559.09       2100.94    
 100000       9470.94       5361.08      18620.01    
1000000     100019.93      57285.07     189877.99    
4000000     389897.11     237751.96     779174.09

четверг, 14 мая 2009 г.

Python, Tkinter и развернутое на весь экран окно

Как сделать главное окно Tkinter развернутым на весь экран при запуске приложения (касательно Linux):
from Tkinter import *
root=Tk()
frame=Frame(height=root.winfo_screenheight(),width=root.winfo_screenwidth())
frame.pack()
root.mainloop()