@TWT

Тег python в блоге TWT

TWT

Я нашёл баг в GHC, version 8.4.3

1) список [71,79..99] и список [71,79,87,95] это одни и те же 4 элемента.
2) поэтому в списке [x/2 | x <- [71,79,87,95]] тоже 4 элемента.
3) однако в списке [x/2 | x <- [71,79..99]] уже ПЯТЬ элементов.

Давайте сравним с нормальным языком. Сперва на питоне напишу, а ниже на хаскеле, чтобы было видно:

$ ipython
In [1]: [x/2 for x in range(71, 99, 8)]
Out[1]: [35.5, 39.5, 43.5, 47.5]

$ ghci
Prelude> [x/2 | x <- [71, 79..99]]
[35.5, 39.5, 43.5, 47.5, 51.5]

Хаскель ошибочно добавляет 51.5 потому что это 103 пополам.
Баг в том, что 103 не входит в список [71, 79..99]

Idris написан на Haskell, дедфуд пишет на Idris. Такие дела.

TWT

If you come to Haskell from a Python or Clojure background you will definitely notice how painful it is to work with dictionaries/maps in Haskell.

Haskell programmers will very predictably reach for records instead of maps/dictionaries because records are infinitely more pleasant to use.

TWT

Боже мой какой пиздец

TWT
$ grep goto i915_drv.c
                goto out;
                goto cleanup_vga_client;
                goto cleanup_csr;
                goto cleanup_irq;
                goto cleanup_modeset;
                goto cleanup_gem;
                goto out_err;
                goto out_free_wq;
                goto err_engines;
                goto err_workqueues;
                goto err_bridge;
                goto err_uncore;
                goto err_perf;
                goto err_ggtt;
                goto err_ggtt;
                goto err_ggtt;
                goto err_ggtt;

Я не люблю такую хуйню
Мы, программисты на питоне, умеем писать без goto

TWT

В свежем qtcreator на С++ я сделал

const auto x = QChar::unicodeVersion(static_cast<uint>(ch));

и получил

128575 -> Unicode_6_0
128576 -> Unicode_6_0
128577 -> Unicode_7_0
128578 -> Unicode_7_0
128579 -> Unicode_8_0

На питоне я так сделать не могу, потому что в PyQt не завезли QChar::unicodeVersion
Или я плохо искал...
А unicodedata.unidata_version это просто константа '11.0.0'

TWT

Whilst an Architect worried about Python vs Scala vs Clojure vs Java, someone shipped in PHP.

TWT

Мне ребята из соседнего подъезда подсказали как в питоне проверять чистоту функции.
Дело в том, что внешнее и нечистое в питоне имеет опкод LOAD_GLOBAL
И достаточно просто в цикле пробежаться по всем опкодам функции и проверить, чтоб там не было ни одного LOAD_GLOBAL. Даже если из функции просто захотеть что-то распечатать то print всё равно будет в LOAD_GLOBAL.

import dis
for op in dis.get_instructions(f):
    if "GLOBAL" in op.opname:
        print(op)
        break

Вообще красота.
Прямо как в хаскеле, только хаскель САМ говорит, а тут надо руками проверку запускать.

TWT

What’s New In Python 3.8

TWT

Вспомнил Tenno-Seremel когда увидел icd_generator.rb -- единственный файл на руби в пакете ocl-icd

Я не могу портировать его на питон: я не знаю рубей

TWT

Я напрягся и смог удалить руби из системы.
Питоновый мир победил.
Кому нужен ломтик октябрьского неба?
О-О-О... Моя идентация...

TWT

В питоне решили бороться с hash( (3, 3) ) == hash( (-3, -3) )

The hash function for tuples is now based on xxHash.
This makes hash collisions less likely.
Patch by Jeroen Demeyer.

Питон будет тормозить ещё немножко сильнее

TWT

Добрая польская душа Maciej Szymkiewicz aka @zero323 заимплементил на питоне скаловскую монаду Try[T]

In [1]: from tryingsnake import Try, Success, Failure

In [2]: from math import sqrt

In [3]: xs = [1.0, 0.0, "-1", -3, 2, 1 + 2j]

In [4]: sqrts = [Try(sqrt, x) for x in xs]

In [5]: [x.get() for x in sqrts if x.isSuccess]
Out[5]: [1.0, 0.0, 1.4142135623730951]

In [6]: def get_etype(e): return Try(lambda x: type(x).__name__, e)

In [7]: [x.recoverWith(get_etype).get() for x in sqrts if x.isFailure]
Out[7]: ['TypeError', 'ValueError', 'TypeError']
TWT

Не давайте математикам писать на С++
У них есть питон и пусть ебуццо с ним

Вот что случается, когда математик не умеет писать на С++ но настойчиво пишет на нём:
https://github.com/Normaliz...project_and_lift.cpp

Блять это говно даже не компилируется. Я уже заебался патчить его.
Теперь я понимаю чувства mva который патчил тилиграм.

TWT

TWT

Закон Парето утверждает, что 20% кода на питоне дают 80% результата

TWT

Дан круг.
На питоне.
Требуется построить квадрат с той же площадью.
На питоне.

TWT
test test_venv failed -- Traceback (most recent call last):
  File "/usr/lib64/python3.6/test/test_venv.py", line 145, in test_prefixes
    self.assertEqual(out.strip(), expected.encode())
AssertionError: b'/usr' != b'/usr/lib/python-exec/python3.6/../../..'

На самом-то деле /usr/lib/python-exec/python3.6/../../.. это то же самое что /usr :)

TWT
TWT

Так что я с тех самых пор пользуюсь именно Python’ом почти для всех научных работ

Я по этой фразе угадал дедфуда в каментах до того, как увидел каменты.

TWT

Благодаря sigsergv и #okwjp я узнал, что даже питон может напечатать вам CPUID signature:
1) git clone https://github.com/flababah/cpuid.py.git
2) cd cpuid.py
3) sed -i '30i\ \ \ \ print(f"CPUID : {cpu(1)[0]:X}")' example.py
4) python example.py

P.S. Хворк, а ты знал что sed умеет вставлять строки прямо внутрь файла? В этом есть что-то возбуждающее...

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.