Python

Apr. 13th, 2017 10:47 pm
green_fr: (Default)
[personal profile] green_fr
Были в гостях у [livejournal.com profile] catpad, заигрались в настолки, начали рассуждать о вероятностях, очнулись за компьютером.

Какова вероятность выкинуть шестью кубиками шесть разных чисел, если ты можешь перебрасывать любое количество не понравившихся тебе кубиков не более двух раз? (это наш мальчик вытянул себе сложную карточку в King of Tokyo).

Очень быстро мы потеряли всех остальных игроков, написали Монте-Карло, а потом и аналитическую формулу, после чего перешли к сравнительным характеристикам языков программирования. Ещё через 15 минут я понял, что хочу выучить %subj%. Благо под него есть PyGame — проект, издалека похожий на то, что я недавно искал. Я уже успел набросать первое приближение на Splendor, но в процессе появилось куча мелких вопросов.

Никто из присутствующих не использует python в повседневной жизни, и не мог бы мне ответить на пару вопросов о best practices?

— Какой IDE использовать? Я накачал какое-то количество, мне не нравится ни один. Мне однозначно нужна возможность step-by-step debugging с простым просмотром переменных в момент остановки, а в идеале ещё и с консолью, откуда я мог бы интерактивно запускать какие-то команды с имеющимися переменными. Всё остальное мне казалось везде имеющимися деталями, но нет. Половина редакторов не нумерует строки, например. А ещё в одном я не нашёл, как запустить написанный код.

— Как вообще строятся проекты? Я привык к «один класс / функция / скрипт — один файл», но все примеры, которые я скачиваю, смешивают всё в самых разных пропорциях. И их можно понять — если у меня класс MyClass в том же файле, что и вызывающий его код, то вызов его идёт просто как MyClass. А если он в своём файле myClass.py, то мало того, что в начале вызывающего кода нужно написать import myClass, так ещё и указывать это при вызове: myClass.MyClass. В той же java всё было достаточно просто — в отсутствии конфликта, всё, указанное в import, как бы попадает в текущий namespace, и никакое уточнение уже не требуется. Не говоря уже о том, что все классы одного package по умолчанию видят друг друга.

— Как организовывать константы? Например, у меня есть размеры экрана, размер карты, расстояние между рядами карт и т.п. (используется как для отрисовки, так и для определения, куда пользователь ткнул мышью). Я бы с удовольствием засунул в класс статические структуры констант, чтобы получить вызов типа Constants.SCREEN.WIDTH (а то и в глобально видимую константную структуру, чтобы избежать имени класса). Но мало того, что в питоне нет простого варианта для константы (в принципе, меня это не сильно смущает, я могу проконтролировать, что я не меняю значения собственных констант), я не нашёл простого варианта определения структуры. Либо какие-то многострочные определения namedtuple, либо каждая структура — как класс без кода (в принципе было бы терпимо, если бы не синтаксис обращения к классу — см. выше).

— Есть ли какие-то «векторные» операторы? Например, у меня есть список координат X, и мне нужно понять, какому интервалу соответствует координата x. В каком-нибудь MatLab я написал бы find(x > X(1 : end — 1) && x <= X(2 : end)), чтобы получить номер нужного мне интервала, а здесь? [livejournal.com profile] catpad показал мне, конечно, map и reduce, но они выглядят как пушки для воробьёв (ну или я просто ещё не вкурил красоту их использования).

А так, конечно, пока что очень приятный язык. Практически на любой вопрос google сразу находит внятные ответы, уже разобранные возможные варианты и уже написанные библиотеки. Невольно вспоминаешь недавний анекдот с bash.org, заканчивающийся фразой: «Это как играть в JS-пей. Вбиваешь в гугл рандомное слово с припиской JS. Если такой библиотеки нет — пьёшь.» Я бы правда играл наоборот — если не сумел найти название ещё не написанной библиотеки.

Update 11/05/2017. Bash.org. Цитата №444797
Комментарий к статье с подборкой плагинов для текстового редактора Sublime Text:
zzz: я использую vim, просто потому что не могу из него выйти, чтобы посмотреть, что такое sublime text...

Date: 2017-04-13 09:02 pm (UTC)
From: [identity profile] wildest-honey.livejournal.com
У меня Spyder, мне в нем удобно. Коллеги пользуются pycharm.

Про интервал я пользуюсь numpy там просто будет с where и сильно похоже на матлаб

Date: 2017-04-13 09:09 pm (UTC)
From: [identity profile] wildest-honey.livejournal.com
Если вместо import myClass
Написать from my class import *
То не надо потом класс указывать

(no subject)

From: [identity profile] city-of-sorrow.livejournal.com - Date: 2017-04-13 09:26 pm (UTC) - Expand

(no subject)

From: [identity profile] wildest-honey.livejournal.com - Date: 2017-04-13 09:37 pm (UTC) - Expand

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-04-14 08:07 am (UTC) - Expand

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-04-14 08:07 am (UTC) - Expand

Date: 2017-04-14 08:04 am (UTC)
From: [identity profile] green-fr.livejournal.com
А в Spyder есть, что мне нужно, да? (я на работе, питон дома, а по документации пока не понятно)

(no subject)

From: [identity profile] wildest-honey.livejournal.com - Date: 2017-04-14 08:12 am (UTC) - Expand

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-04-14 08:38 am (UTC) - Expand

(no subject)

From: [identity profile] wildest-honey.livejournal.com - Date: 2017-04-14 08:40 am (UTC) - Expand

(no subject)

From: [identity profile] wildest-honey.livejournal.com - Date: 2017-04-14 08:41 am (UTC) - Expand

Date: 2017-04-13 09:03 pm (UTC)
From: [identity profile] muh2.livejournal.com
Я совершенно не специалист, но PyScripter не вызывал отторжения.

Date: 2017-04-14 08:08 am (UTC)
From: [identity profile] green-fr.livejournal.com
А в PyScripter есть step by step и всё остальное? (я на работе, питон дома)

(no subject)

From: [identity profile] muh2.livejournal.com - Date: 2017-04-14 08:49 am (UTC) - Expand

Date: 2017-04-13 09:10 pm (UTC)
From: [identity profile] xxxxx.livejournal.com
первый вопрос сногсшибательный

Date: 2017-04-14 08:08 am (UTC)
From: [identity profile] green-fr.livejournal.com
Да, я забыл поставить таг flame :-)

Date: 2017-04-13 09:23 pm (UTC)
From: [identity profile] city-of-sorrow.livejournal.com
я пользовалась вместо иде SublimeText, а дебаггером pdb:

...
import pdb

....
pdb.set_trace()
...

где надо и дальше из командной строки всё что надо можно делать.

Date: 2017-04-13 10:07 pm (UTC)
From: [identity profile] igann.livejournal.com
+1
Sublime Text - отрада моих рабочих будней. Даже купил себе лицензию, что очень редко со мной бывает.
(Ctrl+D) и все.

Нужно пару плагинов поставить (SublimePythonIDE must have)

PyCharm Мне тоже понравился когда я смотрел что то такое, но по сравнению c sublime все не то.

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-04-14 08:11 am (UTC) - Expand

(no subject)

From: [identity profile] igann.livejournal.com - Date: 2017-04-15 05:58 am (UTC) - Expand

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-04-15 10:01 am (UTC) - Expand

Date: 2017-04-14 08:09 am (UTC)
From: [identity profile] green-fr.livejournal.com
А я вот поставил SublimeText, и правда потерялся. Это в нём я не нашёл даже как запустить мой проект, не говоря уже о дебаге. При том, что он явно в первых строках всяких хит-парадов (я почитал, конечно же, перед тем, как что-то ставить).

Date: 2017-04-13 09:25 pm (UTC)
From: [identity profile] city-of-sorrow.livejournal.com
константы если группировать вместе, то самое простое/читабельное на мой взгляд, это dictionary.
всякие разные операции со списками/массивами, это numpy.

Date: 2017-04-13 09:41 pm (UTC)
From: [identity profile] oiseau-russe.livejournal.com
Плюсую к Спайдеру (идет автоматом с Анакондой, хорошо работает под виндой)

Date: 2017-04-13 09:51 pm (UTC)
From: [identity profile] l-sylvanas.livejournal.com
Для векторых операций, наверное, numpy.
IDE: я пользуюсь PyCharm, но обосновать ничем не могу особо :).

Date: 2017-04-14 08:21 am (UTC)
From: [identity profile] green-fr.livejournal.com
Он был ближе всего к моему идеалу, там я не нашёл возможности выполнить какую-то команду, когда я в debug'е.

Date: 2017-04-13 10:03 pm (UTC)
ext_615659: (ДР Цертуса 2011)
From: [identity profile] akuklev.livejournal.com
PyCharm?

Подчёркиваю, что пользовался им и до того как начал работать в JetBrains. ;-)

Date: 2017-04-14 08:22 am (UTC)
From: [identity profile] green-fr.livejournal.com
А ты знаешь, можно ли там выполнить ручками команду, когда ты находишься в debug'е? А то я не нашёл.

(no subject)

From: [identity profile] akuklev.livejournal.com - Date: 2017-04-14 09:06 am (UTC) - Expand

Date: 2017-04-13 10:47 pm (UTC)
From: [identity profile] igann.livejournal.com
1 IDE - Ответил выше - Sublime рулит. но для Stepbystep лучше PyCharm
Но я скорее советую освоить ipython - это источник счастья
Кроме того надеюсь тебе про pip уже все рассказали

2 Структура питон проекта http://python-guide-pt-br.readthedocs.io/en/latest/writing/structure/ https://packaging.python.org/distributing/#configuring-your-project
Если сделаешь как написано, скажешь потом себе спасибо не один раз

3 Константы можешь закинуть в модуль

consts.py
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 240

потом:
import consts
print (consts.SCREEN_WIDTH)
#or
from consts import *
print (SCREEN_WIDTH)



но я бы сделал скорее через словарь + addict + файл настроек в формате yaml
pip install addict pyyaml

file settings.yaml
screen:
  width:  480
  height: 280

example:
import addict, yaml
conf = addict.Dict(yaml.load(open('settings.yaml').read())
print(conf.screen.width)
print(conf.screen.height)


4 В питоне есть ооооочень строгие правила наименования всего и вся. погугли Python + PEP8 для начала - а потом можешь до гугловских стандартов подтянуться

Векторныe операции есть в numpy
In [14]: a = numpy.array([10,20,30,40,50,60,70,80,90])
In [15]: a.searchsorted(25, 'right')
Out[15]: 2

Вот тут для таких как ты есть шпаргалка

Приглашай в гости на выхах, попрограмируем.

Советую сразу github осваивать - тебе понравится.
Edited Date: 2017-04-13 10:52 pm (UTC)

Date: 2017-04-14 08:34 am (UTC)
From: [identity profile] green-fr.livejournal.com
1. Про pip мне никто ничего не рассказал, потому как некому :-) Но я уже понял, что это что-то типа утилиты для установки package'й. Правильно?
ipython посмотрю, но если вдруг ты можешь добавить, почему там счастье, мне будет проще :-)

3. Супер, спасибо!

Date: 2017-04-14 08:05 pm (UTC)
From: [identity profile] green-fr.livejournal.com
GitHub поставил и настроил, без этого куда же :-)

Конвенции имён у меня пока что "свои", джавовские. Может быть когда-нибудь перейду на питоньи, но пока что мне больно даже смотреть на searchsorted без заглавного S...

А с константами - мне всё равно не нравится. Вот если бы принцип как в первом твоём примере, а синтаксис - как во втором. То есть, определить константы где-то в отдельном файле, но чтобы они были сгруппированы по структурам. И в результате писать:

from consts import *
print(SCREEN.WIDTH)
print(SCREEN.HEIGHT)

Как это можно нормально сделать?

(no subject)

From: [identity profile] igann.livejournal.com - Date: 2017-04-14 09:56 pm (UTC) - Expand

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-04-15 10:01 am (UTC) - Expand

(no subject)

From: [identity profile] igann.livejournal.com - Date: 2017-04-15 08:05 pm (UTC) - Expand

(no subject)

From: [identity profile] igann.livejournal.com - Date: 2017-04-14 10:01 pm (UTC) - Expand

Date: 2017-04-14 01:36 am (UTC)
From: [identity profile] catpad.livejournal.com
Что ж ты меня сразу не спросил ? Всё было бы гораздо легче. Попробую вкратце изложить:

— Какой IDE использовать?
Я недавно начал использовать PyCharm (https://www.jetbrains.com/pycharm), и вообще-то мне нравится. Дебаггер отличный, то что тебе надо.

— Как вообще строятся проекты?
Тут, конечно, дело вкуса и твоего дизайна. Группируй классы в один модуль по смыслу, потом импортируй. Чтобы не писать mypackage.MyClass, импортируй так:
from mypackage import MyClass1, MyClass2, MyClass 3
Тогда не нужно будет добавлять имя package.

— Как организовывать константы?
Я так понимаю, что в Питоне для этого просто используются статические члены класса. Что-то вроде:
class Screen:
SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 800
Или используй декораторы, как описано вот здесь: http://stackoverflow.com/a/2688086
Вообще декораторы полезная штука, так что хорошо их знать.

— Есть ли какие-то «векторные» операторы?
Для всех векторных и массивных дел существует незаменимая вещь numpy (http://www.numpy.org)
Сам я о ней ничего не знаю, но из рассказов понимаю, что больше тебе в жизни не понадобится ничего.

Чтобы найти, какому интервалу принадлежит твой Х, я тут соорудил небольшую программку:

intervals = [0.1, 0.3, 0.7, 0.75, 0.8, 0.81, 0.83, 0.9, 1.0]
x = 0.76
print([(x > i and x <= j) for i, j in zip(intervals, intervals[1:])].index(True))

# ответ 3 - номер интервала, индекс начинается с 0.

В общем, практически Matlab.

Date: 2017-04-14 08:36 am (UTC)
From: [identity profile] green-fr.livejournal.com
"Сразу" - это ещё в Йокогаме? Рот сушами занят был, наверное :-)

Пошёл долбить твой пример - работать он работает, теперь будут пытаться понять, почему и как. Спасибо!

off: заказали уже Through the Ages, тем временем достали с мальчиком Civilization 1988 года, пока только смотрим правила да раскладываем фишки.

(no subject)

From: [identity profile] catpad.livejournal.com - Date: 2017-04-14 11:04 pm (UTC) - Expand

Date: 2017-04-18 01:46 pm (UTC)
From: [identity profile] alexei dolganov (from livejournal.com)
Сам пока не пользовался, но рассказали про совсем неочевидное: есть такие языки оленьи люди, которые Python пишут в Microsoft Visual Studio Code https://code.visualstudio.com/ (внимание, этот продукт никак не привязан к Visual Studio, логично, правда?)

VSCode - это универсальный open source редактор/IDE, и для него есть расширения Python: https://code.visualstudio.com/docs/languages/python

Date: 2017-04-18 01:51 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Да уж, прикольно :-) Но я уже поставил себе pyCharm, а с тех пор мне ещё и рассказали о (теоретической пока что для меня) возможности открывать консоль в момент дебага. Я не хочу на совсем уж экзотику уходить, меня именно mainstream интересует. Как минимум, чтобы было потом, у кого спрашивать :-)

(no subject)

From: [identity profile] alexei dolganov - Date: 2017-04-18 01:59 pm (UTC) - Expand

Date: 2017-06-15 05:37 am (UTC)
From: [identity profile] http://users.livejournal.com/_not_me/
Привет,
наткнулся на вот такой проект: https://www.codingame.com/. Подумал, что вдруг тебе будет интересно.
Типа kaggle, только для игр, там разные языки есть.

Date: 2017-06-15 11:51 am (UTC)
From: [identity profile] green-fr.livejournal.com
Спасибо! Выглядит очень интересно, буду баловаться. Про kaggle я тоже ничего не слышал :-)

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-06-15 08:54 pm (UTC) - Expand

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-06-16 07:34 am (UTC) - Expand

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-06-18 08:19 pm (UTC) - Expand

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-06-15 12:57 pm (UTC) - Expand

Date: 2017-12-09 09:02 pm (UTC)
From: [identity profile] quantum-code.livejournal.com
1. Spyder очень неплох по личному опыту (он в коробке с Анакондой идет, там много чего полезного собрано), он мне понравился более всего из десятка тестируемых IDE.
2. Eric - специально под Python заточенный (это основное назначение, там может и добавили еще направлений, сейчас не знаю), но мне показался перегруженным, хотя сторонников у него много, а мне может и терпения не хватило его разобрать.
3. Pycharm - ну это рекомендуют чуть ли не под 100% пользователей, он классный, сам юзал, но что-то с разрядностью на ноуте было у меня, какой-то конфликт, я его снес и не возвращался более (тогда как раз Spyder c Анакондой поставил ну и остановился)
3. Eclipse + плагин PyDev. Выглядит мощно, там не только Питон можно держать, но опять же разрядность глючила, и не разобрался как следует.
4. говорят , еще рулит Microsoft Visual Studio. Сам не пробовал, но отзывов встречал часто положительных. Опять же, там не только Питон возможен. Сейчас есть и бесплатная версия.
5. IDLE. Ну как же без него , родной IDLE ! Начинал с него: задачки , небольшие скрипты, классы потестить, ну и просто что-то новенькое ввести. Хоть и говорят многие, что отстой (типа Гвидо Ван Россум написал его, когда на обеде ручку раписывал ) , но я б так не сказал. До сих пор использую его и Spyder.
6. Sublime text, Notepad. Но в них надо ставить дополнительные плагины для работы питона вручную. И результаты в консоли будут. Как по мне , так не очень. Консоли предыдущих больше по душе пришлись. :)

Ну а там смотрите еще сами, их много, может , что и другое больше приглянется, удачи в поиске :) !

Date: 2017-12-10 07:14 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Ага, спасибо! Ты, как я вижу, серьёзно за python взялся :-)

(no subject)

From: [identity profile] green-fr.livejournal.com - Date: 2017-12-10 07:15 pm (UTC) - Expand

(no subject)

From: [identity profile] quantum-code.livejournal.com - Date: 2017-12-11 07:34 am (UTC) - Expand

Profile

green_fr: (Default)
green_fr

June 2025

S M T W T F S
123 4 567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 5th, 2025 05:53 pm
Powered by Dreamwidth Studios
OSZAR »