Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как научиться читать любой код за 30 минут

Как научиться читать любой код за 30 минут

Григорий Петров (Voximplant) @ Python Junior Meetup № 2

"Максимально просто расскажу о том, как выглядит текст программы на любом языке программирования с точки зрения самого языка программирования. Вы узнаете про expression’ы и statement’ы, про страшную штуку evaluate, про то, что английский язык учить придется, и много других интересных штук".

Moscow Python Meetup

April 13, 2017
Tweet

More Decks by Moscow Python Meetup

Other Decks in Education

Transcript

  1. Что сейчас будет? Рассказывает Григорий Петров Специализация Руководство разработкой Чем

    занимается Технический евангелист Опыт Более 15 лет Время выступления 30 минут... надеюсь Вопросы В конце выступления 2
  2. В предыдущих сериях a = 1 переменные - это возможность

    называть штуки с целью обращаться по имени 4
  3. В предыдущих сериях a = 1 переменные - это возможность

    называть штуки с целью обращаться по имени и переназывать 5
  4. Что такое язык? 1. Кучка именованных штук 2. Правила, что

    с ними делать • Грамматика ◦ Синтаксис ◦ Морфология • Орфография ◦ Пунктуация ◦ Правописание 11
  5. Что такое язык? 1. Кучка именованных штук 2. Правила, что

    с ними делать • Грамматика ◦ Синтаксис ◦ Морфология • Орфография ◦ Пунктуация ◦ Правописание 12
  6. 22

  7. 23

  8. Но есть несложные правила (('-%s' if order else '%s') %

    column_name) но не в кавычках спецсимволы, парные скобки 26
  9. Итого: ( ) ( ) ) '-%s' '%s' ) %

    ) if order else column_name) 28
  10. А затем магия: 1. Кусочки берутся слева направо 2. Для

    каждого выполняется evaluate ... 3. ... в соответствии с приоритетом 31
  11. А затем магия: 1. Кусочки берутся слева направо 2. Для

    каждого выполняется evaluate ... 3. ... в соответствии с приоритетом начнем с него 32
  12. Evaluate штука value значение evaluate текст программы байты в памяти

    Сейчас уже нет, а в LISP'е и раньше нет, но так очень удобно для понимания :) выполнение программы 35
  13. Когда у нас несколько кусочков они могут использовать значения друг

    друга 1 == 2 низкий приоритет эвалуейтится в конце 42
  14. Когда у нас несколько кусочков они могут использовать значения друг

    друга 1 == 2 низкий приоритет эвалуейтится в конце 43
  15. Когда у нас несколько кусочков они могут использовать значения друг

    друга 1 == 2 использует результат evaluate слева и справа 44
  16. Когда у нас несколько кусочков они могут использовать значения друг

    друга поэтому работают вот такие конструкции: user.pics.last() == User.pics.MAIN lvalue rvalue 45
  17. Лево и право. Affinity 1 + 2 + 1 1

    + both affinity right affinity нет :) 46
  18. Лево и право. Affinity 1 + 2 + 1 foo()

    both affinity right affinity есть 47
  19. Какие бывают кусочки • минимальный кусочек - это expression ◦

    если сам по себе - то literal expression ◦ если использует слева/справа - то compound 52
  20. Какие бывают кусочки • минимальный кусочек - это expression ◦

    если сам по себе - то literal expression ◦ если использует слева/справа - то compound ▪ если делает переменную, то assignment 53
  21. Какие бывают кусочки • минимальный кусочек - это expression ◦

    если сам по себе - то literal expression ◦ если использует слева/справа - то compound ▪ если делает переменную, то assignment ▪ если проверяет, то conditional 54
  22. Какие бывают кусочки • минимальный кусочек - это expression ◦

    если сам по себе - то literal expression ◦ если использует слева/справа - то compound ▪ если делает переменную, то assignment ▪ если проверяет, то conditional ▪ если считает, то arithmetic 55
  23. Какие бывают кусочки • минимальный кусочек - это expression ◦

    если сам по себе - то literal expression ◦ если использует слева/справа - то compound ▪ если делает переменную, то assignment ▪ если проверяет, то conditional ▪ если считает, то arithmetic ▪ ... 56
  24. Какие бывают кусочки • минимальный кусочек - это expression ◦

    если сам по себе - то literal expression ◦ если использует слева/справа - то compound ▪ если делает переменную, то assignment ▪ если проверяет, то conditional ▪ если считает, то arithmetic ▪ ... • специальный кусочек - это statement 57
  25. Какие бывают кусочки • минимальный кусочек - это expression ◦

    если сам по себе - то literal expression ◦ если использует слева/справа - то compound ▪ если делает переменную, то assignment ▪ если проверяет, то conditional ▪ если считает, то arithmetic ▪ ... • специальный кусочек - это statement потому что спецсимволов не хватило 58
  26. Statement - костыль синтаксиса Когда не хватает спецсимволов... мы придумываем

    спецсинтаксис! В лиспе, кстати, символов хватило. Скобочки там для всего 60
  27. Statement как он есть foo = (v) => v *

    2 def foo(v): return v * 2 61
  28. Statement как он есть foo = (v) => v *

    2 def foo(v):\n __return v * 2 function definition operator, ака "толстая стрелка" function definition statement, ака "синтаксис python" 62
  29. Statement как он есть foo = (v) => v *

    2 def foo(v):\n __return v * 2 function definition operator, ака "толстая стрелка" function definition statement, ака "синтаксис python" 63
  30. Что такое "operator"? Обычно так называют спецсимволы ... и части

    statement вроде "return" В сложных отношениях с expression 66
  31. Что такое "operator"? Обычно так называют спецсимволы ... и части

    statement вроде "return" В сложных отношениях с expression left и right affinity - это обычно про них 67
  32. Что такое "operator"? Обычно так называют спецсимволы ... и части

    statement вроде "return" В сложных отношениях с expression left и right affinity - это обычно про них Приоритет - тоже обычно про них 68
  33. Что такое "operator"? Обычно так называют спецсимволы ... и части

    statement вроде "return" В сложных отношениях с expression left и right affinity - это обычно про них Приоритет - тоже обычно про них 69
  34. Вернемся к магии 1. Кусочки берутся слева направо 2. Для

    каждого выполняется evaluate ... 3. ... в соответствии с приоритетом готово! 70
  35. Вернемся к магии 1. Кусочки берутся слева направо 2. Для

    каждого выполняется evaluate ... 3. ... в соответствии с приоритетом теперь - о приоритетах 71
  36. Operator precedence ( ) ( ) ) '-%s' '%s' )

    % ) if order else column_name) 1 1 73
  37. Operator precedence ( ) ( ) ) '-%s' '%s' )

    % ) if order else column_name) 2 2 74
  38. Operator precedence ( ) ( ) ) '-%s' '%s' )

    % ) if order else column_name) 3 3 75
  39. Operator precedence ( ) ( ) ) '-%s' '%s' )

    % ) if order else column_name) 3 3 4 5 6 76