Pull to refresh
0
0
Send message
> И не указывать alert, sound и badge ключи в payload — они совершенно бесполезны для push-уведомления, которое не будет показано пользователю.

Протестую! badge в таком пуше будет «крутить» счётчик непрочитанных на иконке приложения.
> Мой любимый желтый банк, например, обновляет сервера бэкендов мобильного приложения в 5 утра по Москве примерно 2 раза в неделю.

Один модный молодёжный банк для предпринимателей обновляет сервера онлайн-кассы в обед по Москве. Видно по волне ошибок синхронизации. «Потому что разработчики у нас в Новосибирске, им так удобней».
Один час и несколько (5, 10, 20, 30, 40, 50) минут :-)
1) __iter__-__iter__ом, но ведь имеет значение, вызывать __iter__ у уже существующего инстанса или каждый раз создавать его перед вызовом?

2) range всё-таки может создать не любой список, а только «containing arithmetic progressions» (http://docs.python.org/library/functions.html#range). range('a', 'z') это вообще TypeError.

3) в конце-концов, можно позвать cProfiler, и проверить:

import cProfile
i = 5000

def xrange_xrange():
    for x in xrange(i):
        for y in xrange(i):
            (x, y)

def xrange_prerange():
    y_range = range(i)
    for x in xrange(i):
        for y in y_range:
            (x, y)

for _ in range(10):
    cProfile.run('xrange_xrange()')
    cProfile.run('xrange_prerange()')
    print '=' * 10


Сокращённый вывод:
==========
3 function calls in 7.061 CPU seconds
4 function calls in 6.022 CPU seconds
==========
3 function calls in 6.605 CPU seconds
4 function calls in 5.749 CPU seconds
==========
3 function calls in 6.548 CPU seconds
4 function calls in 5.927 CPU seconds
==========
3 function calls in 6.052 CPU seconds
4 function calls in 6.182 CPU seconds
==========
3 function calls in 5.970 CPU seconds
4 function calls in 5.966 CPU seconds
==========
3 function calls in 7.590 CPU seconds
4 function calls in 5.955 CPU seconds
==========
3 function calls in 6.167 CPU seconds
4 function calls in 5.867 CPU seconds
==========
3 function calls in 6.763 CPU seconds
4 function calls in 6.048 CPU seconds
==========
3 function calls in 5.988 CPU seconds
4 function calls in 5.690 CPU seconds
==========
3 function calls in 5.827 CPU seconds
4 function calls in 6.048 CPU seconds
==========

Т.е. эффект от выноса range() за внешний цикл хотя и не очень значительный, но есть.
О, и правда. Тогда вообще всё замечательно: width_range=xrange(width) — и расход памяти не увеличивается, и скорость растёт.
См. исходный комментарий:
Например, не создавать каждый раз в цикле xrange(width), а сделать в начале функции «width_range = range(width)», а внутри уже «for X in width_range:».
С первым абзацем полностью согласен.

Но то, что xrange «почти всегда лучше» это немного некорректный вывод. Если надо меньше памяти, то, конечно, лучше xrange. Но если надо быстрее (а топик был именно о скорости), то избавившись от создания сотен или тысяч мелких одинаковых объектов, пусть даже генераторов, можно выиграть немного времени. Я проверял.
Ещё можно экономить на создании объектов. Например, не создавать каждый раз в цикле xrange(width), а сделать в начале функции «width_range = range(width)», а внутри уже «for X in width_range:».
За других людей не могу отвечать, к сожалению.

Сам с 2006 года не пропустил ни одного фестиваля, влючая осеннюю мини-версию. Каждый раз после возвращения в город сильная ломка минимум на неделю — хочется назад, хочется ещё. Но в то же время я знаю как минимум одного человека, который приехал туда вечером, а утром сказал, что ему всё понятно насчёт этого места и этих людей, и, не дождавшись ни одного музыкального выступления, уехал.
Именно. Есть у меня такая давняя привычка: ездить на ПХ и фотографировать там что попало.
(кстати, тоже пример: холмы.рф — не редирект).
Чуть меньше кода — 4: возвращение блудного верблюда
use utf8;
use List::Util 'shuffle';
$text = 'Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.'; 
$text =~ s/(?<=[а-яa-z])([а-яa-z]{2,})(?=[а-яa-z])/join('',shuffle(split('',$1)))/eg;
print "$text\n"; 
Чуть меньше кода — 2:
# -*- coding: utf-8 -*-
import re, random

def _reword(m):
    bits = list(m.group(0))
    prefix, core, suffix = bits[:1], bits[1:-1], bits[-1:]
    random.shuffle(core)
    return ''.join(prefix + core + suffix)

def shuffle_text_letters(s):
    return re.sub(u'[а-яА-Яa-zA-Z]{4,}', _reword, s)

print shuffle_text_letters(u"Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.")
Ой, не знал про идиому [::-1]. Тогда:

#!/usr/bin/python
import re
print re.sub('\((.*?)\)', lambda m: m.group(1)[::-1], raw_input())
Может это подойдёт?

#!/usr/bin/python
import re
revstring = lambda s: ''.join(reversed(s))
print re.sub('\((.+?)\)', lambda m: revstring(m.group(1)), raw_input())

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity