Pull to refresh
3
Karma
0
Rating
ничего не произойдет @Yahweh

Пользователь

  • Followers
  • Following

Python: как уменьшить расход памяти вдвое, добавив всего одну строчку кода?

Используйте скрипт из поста, sys.getsizeof для сложных типов не все

Python: как уменьшить расход памяти вдвое, добавив всего одну строчку кода?

Я думаю YaakovTooth, и не только, хочет сказать что slots может только отсрочить проблему на какое-то время, а потом добавится ктоме timestamp еще несколько полей и проблему все равно прийдется решать более основательно.

Python: как уменьшить расход памяти вдвое, добавив всего одну строчку кода?

Конечно никто тут кроме вас не знает вашу задачу и ее ограничения.


Но так на вскидку: неужели все эти кадры надо в памяти хранить, а не прочитал > обработал > при необходимости записал куда-то > выкинул из памяти > побежал дальше.

Python: как уменьшить расход памяти вдвое, добавив всего одну строчку кода?

Да ладно у автора еще нормально, бывает и хуже


import sys
v = sys.version.replace("\n", "| ")
print(f'version: {v}')
print(f'string: {sys.getsizeof("")}')
print(f'number: {sys.getsizeof(11)}')
print(f'dict:   {sys.getsizeof({})}')

Out


version: 3.6.5 (default, Apr  1 2018, 05:46:30) | [GCC 7.3.0]
string: 49
number: 28
dict:   240

Python: как уменьшить расход памяти вдвое, добавив всего одну строчку кода?

Я думаю в коде того кто не знает про slots и dict бутылочным горлышком будет далеко не slots, а более банальные вещи.
Хотя как на потребление памяти влияет slots в реальном коде, решаящем реальную задачу было бы интересно почитать. Только если этот реальный код не подогнан специально под slots, типа огромного количества объектов одного класа.

Построение функций в консоли. Часть 1

Можно немного сократить код, даже без разделения кода и его вывода как замечели выше


Заголовок спойлера
import operator
from math import sqrt

INPUT_TEXT = 'Enter the first and the last x-coordinates and a pace dividing them by a space:'
LENGTH = 10
COL_LENGTH = LENGTH + 2
DIAL_PRECISION = "{v:{d}>{l}.3g}"  # точность числа
DELIMITER = ' '
BAD_ROW = '{v:{d}^{l}}'.format(v='не сущ', l=LENGTH, d=DELIMITER)
HEADER_FORMAT = "|{d}{x:{d}^{l}}{d}|{d}{y1:{d}^{l}}{d}|{d}{y2:{d}^{l}}{d}|{d}{y3:{d}^{l}}{d}|"
ROW_FORMAT = HEADER_FORMAT.replace('^', '>')

def y1(x):
    return x ** 3 - 2 * x ** 2 + 4 * x - 8

def y2(x):
    return 1 - 1 / x ** 2

def y3(x):
    return sqrt(abs(y1(x) * y2(x)))

def myrange(from_, to, step=1):
    if step == 0:
        raise ValueError('Step must be != 0')
    op = operator.le if step > 0 else operator.ge
    while op(from_, to):
        yield from_
        from_ += step

def get_out(value):
    aux_value = DIAL_PRECISION.format(v=value, d=DELIMITER, l=LENGTH)
    return aux_value

def go():
    # from_x, to_x, pace_x = map(float, input(INPUT_TEXT).split())
    from_x, to_x, pace_x = -2, 2, 2

    if pace_x == 0 or (to_x - from_x) * pace_x < 0 or not abs(to_x - from_x):
        print("Incorrect input")
        exit(1)

    length_of_table_lower_bound = COL_LENGTH * 4 + 5
    min_y1_value, max_y1_value, x_copy = y1(from_x), y1(from_x), from_x
    negative_value_exists = False

    print('-' * length_of_table_lower_bound)
    print(HEADER_FORMAT.format(
        x='x', y1='y1', y2='y2', y3='y3', l=LENGTH, d=DELIMITER)
    )
    print('-' * length_of_table_lower_bound)

    for x_copy in myrange(from_x, to_x, pace_x):
        y1_cur_value = y1(x_copy)
        min_y1_value = ((min_y1_value > y1_cur_value) * y1_cur_value +
                       (min_y1_value <= y1_cur_value) * min_y1_value)
        max_y1_value = ((max_y1_value < y1_cur_value) * y1_cur_value +
                       (max_y1_value >= y1_cur_value) * max_y1_value)
        negative_value_exists += y1_cur_value < 0

        out_x = get_out(x_copy)
        out_y1 = get_out(y1_cur_value)
        out_y2 = get_out(y2(x_copy)) if x_copy else BAD_ROW
        out_y3 = get_out(y3(x_copy)) if x_copy else BAD_ROW
        print(ROW_FORMAT.format(x=out_x, y1=out_y1, y2=out_y2, y3=out_y3, d=DELIMITER, l=LENGTH))
        print('-' * length_of_table_lower_bound)

if __name__ == '__main__':
    go()

Построение функций в консоли. Часть 1

dial_precision = "{:10.6f}"  # точность числа
...
aux_x = dials_precision % x_copy
aux = len(aux_x) != int(dials_precision[1:3]) + 2
aux_2 = len(aux_x) == int(dials_precision[1:3]) + 1

vs


LENGTH = 10
DIAL_PRECISION = "{:{}.6f}"  # точность числа
...
aux_x = DIAL_PRECISION.format(x_copy, LENGTH)
aux = len(aux_x) != LENGTH + 2
aux_2 = len(aux_x) == LENGTH + 1

Построение функций в консоли. Часть 1

Лучше так


if pace_x == 0 or (to_x - from_x) * pace_x < 0 or to_x == from_x:
    print("Incorrect input")
    exit(1)
// какой-то код

Построение функций в консоли. Часть 1

Теперь нам нужно печатать сами значения. Для этого понадобиться цикл. Так как введенные данные могут быть дробными, использовать range не получится, поэтому я буду использовать обычный цикл.

import operator
...
def myrange(from_, to, step):
    op = operator.le if step > 0 else operator.ge
    while op(from_, to):
        yield from_
        from_ += step

Дарю

Что нового показали на презентации Apple

Я думаю проблема не в том что он не правильно считает когда ты идешь, а в том что он засчитывает шаги когда ты едешь на машине/в метро, а то и вовсе сидишь дома в кресле. А именно так я иногда "выполняю" дневную норму с этим браслетом.

Лента новостей: почему мы делаем это неправильно?

SELECT FROM history WHERE user = 123 AND read_at NOT NULL ORDER BY id ASC limit 5

У вас orber by сломался((


[ { id: 3232 }, { id: 5343 }, { id: 34343 }, { id: 982 }, { id: 7346 } ]

Опыт разработки SPA на VueJS + Nuxt

offtop


А почему вы не пересчитываете фильтры при применении фильтров? Т.е. при заходе в раздел получаем по апи фильтры, но при фильтрации товар пересчитывается, а набор фильтров остается как был, в результате применив два фильтра можно получить пустой список товаров.

Курс молодого бойца PostgreSQL

Что то я сомневаюсь что это задача уровня бд


PS 3+8+9 = 145 :)

Blender — самый популярный запрос в Google

Пользователи России, Китая, Арабских стран, Индии предпочитают использовать 3ds Max, но при смещении к Европейской части Blender опять начинает восстанавливать свои позиции

Что-то мне подсказывает, что это как-то связано с уровнем пиратства))

Lenovo ThinkCentre M715q Tiny: волчонок в овечьей шкуре

Судя по последним двум картинкам слот один (а может два, под первым, вроде, еще один можно вставить), память нераспаяна.

Расчет приоритета комбинаций в техасском холдеме (покере) на PHP

Так ведь cardsCreation генерирует 7 карт, а не 52. Так что не так уж и много раз последнюю карту подбирать))
хотя вместо


if (1 == $multiplier) { //если множитель равен 1, добавляю к числу 100
    $card = $card + 100;
} else if (2 == $multiplier) { //если множитель равен 2, добавляю к числу 200
    $card = $card + 200;
} else if (3 == $multiplier) { //если множитель равен 3, добавляю к числу 300
    $card = $card + 300;
}

можно было написать


$card = $card + 100*$multiplier

Information

Rating
Does not participate
Location
Рождественские о-ва
Registered
Activity