Skip to content
This repository has been archived by the owner on Oct 16, 2019. It is now read-only.

Update tests.py #3

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open

Conversation

uai-ekb
Copy link

@uai-ekb uai-ekb commented Jun 15, 2018

Отказался от однострочника и добавил исключение на то, что если аргумент не может быть разделен на 2 (например, из-за типа аргумента)

uai-ekb added 2 commits June 15, 2018 17:06
Отказался от однострочника и добавил исключение на то, что если аргумент не может быть разделен на 2 (например, из-за типа аргумента)
вроде все.
@uai-ekb
Copy link
Author

uai-ekb commented Jun 17, 2018

не понял как запустить повторный тест

забыл импорт math
Copy link
Contributor

@wronglink wronglink left a comment

Choose a reason for hiding this comment

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

Во втором задании, increment_decorator баг. Если бы в тесте была другая функция, он бы сразу сломался.

def even_filter(*args):
my_list = []
for arg in args:
try:
Copy link
Contributor

Choose a reason for hiding this comment

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

Немного странная проверка на тип. На самом деле, в условии не оговорено, но подразумевается, что мы в списке аргументов передаем int-овые числа. Если же оставлять проверку, что чище будет:

if not isinstance(arg, int):
    continue

Copy link
Author

Choose a reason for hiding this comment

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

ок. Спасибо. я тут сам себе задачку расширил, т.к. захотелось опробовать именно оформление исключения.
вставил твой вариант проверки..
изначально сделал все однострочником, но потом переделал, т.к. мне показалось, что однострочник сложнее читать... есть какие-то соглашения по поводу однострочников?

Copy link
Contributor

Choose a reason for hiding this comment

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

есть какие-то соглашения по поводу однострочников?

Каких-то жестких ограничений я не знаю, но есть понимание, что код с однострочником должен быть читаемей:

items = []
for d in data:
    if is_item(d):
        items.append(d)

vs

items = [d for d in data if is_item(d)]

А вот тут выигрыш уже на грани читаемости:

items = []
for d in data:
    if is_item(d):
        for key in keys:
              items.append(d, key)

vs

items = [d, key for key in keys for d in data if is_item(d)]

continue
if arg % 2 == 0:
my_list.append(arg)
else:
Copy link
Contributor

Choose a reason for hiding this comment

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

else в данном случае не нужен (и опционален), достаточно просто блока с if

Copy link
Author

Choose a reason for hiding this comment

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

почему-то не запускалось без него... но, видимо, не из-за этого...) убрал.

def wrapper(value):
value +=1
func(value)
return value
Copy link
Contributor

Choose a reason for hiding this comment

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

Мы же возвращаем value в данном случае, а нужно вернуть значение, которое возвращает вызываемая функция (func)

Copy link
Author

Choose a reason for hiding this comment

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

согласен, поправил

@@ -16,7 +30,11 @@ def test_increment_decorator():
декрорируемую функцию.
"""
def increment_derocator(func):
pass
def wrapper(value):
value +=1
Copy link
Contributor

Choose a reason for hiding this comment

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

По python-стайлгайдам, пробел ставится перед и после оператора. Т.е.

value += 1

Copy link
Author

Choose a reason for hiding this comment

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

учтем, главное - это порядок и соблюдение договоренностей..

@@ -41,12 +59,16 @@ def __init__(self, x, y):

class Segment():
def __init__(self, p1, p2):
pass

self.x1 = p1.x
Copy link
Contributor

Choose a reason for hiding this comment

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

Можно так, а можно было и просто self.p1, self.p2 сохранить. В случае, если у нас поменяется класс Point (например, добавится третья координата Point.z) - наш код будет проще поправить под этот кейс. Или, например, мы поймем, что в классе Point есть еще какая-то вспомогательная информация, которая нам полезна и в классе Segment. Вообще хороший тон - сохранять все исходные данные в __init__, которые туда были переданы, а не выбирать только нужное в данный момент.

Copy link
Author

Choose a reason for hiding this comment

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

Ок. поправил, и снова ценная информация.

@wronglink
Copy link
Contributor

В остальном - отлично!

@uai-ekb
Copy link
Author

uai-ekb commented Jun 17, 2018

отработал по комментариям.. собрал заново.

Copy link
Contributor

@wronglink wronglink left a comment

Choose a reason for hiding this comment

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

Крутняк!

def even_filter(*args):
my_list = []
for arg in args:
if not isinstance(arg, int):
Copy link
Contributor

Choose a reason for hiding this comment

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

Вкусовщина, но я бы объединил в 1 строку:

if isinstance(arg, int) and arg % 2 == 0:
    my_list.append(arg)

Copy link
Author

Choose a reason for hiding this comment

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

точно! так эффективнее... спс

def length(self):
return 0

return math.sqrt(pow(self.p1.x - self.p2.x , 2) + pow(self.p1.y - self.p2.y , 2))
Copy link
Contributor

Choose a reason for hiding this comment

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

Здесь перед запятой лишний (по гайдам) пробел. И JFYI в питоне есть и функция возведения в степень, и оператор - **, можно пользоваться и тем, и тем, но оператор, кажется, чаще используют:

a ** 2 == pow(a, 2)

Copy link
Author

Choose a reason for hiding this comment

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

пробел убрал. за оператор ** спасибо, буду использовать в будущем.

Учел замечания и предложения.
@uai-ekb
Copy link
Author

uai-ekb commented Jun 20, 2018

Учел замечания и предложения.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants