Обновить
3

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

1
Подписчики
Отправить сообщение

Лично мне очень нравится встроенный argparse, единственная проблема которого, имхо, отсутствие аннотации типов, но возможностей более чем достаточно для любого простого скрипта, выполняющего одну конкретную задачу.

Сдаться и принять блокировки на уровне дизайна сети - это мечта? Жить в тоталитарном мире, где тебе тупо по факту места рождения что-то нельзя? Где люди, которых ты в живую ни разу не видел, имеет возможность решать что можно и нельзя видеть самостоятельным совершеннолетним людям?! Практика так то наглядно демонстрирует невозможность (или, в крайнем случае, фундаментально низкую эффективность) защиты от мошенников и иных опасностей путём блокировки средств связи, какие ещё причины могут быть оправданны?

В идеале нужна полностью анонимная и существенно децентрализованная сеть подобная Tor, где чисто технически невозможно начать блокировать "точечно", по стандартной методике постепенного продвижения всё более существенных запретов без особого сопротивления. Ну и, кончено же, в целом нет возможности как либо анализировать трафик. Вот только эту архитектуру надо было возводить ещё в эпоху свободного интернета, когда никто в здравом уме и подумать не мог о творящемся сейчас беспределе, чтобы она как IPv4 оказалось недвижимым стандартом, а сейчас на такое ни бюджетов нет, ни крупных организаций, желающих это продвигать, и вообще за такие попытки в террористы/экстремисты/иноагенты запишут.

Я уверен, что если бы власти сразу обратили внимание на сетевые технологии, никакого HTTPS и в помине бы не было, MITM с возможностью просматривать 102% трафика был бы основой сетевой инфраструктуры. В целом новые протоколы усиливают защиту от третьих лиц, вот только их внедрение затрудняется уже слишком быстро, чтобы можно было реализовать что-то серьёзное…

НЕ ТИПИЗИРОВАННЫЙ и С НЕЯВНЫМИ ПРИВЕДЕНИЯМИ язык?

Python — это язык со «строгой (сильной) динамической типизацией». Это типизированный язык и в нём нет неявных приведений. Если второй пункт, понимаю, мог был спутан с JavaScript (печально известным своими {} + []), то вот за отсутствием типизации как таковой следует идти в какое-нибудь лямбда-исчисление. В качестве хорошего сравнения можно привести C/C++, где два основных критерия системы типов инвертированы — у них «слабая статическая типизация», что как раз таки позволяет совершать жуткие неявные приведения.

нестрогость языка, которая даёт всё понимать интуитивно в самом начале

Решается поддерживаемой «из коробки» аннотацией типов и использованием нормальной IDE, которая будет показывать все соответствующие ошибки, а напрочь устраняется — линтером и тайп-чекером в CI. И да, благодаря аннотациям хорошо обученная нейросеть сумеет выразить всю суть почти без потерь, упуская лишь всякую оптимизационную магию на низком уровне.

Я не говорю, что надо всё писать на Python, нет, много где он будет плохим выбором, но именно выделенных здесь проблем у него явно нет.

Имхо, сформулировано странно. Значения по умолчанию хранятся прямо внутри объекта функции:

def f(a=[1, 2, 3], b=(4, 5, 6), *, c=set((7, 8, 9))):
    pass

print(f.__defaults__)   # ([1, 2, 3], (4, 5, 6))
print(f.__kwdefaults__) # {'c': {8, 9, 7}}

И эти же значения можно изменять даже без вызова функции, а пошаманив с __code__ так и вовсе добавлять/удалять сам факт наличия значений по умолчанию:

def f(a=[1, 2, 3]):
    print(a)

f() # [1, 2, 3]
f.__defaults__ = ([4, 5, 6],)
f() # [4, 5, 6]

При передаче же аргументов ничего не "создаётся" ­– уже существующие сущности просто добавляются в словарь локальных переменных:

def f(a=[1, 2, 3], b=(4, 5, 6), *, c=set((7, 8, 9))):
    print(locals())

f()            # {'a': [1, 2, 3], 'b': (4, 5, 6), 'c': {8, 9, 7}}
f([], c=set()) # {'a': [], 'b': (4, 5, 6), 'c': set()}

И, соответственно, если аргумент был передан явно, то его значение по умолчанию внутрь не попадёт:

a_ = [1, 2, 3]
def f(a=[1, 2, 3], b=(4, 5, 6), *, c=set((7, 8, 9))):
    print(a is a_)

f()   # False
f(a_) # True

Это полезное наблюдение, вот только основная заслуга в нём не WhatsApp'а и не Paint.NET'а, а самого Excel'я и структуры буфера обмена в Windows, в который при копировании данных помещается не какое-то одно конкретное их представление, а одновременно множество поддерживаемых форматов.

Копирование текста из редактора комментария в Chrome.
Копирование текста из редактора комментария в Chrome.

Excel добавляет в буфер обмена 20 разных форматов, среди которых также присутствует CF_BITMAP содержащий, собственно, рендер скопированного контента. Именно поэтому, например, любой графический редактор, корректно реализующий копирование/вставку, будет вести себя аналогично. Telegram также предпочитает изображение, но при закрытии окна со вставленной картинкой ещё и предложит текстовое представление.

Копирование таблички 3х2 из Excel 2024.
Копирование таблички 3х2 из Excel 2024.

К слову, около 100 строк на C++ занимает программа, отображающая актуальное изображение из буфера обмена, настолько это просто реализуется.

Полагаю, это сделано для ещё меньшего размера, ведь A вариант принимает кодировку Ansi, которая позволяет уместить строку "edit" в тот самый один long, а вот utf-16, принимаемая W вариантом, с учётом завершающего нуля потребует уже больше места, что выльется в лишние инструкции и константы, увеличив размер программы.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность