Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 28, 2010 14:49:57

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

Ardling
pasaranax
А правильно ли использовать конструкцию
if int(octet) not in range(256):
return False
вместо
int = int(octet)
return (int >= 0 and int <= 255)
Ну конечно return лучше бы был один, но внутри цикла то что ты предложил вставлять нельзя, а то будет проверка только первого октета. Да и перезаписывать имя int тоже не стоит ;)



Офлайн

#2 Фев. 28, 2010 15:15:09

Ardling
От:
Зарегистрирован: 2009-05-01
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

pasaranax
Ну конечно return лучше бы был один, но внутри цикла то что ты предложил вставлять нельзя, а то будет проверка только первого октета. Да и перезаписывать имя int тоже не стоит ;)
Я это скорее к тому, что два сравнения лучше, чем генерация списка из 256 элементов и последовательное сравнение с каждым. А с ретурном я конечно загнул.



Офлайн

#3 Фев. 28, 2010 18:54:48

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

xrange - наше спасение



Офлайн

#4 Фев. 28, 2010 18:55:13

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

Ardling
Я это скорее к тому, что два сравнения лучше, чем генерация списка из 256 элементов и последовательное сравнение с каждым. А с ретурном я конечно загнул.
Да не, с ретурном как раз правильно, а по поводу in range(256), так типа более pythonic :)



Офлайн

#5 Фев. 28, 2010 19:33:51

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

Ardling
int = int(octet)
return (int >= 0 and int <= 255)
вместо (int >= 0 and int <= 255)
можно написать ( 0 <= int <= 255)

Офлайн

#6 Фев. 28, 2010 19:52:10

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

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)

Офлайн

#7 Фев. 28, 2010 21:13:33

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

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)

Офлайн

#8 Фев. 28, 2010 21:43:55

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

В данном случае такой тест ниочём не говорит.

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)) очевидна.



Офлайн

#9 Фев. 28, 2010 23:19:59

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

я не про тест я про инструмент



Офлайн

#10 Фев. 28, 2010 23:30:01

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение для поиска ip

bazooka
я не про тест я про инструмент
Я понял. Я тоже имел в виду что этот инструмент позволяет проводить только “сферические в вакууме” измерения.
Мне когда то вообще не понравились результаты выдаваемые питоновскими профайлерами, потому что они не совпали ни с данными (time2-time1) ни с замерами по секундомеру. Ни количественно ни качественно.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version