Skip to content

Elena Volkova#12

Open
VolkovaElena wants to merge 26 commits intoPythonAndGoCommunity:masterfrom
VolkovaElena:develop
Open

Elena Volkova#12
VolkovaElena wants to merge 26 commits intoPythonAndGoCommunity:masterfrom
VolkovaElena:develop

Conversation

@VolkovaElena
Copy link
Copy Markdown

No description provided.

@VolkovaElena VolkovaElena changed the title Develop Elena Volkova Dec 7, 2018
@AlexeiBuzuma
Copy link
Copy Markdown

В требованиях было отмечено следующее:

Utility should be wrapped into distribution package with setuptools

Не смотря на то, что минимальное изменение проверяющего скрипта и конфигурационного файла для CI делает возможным проверку работы без setup.py файла, в задании есть требование, что нужно реализовать возможность создания пакета с помощью setuptools

Есть много статей, в которых подробно описан процесс создания setup.py файла.
Например:
https://packaging.python.org/tutorials/packaging-projects/
https://the-hitchhikers-guide-to-packaging.readthedocs.io/en/latest/quickstart.html

Можно найти хорошее описание самих атрибутов в функции setup:
https://github.com/pypa/sampleproject/blob/master/setup.py

MATH_ACTIONS = ("+", "-", "*", "/", "%", "^",)
COMPARISON_OPERATIONS = (">", "<", "=", "!",)

def __init__(self, expression, func=None):
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

# Look for commas in expression
start_index = 0
multivalue_items = []
for i, c in enumerate(expression):
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я думаю, лучше избегать названий переменных из одного символа.
вместо i лучше использовать index, вместо v лучше использовать value и т.д. и т.п.
Много места это не отнимет, но код будет читаться почти как английский язык и другим людям будет проще понять идеи, которые реализовывал автор.

String representation of the class
:return: string representation of the class
"""
result = []
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Может быть заменено на генератор списка. Красивие выглядит, быстрее работает.

result = [str(item) for item in self._expression]

return boolean_value
return boolean_value

# Calculate mathematical expression
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

return value

# Calculate value expression
def value(self):
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

if last_operation:
if last_operation in ("+", "-",):
if v in ("+", "-"):
if last_operation == v:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

last_operation = "+" if last_operation == v else "-"

try:
expression = Element(expression=args.EXPRESSION)
print(expression.value())
except BaseExpressionException as exc:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Что если в приложении произойдет какая-то ошибка, которую мы не ожидаем (все люди ошибаются, код не может быть идеальным)? например где-то произойдет неожиданный для нас ValueError.
В таком случае исключение будет не обработано и стек вызовов будет распечатан пользователю в консоль.
Я думаю, что такую информацию пользователь не должен видеть.
Возможно в данном случае будет лучше отлаливать Exception, хотя мое мнение может быть оспорено.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants