Pull to refresh
-19
Karma
0.2
Rating

5 лайфхаков Python, которые сделают ваш код более читабельным и элегантным

К счастью, в Python всегда можно избежать вложенных циклов с помощью встроенной функции product()

Отнюдь не всегда:

for a in range(3):
    for b in range(a):
        for c in range(a + b):
            print(a, b, c)

Гнать таких знаек в шею ссаными тряпками.

Технологии прошлого — обсуждаем ARCnet

...принципы, заложенные ARCnet, продолжат существовать еще долгое время.

ARCnet - протокол с назначением маркера, т.е. права вещать, лишь одному адаптеру в сети в каждый момент времени. Этим он на логическом уровне отличается от Ethernet, протокола с множественным доступом и обнаружением коллизий. Разница между ними в чем-то похожа на разницу между невытесняющей и вытесняющей многозадачностью, каковые продолжат существовать пока существует этот мир - надеюсь, это продлится действительно долго)

РКК «Энергия» запатентовала опорные блоки информационных знаков для поверхности Луны

На пыльных тропинках далёких планет

Останутся наши фланцы и мешки.

YAML из Ада

Кратчайший ликбез по сабжу, "Learn X in Y minutes, where X=yaml" - это yaml-документ в 200 строк.

Про "yes/no is boolean" там есть.

Почитайте, может еще что новое для себя узнаете )

Что есть функция в Python?

Это что-то страшное - исходник стандартной библиотеки.

Простите её авторов за доставленный шок )

Звуковой усилитель на драйвере шагового двигателя L298 и таймере 555. Да, 555-й может и спеть

Всё неправильно. То, что вы называете усилителями на нашей схеме - это биполярные транзисторы разной полярности, подключеные к общей нагрузке как "эмиттерные повторители". Всё вместе составляет двухтактный (push-pull) усилитель тока, об этом вы можете прочитать примерно везде, а пока вот читаете здесь.

Я немного поспешил с выбором картинки, вообразив, что и вы в спешке произвели тот странный абзац. Я ошибся, признаю. По схеме нельзя с уверенностью сказать, работает ли этот двухтактный каскад в режиме В, АВ или даже А (последнее вряд ли, графики говорят - на картинке АВ, верно). Так вот, разница между этими классами - в величине тока покоя, у В он - нулевой, у АВ - небольшой, но достаточный, чтобы выходное сопротивление этого каскада при нулевам выходном токе было достаточно малым в сравнении с сопротивлением нагрузки, у А - большой, в однотактном каскаде А равный максимальному выходному току, в двухтактном - половине.

Отдельный вопрос к тем, кто плюсует ваш комментарий - ребята, вы кто?

Звуковой усилитель на драйвере шагового двигателя L298 и таймере 555. Да, 555-й может и спеть

Есть класс В, который усиливает примерно половину периода сигнала.

Серьёзно? )))

Операционные усилители. Часть 7: Операционные усилители на лампах

В характеристиках отсутствует полоса пропускания - а любопытно. Предположу ~100kHz.

ps Цена адская, $34 в 1952г - это почти $400 сегодня. Похоже, всё упиралось в мелкосерийность.

АНБ США порекомендовало IT-компаниям отказаться от языков C и C++

Go переписан на Go, котлин на котлине, хаскель на хаскеле, далее не везде, но много где. Даже старичек паскаль был переписан с фортрана на паскаль, ведь он появился до С.

Всё, что компилируется, хочет, чтобы на нём написали компилятор )

Гэри Дарби, автобиография — Delphi For Fun

...проблемы с вращающимся оборудованием

Вращающееся оборудование? В Саудовской Аравии? За много денег?

Впервые встречаю столь смешное именование буровой установки, лайк )

Ищем значение числа Пи, используя генератор случайных значений

Питоновский int произвольной длины инкрементируется програмно, а нативный для процессора float - аппаратно, одним процессорным опкодом за один процессорный такт. Хотя здесь фактические вычисления ведутся с малыми числами и, по факту, короткой арифметикой, предварительно производится уточнение, что и в каком виде хранится в переменной.

В python2 было два целочисленных типа - короткий, размером в машинное слово, и длинный, в python3 их заменили одним int - ввиду того, что серьёзную арифметику стали считать в NumPy, а в эпизодической проигрыш в быстродействии не критичен.

4 вместо 1 - не оптимизация, так, для красоты.

Вы еще упускаете импорт конкретной функции вместо модуля, её содержащего - вычисление атрибута random.random в цикле тоже чего-то стоит. Смотрите сюда:

import random
from random import random as rnd
from dis import dis

def f(): return random.random()
def g(): return rnd()

dis(f)
print("-------------")
dis(g)

В РФ сформирован список из 92 научных приборов, производство которых необходимо наладить в ближайшие годы

Привет из 1960х

Физтех-песня - Нам такие точные нужны приборы

Нам такие точные нужны приборы,
Чтобы все эффекты мерять без разбора,
Точные нужны приборы, но однако
Нам нужны приборы вот с таким вот знаком.

припев:

И тогда прибор нам как жена,
И тогда жена нам не нужна,
И тогда любой из нас не против
Дни и ночи отдавать работе.

Нам нужны такие зеркала на шкалах,
Чтоб их точность атомную превышала,
Чтоб цена делений и цена зазора
Втрое превышали бы цену прибора.

припев.

В наших институтах будут очень скоро
Новые отечественные приборы
Скоро, очень скоро будут, а пока ты
Выпиши прибор в соединенных штатах.

припев: ---------- : ----------
И тогда, науку нашу славя,
Мы буржуйских прихвостней в хвосте оставим.


припев.

Нашелся и mp3

Ищем значение числа Пи, используя генератор случайных значений

У статьи два тэга: Python и Математика. Это прекрасно.

Начнем с питона, перепишем авторское решение, сохранив его идею:

from random import random

def estimate_pi(n):
    s = 0.
    for _ in range(n):
        x, y = random(), random()
        if 1. >= x * x + y * y:
            s += 4.
    return s / n

Хм, в CPython 3.10 это работает в 3.5 раза быстрее. Как же так, дружище? Как же тэг Python?

Ладно, что там с математикой? Про сходимость тут уже высказались, хорошо бы немного практики, чтобы цифры пощупать. Считаем по-всякому площадь сектора OAC.

Я умею интегрировать трапециями!

from math import sqrt

def trapezoid_pi(n):
    s = .5  # значения в крайних точках интервала
    # берутся с весом 0.5, а значения эти - 1 и 0
    x = step = 1. / n
    for _ in range(n - 1):
        s += sqrt(1. - x * x)
        x += step
    return s * 4. / n

Я могу интегрировать по Симпсону!

from math import fsum

def simpson_pi(n):
    x, step, res = 0, 1. / n, [.5]
    for _ in range(n):
        x += step
        res.append(sqrt(1. - x * x))
    return (fsum(res[::2]) + fsum(res[1::2]) * 2.) * 8. / (n * 3)

Правда, это даёт выигрыш в точности против трапеции всего 2.5 раза. Всё из-за особенности в точке C - там касательная к окружности идёт отвесно. Так это можно обойти: отдельно посчитаем площадь сегмента AB и четырехугольника OABC.

from math import fsum, sqrt

def simpson45_pi(n):
    x, step, res, s5 = 0., 1. / n, [.0], sqrt(.5)
    for _ in range(n):
        x += step
        res.append(sqrt(1. - x * x * .5) - 1. + (1. - s5) * x)
    AB = (fsum(res[::2]) + fsum(res[1::2]) * 2.) * s5 * 2. / (n * 3)
    OABC = s5  # взял аналитически 
    return (OABC + AB * 2.) * 4.

Да, а как же цифры? Вот они:

Абсолютная погрешность против библиотечного значения π для n = 2 ** 3 == 8
(разбиение интервала на степень двойки дает мне выигрыш в точности)

estimate_pi   0.47564011559266456 # усредненно по большой выборке
trapezoid_pi  0.05177350923261992
simpson_pi    0.02040348381437518
simpson45_pi  0.00003003695260295


Погрешность для n = 2 ** 13, мельчить сильнее вроде незачем

estimate_pi   0.01486375361227077 # усредненно
trapezoid_pi  0.00000158604010281
simpson_pi    0.00000061939277884
simpson45_pi  0.00000000000000000

Ну что тут скажешь? Друзья, не суйте Монте-Карло куда попало.

А можно еще и с NumPy, но уж это как-нибудь в другой раз.

Исчерпывающее руководство по множествам в Python

Метафора красивая, но неуместная.

По-вашему, питон 2.2 и питон 2.3 ключевым образом отличаются? Разработчики питона так не думали, сообщество не высказывало такого мнения.

Ответьте себе на вопрос «почему?», это ключевой вопрос )

Исчерпывающее руководство по множествам в Python

Класс set (множество) — это одна из ключевых структур данных в Python

Класс set был предложен в PEP218 от 31-Jul-2000 и реализован в Python 2.3 (релиз July 29, 2003). И какая же это «ключевая структура», если 10 лет без неё обходились?

Нехорошо, когда статья начинается со вранья.

Списковые включения в Python мощнее, чем можно подумать

print([func(x) for x in values if func(x)])         # хреново
print([y for y in (func(x) for x in values) if y])  # так себе
print([y for x in values if (y := func(x))])        # получше
print(list(filter(None, map(func, values))))        # вот так нормально

14 задач по Kotlin lists, которые заставят вас подумать

Такие загадки проще придумывать, чем разгадывать. Идешь по списку функций, что там у нас? Пусть будет

mapIndexed { index, value → index + value}

Что там в итоге? 29 – замечательно, в жизни бы бы не подумал, беру!

Справедливости ради, стандартная библиотека kotlin классная, и такие посты – отличная профилактика от велосипедостроения.

6 хитростей Python, о которых никто не рассказывает новичкам

Если попытаться передать функции random.choice(seq) неиндексируемую последовательность, например — словарь, множество или значение числового типа — возникнет ошибка.

Ошибкой было назвать словарь неиндексируемой последовательностью. Да возникнет она не у только лишь всех )

from random import choice

d = {i: i * i for i in range(10)}
print(choice(d)) #  всё пучком

Змейка здорового человека

from math import atan2

def draw(title, n, m, f):
    y0, x0 = (n - 1) / 2, (m - 1) / 2  # нужен центр
    print(f"\n{title:-^{m * 3 - 1}}")
    res = [0] * (n * m)
    for i, j in enumerate(sorted(range(n * m), 
        key=lambda i: f(i // m - y0, i % m - x0))):
        res[j] = f"{i:>02}"
    for i in range(0, n * m, m):
        print(*res[i:i + m])

f = lambda y, x: (max(abs(y), abs(x)), atan2(x, y))
# высота и ширина матрицы должны быть одной четности,
# или центр нужно сдвинуть - для изотропности
draw("spiral", 4, 6, f)
draw("spiral", 5, 5, f)

Покончим с этим разговором.

Information

Rating
1,801-st
Registered
Activity