Skip to content

Conversation

@VolkovaElena
Copy link

No description provided.

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

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

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):

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):

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 = []

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

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):

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:

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:

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