Питон

от Всичко за 1 лев, свободната енциклопедия

(пренасочване от Python)

Питон е алтернативно название за "хуй" и популярен език за програмиране. Казва се така, защото се ползва от хомосексуалисти, които "обичат питон", или с други думи "обичат [да лапат] хуй". Порно-произходът на езика бива разконспириран и от наличието на "not safe for work" (NSFW, кодово име за порно) пакети в официалните пакетни репозитории: https://pypi.org/project/nsfw/

За езика

Питон е любим език за програмиране на тези, които разработват изкуствен интелект, т.е. пак хомосексуалисти. Това се дължи на наличието на библиотеки, които се импортират в кода ви. Важни такива за големите глави са Нъмпи-дъмпти, питорч, тензортеч, кафе, панди и Юпитер.

Тъй като езикът е динамичен, нито вие знаете какви са променливите ви, нито самият език. Освен това всичко е видимо отвсякъде, което означава, че можете да си завирате лайната където си поискате (https://semitwist.com/articles/article/view/why-i-hate-python-or-any-dynamic-language-really).

Питон е бавен. Толкова бавен, че се препоръчва for циклите да не се ползват.

Тъй като са девствени онанисти-фетишисти и мислят само за гениталиите си, питонджиите извършват демоничните ритуали на т.нар. "duck typing" - отъждествявайки всичко с патката си.

В питон няма скоби и редовете се индентират с точно определен брой интервали. Ако сложите един повече или по-малко ще получите IndentationError: unexpected indent. За капак на всичко, с оглед на това че са клозетни ГЕЙОВЕ, страдащи от агорафобия, питонджиите имат страх от дълги редове и официалният наръчник за стил на езика изисква редове дълги 79 символа (https://www.python.org/dev/peps/pep-0008/#maximum-line-length).

Опитвате се да манипулирате файлове и пътеки? Искате да използвате разделителя на файловите пътеки? (/ ако сте педал-пингвинждия и \\ ако сте курва на Бил Порталов) Дано ви бива да печелите "ези-тура" или случайно попаднете на съответния док, щото os.pathsep и os.path.sep са две различни стойности, като първата е разделителя на вашия PATH environment variable, а второто е това, което ви трябва.

При инсталация питон насира environment variables-а до такава степен, че в наши дни питон не се инсталира директно. Първо се инсталира анаконда, създава се виртуален environment, и след това се инсталира питон.

Внимание! Да не се бърка питон 2 с питон 3. Двете са несъвместими, и половината работи, които ви трябват, не работят на версията, която ползвате.

За автора

Пророкът на питон е Гнидо ван Росум, дебел фагот и холандец. Думата му е закон. В последните години този бог на cringe-а води кръсноносни походи срещу не-инклузивни термини като "master" и "slave" (https://www.theregister.co.uk/2018/09/11/python_purges_master_and_slave_in_political_pogrom/) и отказва да обучава бели мъже заради "diversity" (https://qz.com/1624252/pythons-creator-thinks-it-has-a-diversity-problem/), намалявайки сексизма в индустрията (несъществуващ) като проявява сексизъм.

С оглед на това не е изненадващо че обичащите да лапат питон програмисти проявяват качества подобни на качествата на пророка.


Примери от индустрията

С един колега инсталирахме tensorflow два часа вчера!
   -- истински цитат от анонимен програмист в САП Лабс (инсталацията на tensorflow не отнема повече от 10 минути)


Пример за функция, написана на питон от професионален компютърен учен (https://github.com/jhaux/VUNet/blob/ac788052b74996ecdf779c8b5a09c4126086e6b3/VUNet/utils/loss_utils.py#L65):

def aggregate_kl_loss(prior_means, posterior_means):
    kl_loss = torch.sum(
        torch.cat(
            [
                latent_kl(p, q).unsqueeze(dim=-1)
                for p, q in zip(
                    list(prior_means.values()), list(posterior_means.values())
                )
            ],
            dim=-1,
        ),
        dim=-1,
    )
    return kl_loss

Същата функция, пренаписана от мен (но поне аз не съм шибан троглодит):

def aggregate_kl_loss(prior_means, posterior_means):
    vals = zip(list(prior_means.values()), list(posterior_means.values()))
    return torch.stack([latent_kl(p, q) for p, q in vals]).sum(0)

Горе идиотът - да не говорим за ужасния му формат - създава фалшиво измерение на тензорите и ги събира по него. Ние правим същото, но не сме гейове и затова ползваме функцията, която съществува за тая цел, спестявайки си безсмислените операции; и тъй като не сме гейове, можем да намалим функцията до един ред:

def aggregate_kl_loss(prior_means, posterior_means):
    return torch.stack([latent_kl(p, q) for p, q in zip(prior_means, posterior_means)]).sum(0)

Тоя ред обаче е 95 символа дълъг и следователно Гнидо би ме екзекутирал задето си го позволявам. Освен това декриптирането на кода на тоя боклук е толкова весело колкото да ти забиват трески под ноктите

Лични инструменти