Найти - Пользователи
Полная версия: Регулярное выражение для поиска ip
Начало » Python для новичков » Регулярное выражение для поиска ip
1 2 3
pasaranax
Ardling
pasaranax
А правильно ли использовать конструкцию
if int(octet) not in range(256):
return False
вместо
int = int(octet)
return (int >= 0 and int <= 255)
Ну конечно return лучше бы был один, но внутри цикла то что ты предложил вставлять нельзя, а то будет проверка только первого октета. Да и перезаписывать имя int тоже не стоит ;)
Ardling
pasaranax
Ну конечно return лучше бы был один, но внутри цикла то что ты предложил вставлять нельзя, а то будет проверка только первого октета. Да и перезаписывать имя int тоже не стоит ;)
Я это скорее к тому, что два сравнения лучше, чем генерация списка из 256 элементов и последовательное сравнение с каждым. А с ретурном я конечно загнул.
bazooka
xrange - наше спасение
pasaranax
Ardling
Я это скорее к тому, что два сравнения лучше, чем генерация списка из 256 элементов и последовательное сравнение с каждым. А с ретурном я конечно загнул.
Да не, с ретурном как раз правильно, а по поводу in range(256), так типа более pythonic :)
o7412369815963
Ardling
int = int(octet)
return (int >= 0 and int <= 255)
вместо (int >= 0 and int <= 255)
можно написать ( 0 <= int <= 255)
knkd
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
bazooka
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())
knkd
В данном случае такой тест ниочём не говорит.
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
Потому, думаю что прогон со случайными значениями в цикле несколько более информативен.

Хотя в любом случае медлительность (if x in xrange(y)) очевидна.
bazooka
я не про тест я про инструмент
knkd
bazooka
я не про тест я про инструмент
Я понял. Я тоже имел в виду что этот инструмент позволяет проводить только “сферические в вакууме” измерения.
Мне когда то вообще не понравились результаты выдаваемые питоновскими профайлерами, потому что они не совпали ни с данными (time2-time1) ни с замерами по секундомеру. Ни количественно ни качественно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB