Форум сайта python.su
0
ArdlingНу конечно return лучше бы был один, но внутри цикла то что ты предложил вставлять нельзя, а то будет проверка только первого октета. Да и перезаписывать имя int тоже не стоит ;)
pasaranax
А правильно ли использовать конструкциювместоif int(octet) not in range(256):
return Falseint = int(octet)
return (int >= 0 and int <= 255)
Офлайн
0
pasaranaxЯ это скорее к тому, что два сравнения лучше, чем генерация списка из 256 элементов и последовательное сравнение с каждым. А с ретурном я конечно загнул.
Ну конечно return лучше бы был один, но внутри цикла то что ты предложил вставлять нельзя, а то будет проверка только первого октета. Да и перезаписывать имя int тоже не стоит ;)
Офлайн
0
xrange - наше спасение
Офлайн
0
ArdlingДа не, с ретурном как раз правильно, а по поводу in range(256), так типа более pythonic :)
Я это скорее к тому, что два сравнения лучше, чем генерация списка из 256 элементов и последовательное сравнение с каждым. А с ретурном я конечно загнул.
Офлайн
32
Ardlingвместо (int >= 0 and int <= 255)int = int(octet)
return (int >= 0 and int <= 255)
Офлайн
0
pasaranaxНе все питоники одинаково полезны :)
а по поводу in range(256), так типа более pythonic
from time import time
from random import randrange as ran
t1=time(); a=[y for y in [ran(10000) for x in xrange(1000000)] if (0 < y and y < 255)]; t2=time(); t=t2-t1
t -> 1.1498439311981201
t1=time(); a=[y for y in [ran(10000) for x in xrange(1000000)] if x in xrange(255)]; t2=time(); t=t2-t1
t -> 7.0377130508422852
t1=time(); a=[y for y in [ran(10000) for x in xrange(1000000)] if x in range(255)]; t2=time(); t=t2-t1
t -> 7.3918559551239014
# Кстати:
t1=time(); a=[y for y in [ran(10000) for x in xrange(1000000)] if (0 < y < 255)]; t2=time(); t=t2-t1
t -> 1.1148099899291992
Отредактировано (Фев. 28, 2010 20:07:14)
Офлайн
0
import timeit
a = timeit.Timer('0 < x and x < 255', setup = 'x = 10')
b = timeit.Timer('x in xrange(255)', setup = 'x = 10')
c = timeit.Timer('x in range(255)', setup = 'x = 10')
d = timeit.Timer('0 < x < 255', setup = 'x = 10')
print(a.timeit())
print(b.timeit())
print(c.timeit())
print(d.timeit())
Отредактировано (Фев. 28, 2010 21:13:56)
Офлайн
0
В данном случае такой тест ниочём не говорит.
print(a.timeit())
0.0665690898895 # Примем за единицу = 1.0
print(b.timeit())
0.452644109726 # 6.7996
print(c.timeit())
1.93519306183 # 29.0704
print(d.timeit())
0.0768120288849 # 1.1538
b = timeit.Timer('x in xrange(255)', setup = 'x = 225')
print(b.timeit())
5.31649303436 # 79.8642
c = timeit.Timer('x in range(255)', setup = 'x = 225')
print(c.timeit())
5.74042701721 # 86.2326Офлайн
0
я не про тест я про инструмент
Офлайн
0
bazookaЯ понял. Я тоже имел в виду что этот инструмент позволяет проводить только “сферические в вакууме” измерения.
я не про тест я про инструмент
Офлайн