LINUX.ORG.RU

Python 3.5.0

 


0

3

Из наиболее интересного:

  • Модуль typing
    def greeting(name: str) -> str:
        return 'Hello ' + name
    
    from typing import Callable
    
    def feeder(get_next_item: Callable[[], str]) -> None:
        # Body
    
    def async_query(on_success: Callable[[int], None],
                    on_error: Callable[[int, Exception], None]) -> None:
        # Body
    
  • Additional Unpacking Generalizations
    >>> *range(4), 4
    (0, 1, 2, 3, 4)
    >>> [*range(4), 4]
    [0, 1, 2, 3, 4]
    >>> {*range(4), 4}
    {0, 1, 2, 3, 4}
    >>> {'x': 1, **{'y': 2}}
    {'x': 1, 'y': 2}
    
  • Новый оператор @ для умножения матриц.

    Например, вместо «S = dot((dot(H, beta) - r).T, dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))» теперь можно использовать более понятное представление «S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)».

>>> Подробности

★★★★★

Проверено: JB ()
Последнее исправление: JB (всего исправлений: 5)
Ответ на: комментарий от anonymous

Не бывает вроде.

Явная типизация является частным случаем статической типизации, а вот статическая|неявная бывает (Scala, F#, ML к примеру).

EXL ★★★★★
()
Ответ на: комментарий от tailgunner

Уже нагуглил, очень дерьмовый термин, как по мне. Лучше «есть/нет вывод типов, локальный/глобальный».

Deleted
()
Ответ на: комментарий от EXL

Это не противоположные понятия - я могу спокойно указывать в хачкиле типы, а могу не указывать (почти везде). В некоторых лиспах есть DSL для указания типов. В пистоне есть PEP3107. Поэтому такое разделение сосет.

Deleted
()
Ответ на: комментарий от anonymous

Между прочим, где еще есть аналог metacpan, или NYTProf?

Deleted
()
Ответ на: комментарий от Deleted

Судя по количеству изменений, да.

anonymous
()
Ответ на: комментарий от anonymous

Когда будет auto plus(auto x, auto y), тогда и поспоришь.

~$ cat ./test.cpp
#include <iostream>
using namespace std;

int main() {
    auto plus = [](auto x, auto y) { return x + y; };

    cout << plus( string("2 + 2"), " = " ) << plus( 2, 2 ) << '\n';
}
~$ clang++ -std=c++14 ./test.cpp
~$ ./a.out 
2 + 2 = 4
anonymous
()
Ответ на: комментарий от Deleted
#include <iostream>

template<class T>
T plus(T x, T y) { return x + y; }

int main() {
    auto x = 3;
    auto y = 4;
    auto z = plus(x, y);
    std::cout << z << std::endl;
    return 0;
}

работает прекрасно

template<class A, class B, class C>
C plus(A x, B y) { return x + y; }

test.cpp:4:3: note:   template argument deduction/substitution failed:
test.cpp:9:23: note:   couldn't deduce template parameter ‘C’
     auto z = plus(x, y);

так, конечно, ломается. только я всю жись называл эту фичу хаскеля type inference, а не неявной типизацией, и никакого отношения к javascript, ruby, python итд она не имеет

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от MyTrooName

мам, смотри - без рук^w темплейтов

#include <string>
#include <iostream>

int main(void) {
    auto plus =  [](auto x, decltype(x) y) -> decltype(x) {
        return x + y;
    };
    std::cout << plus(3, 18);
    std::cout << plus(std::string{"kek"}, "lel");
}

Так шта позорище ты свое правильно удалил.

Deleted
()
Ответ на: мам, смотри - без рук^w темплейтов от Deleted

Так шта позорище ты свое правильно удалил.

я никогда и не скрывал, что C++ - позорище

auto plus = [](auto x, decltype(x) y) -> decltype(x) {

я в этой лапше не силен, но походу у тебя тут не a->b->c, а такое же a->a->a как и у меня

MyTrooName ★★★★★
()
Ответ на: комментарий от EXL

Омерзительный высер, как и следовало ожидать от хабрапараши.

Статическая / динамическая типизация.

Такого нет, есть статическая проверка типов и динамическая проверка типов.

Сильная / слабая типизация (также иногда говорят строгая / нестрогая).

Это баззворд без общепринятого смысла.

Явная / неявная типизация

Уже разобрали.

http://s10.postimage.org/cliusdobd/dynamic.jpg

Господи, прости.

в референсе - говносайт, википедия и лавсан

Я уже не мог быть тупее, я просто вытекал из поста

Deleted
()
Ответ на: комментарий от Deleted

А то, я же понял, что ты хочешь теперь a->a->a, а не a->b->c, как я изначально подумал.

неправильно понял.

так что, С++ умеет теперь type inference на уровне хацкеля? статически?

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

На самом деле это какой-то сахарок для лямбд по типу шаблонов (сорян, я не знаю крестов).

Deleted
()

def greeting(name: str) -> str:

Охренеть. В питоне строгая типизация есть? Нахера?

def feeder(get_next_item: Callable[[], str]) -> None:

Сейчас блевану.

Новый оператор @ для умножения матриц.

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

nikolnik ★★★
()
Ответ на: комментарий от nikolnik

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

И ты умрешь? Да, это те самые мартицы. Прощай.

tailgunner ★★★★★
()
Ответ на: комментарий от nikolnik

В питоне строгая типизация есть?

есть и была всегда. еще один.

>>> "a string" + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly


Подождите, умоляю, только не говорите, что это те самые матрицы из математики

да

и они встроенный тип данных в питон

нет

и для них есть встроенный оператор для умножения

да. почитай пеп, я сначала тоже подумал wtf, но там все очень резонно описано, единственное что мне не очень нравится это разная семантика в зависимости от аргументов, ну, ребята которые этим будут пользоваться говорят это «ожидаемое» поведение, так что ладно.

val-amart ★★★★★
()
Ответ на: комментарий от nikolnik

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

Увы тебе. Некоторые нищеброды пытаются питон вместо матлаба использовать.

anonymous
()
Ответ на: комментарий от nikolnik

def greeting(name: str) -> str:

это не типизация, это аннотации. там что угодно может быть, например:

def greeting(name: «имя») -> «приветствие»

Callable[[], str]

вот это что-то новенькое, во всяком случае мой парсер не берет

те самые матрицы из математики

да

они встроенный тип данных

нет

есть встроенный оператор для умножения

формально это просто новый встроенный оператор, без конкретной семантики, но рекомендованный для непоэлементного^Wматричного умножения

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от anonymous

Все жрут говно, надо и нам. Понятно.

anonymous
()
Ответ на: комментарий от Sahas

старый, но не бесполезный* Терминатор™

anonymous
()
Ответ на: комментарий от anonymous

Твой libastral - говно. И ты так и не ответил на мой вопрос.

anonymous
()
Ответ на: комментарий от val-amart

есть и была всегда. еще один.

Явно указывать типы - это вообще мегаизвращение.

да

Нахера? Почему нельзя просто было реализовать класс Matrix какой нибуть и перегрузить оператор умножения?

единственное что мне не очень нравится это разная семантика в зависимости от аргументов

Фу млять, фу нафиг.

nikolnik ★★★
()

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

anonymous
()
Ответ на: комментарий от nikolnik

Явно указывать типы

Пока в статическом мире все ужом изворачиваются (даже плюсовики). чтобы избавиться от аннотаций, гвидоны добавляют явную типизацию. Круто, чо.

anonymous
()
Ответ на: комментарий от anonymous

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

Только вот никто так и не смог избавиться от аннотаций.

tailgunner ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Ну да, очень интересно лол. Но если никто ошибку не кидает при greeting(1), например, то какой толк?

На PyCon2015 Гвидо объяснял какой толк и зачем вообще было заморачиваться. Запись есть на ютубе. TL;DR: если ты не знаешь, то тебе не надо.

anonymous
()
Ответ на: комментарий от nikolnik

Явно указывать типы - это вообще мегаизвращение.

вкусовщина. иногда они полезны. аннотации опциональны, сам интерпретатор их вообще игнорирует.

Нахера? Почему нельзя просто было реализовать класс Matrix какой нибуть и перегрузить оператор умножения?

потому что надо прочитать PEP, уже сколько раз тебе сказали. для матриц есть *две* операции умножения, поелементное и собственно произведение. одно из них приходится реализовать методом, выглядит уродски да и в разных библиотеках сделано по-разному. теперь везде одинаково.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

аннотации опциональны, сам интерпретатор их вообще игнорирует.

Пока валялся под столом в припадке ржаки вспомнил, где я такое уже видел: ну да, в перле давно уже такое есть, только внезапно! никто не пользуется. Странно, да?

anonymous
()
Ответ на: комментарий от Debasher

А нам и на втором хорошо, в общем-то.

Из-за таких вот ретардеров Py3 только я использую в проде и ещё Гвидо.

anonymous
()
Ответ на: комментарий от Debasher

А вот Ruby не покрывается аццкими костылями.

Ага. Их программисты сами пишут, в виде DSL.

anonymous
()
Ответ на: комментарий от anonymous

Из-за таких вот ретардеров Py3 только я использую в проде и ещё Гвидо.

Везёт, далеко не везде бюджет под по сути бесполезный для программного продукта переезд выделяют :)

Debasher ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Пока валялся под столом в припадке ржаки вспомнил, где я такое уже видел: ну да, в перле

А люди постарше видели это в Си.

tailgunner ★★★★★
()
Ответ на: комментарий от val-amart

вкусовщина. иногда они полезны. аннотации опциональны, сам интерпретатор их вообще игнорирует.

Т.е. если я даже укажу, что аргумент должен быть int, но вставлю str, оно мне даже иксепшен не выбросит? Анонимусы сверху более остроумно выразили мои мысли.

одно из них приходится реализовать методом

Я вообще просто плачу. Кому вообще интересно, как метод * над объектом реализован и что там внутри? А почему бы не пойти дальше и не встроить типы векторов, скаляров, тензоров и прочей хрени, после чего для каждой операции создать свой оператор?

nikolnik ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.