LINUX.ORG.RU

Ответ на: комментарий от bj

В тройке сделали максимально неудобной работу с байтовыми строками, а этого иногда очень не хватает,

В 3.5 обещали исправить.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

У меня на 3.4 через раз екзешник собирает, багу разразбам отправил

sol13 ★★★★★
()

мейнстрим сейчас 3.x?

Запускаем на py3:

import datetime
def uloops(n=1000000000):
    start = datetime.datetime.now()
    for i in xrange(n):
        d = 1+1
        pass
    end =  datetime.datetime.now()
    total = end - start
    s = '%s loops in %s' % (n, total.seconds)
    print (s)
    
uloops()

Запускаем на py2 и на pypy:

import datetime
def uloops(n=1000000000):
    start = datetime.datetime.now()
    for i in xrange(n):
        d = 1+1
        pass
    end =  datetime.datetime.now()
    total = end - start
    s = '%s loops in %s' % (n, total.seconds)
    print (s)
   
uloops()

Результаты:

В случае py3: 1000000000 loops in 42

В случае py2: 1000000000 loops in 24

В случае pypy: 1000000000 loops in 0

Вывод: нахрен такой мейнстрим вообще нужен?

Siado ★★★★★
()
Ответ на: комментарий от proud_anon

kivy, например. Не смотря на то что они получили деньгу от пистон фоундатион за «типа портирование» на 3, оно по сути до сих пор только 2.

entefeed ☆☆☆
()
Ответ на: комментарий от Siado

Запускаем на py3:

В случае py3: 1000000000 loops in 42

Traceback (most recent call last):
  File "./p3.py", line 14, in <module>
    uloops()
  File "./p3.py", line 6, in uloops
    for i in xrange(n):
NameError: name 'xrange' is not defined

Юморной ты парень, люблю таких. Далеко пойдёшь.

anonymous
()
Ответ на: комментарий от tailgunner

Простите, а что меряет этот тест?

Демонстрирует на сколько медленнее стали работать циклы в python 3 по сравнению с python 2

Siado ★★★★★
()
Ответ на: комментарий от anonymous

Но ты в курсе, что питон не для таких задач?

А для каких?

Siado ★★★★★
()
Ответ на: комментарий от Siado

Демонстрирует на сколько медленнее стали работать циклы в python 3 по сравнению с python 2

Ты, конечно, хотел сказать «насколько медленнее стали работать пустые циклы в Python 3». Да, знать это очень важно. Правда, цифры у меня получились другие, но мне и пример твой пришлось править.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ну да, пустые, какая разница, что они будут содержать что либо, если уже даже фундамент в виде циклов тормозит. При чем медленнее стало не на какие-то там 1-2% а почти в два раза.

Правда, цифры у меня получились другие, но мне и пример твой пришлось править.

ну да, слегка надо подправить опечатку, с py3 убрать буковку x, анонимус уже жаловался.

Siado ★★★★★
()
Ответ на: комментарий от Siado

В случае pypy: 1000000000 loops in 0

Ну и что? Если запустить на pypy3, тоже будет 0 (правда, у меня на машине и на pypy, и на pypy3 получается 2).

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Ну и что? Если запустить на pypy3, тоже будет 0 (правда, у меня на машине и на pypy, и на pypy3 получается 2).

Так ведь косяк в том, что pypy3 не допилен. И странно что он у тебя вообще запустился =)

Siado ★★★★★
()
Ответ на: комментарий от Siado

Ну да, пустые, какая разница, что они будут содержать что либо

Разница в том, что простой вызов функции в цикле почти уравнивает быстродействие Python2 и Python3 (104 против 117). Это значит, что вызов функции в Python3 эффективнее.

фундамент в виде циклов тормозит

белки_истерички.жпг

медленнее стало не на какие-то там 1-2% а почти в два раза.

Это у тебя. У меня - в полтора.

tailgunner ★★★★★
()
Ответ на: комментарий от Siado

Так ведь косяк в том, что pypy3 не допилен. И странно что он у тебя вообще запустился =)

Почему странно? Он допилен, выпущен стабильный релиз 2.4.0, совместимый с Python 3.2.5.

А для каких?

Хорошо, если тебе нравятся пустые циклы, попробуем сделать так:

def uloops(n=2 ** 65):
python2: OverflowError: Python int too large to convert to C long.

И вот, в то время как Python 3 уже работает, в Python 2 программист ещё думает о том, что ему надо переходить на другой числовой тип.

proud_anon ★★★★★
()
Ответ на: комментарий от tailgunner

Разница в том, что простой вызов функции в цикле почти уравнивает быстродействие Python2 и Python3 (104 против 117). Это значит, что вызов функции в Python3 эффективнее.

Ок. Давай экспериментировать:

import datetime

def simple_funciton(x):
    y = x
    return y

def uloops(n=10000000):
    start = datetime.datetime.now()
    for i in range(n):
        simple_funciton(i)
    end =  datetime.datetime.now()
    total = end - start
    result = total.microseconds
    s = '%s loops in %s' % (n, result)
    print (s)
    return result

def test(times=10):
    min_time = 999999999
    max_time = 0
    data = []
    for i in range(times):
        result = uloops()
        data.append(result)
    print('min: %s' % min(data))
    print('max: %s' % max(data))
    avg = sum(data)/times
    print('avg: %s' % avg)

Результаты

Python 3.3.2:

min: 591045 max: 655035 avg: 627804.5

Python 2.7.5:

min: 273861 max: 365404 avg: 309640

Python 2.7.5 xrange:

min: 31981 max: 122711 avg: 65485

Что-то я не вижу уравнивание быстродействия. Не говоря уже о том, что в py3 xrange как бы по умолчанию

Siado ★★★★★
()
Ответ на: комментарий от proud_anon

Хорошо, это серьезный аргумент. Но здесь я встану на место того анонимуса и скажу что питон не для таких задач, т.к. пока не могу представить задачу в которой мне пришлось бы сделать цикл на «2 ** 65» итераций, но прекрасно могу представить задачу где понадобиться сделать большое количество циклов на гораздо более меньшее количество итераций +)

Siado ★★★★★
()
Ответ на: комментарий от Siado

Ок. Давай экспериментировать:

Давай. Причем ничего не переписывая, никаких уверток:

import datetime

def foo(x, y):
    return x+y

def uloops(n=1000000000):
    start = datetime.datetime.now()
    for i in xrange(n):
        d = foo(1, 1)
        pass
    end =  datetime.datetime.now()
    total = end - start
    s = '%s loops in %s' % (n, total.seconds)
    print (s)
    
uloops()
tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от Siado

Дело тут уже не в циклах, я просто придерживался той же задачи. Всё равно миллиард пустых итераций тоже вряд ли кому-то пригодится. Я просто хотел сказать, что полностью прозрачная работа с большими числами — это очень большое преимущество, по сравнению с которым скорость пустых циклов гораздо менее важна.

proud_anon ★★★★★
()
Ответ на: комментарий от Siado

Итак, соотношение Python3/Python2 было 1.75 раза, стало 1.3, читд.

Могу сказать, что у тебя какой-то странный Python. Какая версия, какая система?

tailgunner ★★★★★
()
Ответ на: комментарий от proud_anon

Ну с одной стороны да. Но с другой питон славился своим весьма неплохим быстродействием для скриптового ЯП. И я думаю что сменить 2 на 3 было бы особенно актуально, если бы там более деликатно подошли к этому вопросу. А то выходит получили несовместимости со многими программами, еще и работает медленнее.

З.ы. к стати костыль для цикла n=2 ** 65:

def big_range(n):
    c = 0
    while c != n:
        yield c
        c += 1

for i in big_range(2 ** 65): pass

Правда пожалуй его окончания до утра не дождусь.

Siado ★★★★★
()
Ответ на: комментарий от tailgunner

fedora 20, Python 3.3.2 и Python 2.7.5. Проц AMD FX(tm)-8350 Eight-Core Processor

Siado ★★★★★
()
Ответ на: комментарий от Siado

еще и работает медленнее.

Ты его на чем-нибудь, кроме пустых циклов, сравнивал? На моих программах Python3 на 10-20% быстрее.

tailgunner ★★★★★
()
Ответ на: комментарий от Siado

Учитывая, что ты скопировал нерабочие скрипты, возникает подозрение, что ты их и не запускал, а цифры тестов взял и придумал.

anonymous
()
Ответ на: комментарий от Siado

Не будет ли это проблемой интерпретатора, а не языка?

int13h ★★★★★
() автор топика

Я на прошлой неделе вляпался в один проект на Пайтоне, но только вчера вкурил, что проектный мэйнстрим - двоечка. А уже наго*нокодил вагон и маленькую тележку.

Deleted
()
Ответ на: комментарий от Deleted

Это когда смотришь на код и лицо становится серьёзным.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.