-
Notifications
You must be signed in to change notification settings - Fork 10
Update tests.py #3
base: master
Are you sure you want to change the base?
Conversation
Отказался от однострочника и добавил исключение на то, что если аргумент не может быть разделен на 2 (например, из-за типа аргумента)
вроде все.
не понял как запустить повторный тест |
забыл импорт math
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Во втором задании, increment_decorator
баг. Если бы в тесте была другая функция, он бы сразу сломался.
homework/tests.py
Outdated
def even_filter(*args): | ||
my_list = [] | ||
for arg in args: | ||
try: |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ок. Спасибо. я тут сам себе задачку расширил, т.к. захотелось опробовать именно оформление исключения.
вставил твой вариант проверки..
изначально сделал все однострочником, но потом переделал, т.к. мне показалось, что однострочник сложнее читать... есть какие-то соглашения по поводу однострочников?
There was a problem hiding this comment.
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)]
homework/tests.py
Outdated
continue | ||
if arg % 2 == 0: | ||
my_list.append(arg) | ||
else: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
else
в данном случае не нужен (и опционален), достаточно просто блока с if
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
почему-то не запускалось без него... но, видимо, не из-за этого...) убрал.
homework/tests.py
Outdated
def wrapper(value): | ||
value +=1 | ||
func(value) | ||
return value |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мы же возвращаем value
в данном случае, а нужно вернуть значение, которое возвращает вызываемая функция (func
)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
согласен, поправил
homework/tests.py
Outdated
@@ -16,7 +30,11 @@ def test_increment_decorator(): | |||
декрорируемую функцию. | |||
""" | |||
def increment_derocator(func): | |||
pass | |||
def wrapper(value): | |||
value +=1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
По python-стайлгайдам, пробел ставится перед и после оператора. Т.е.
value += 1
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
учтем, главное - это порядок и соблюдение договоренностей..
homework/tests.py
Outdated
@@ -41,12 +59,16 @@ def __init__(self, x, y): | |||
|
|||
class Segment(): | |||
def __init__(self, p1, p2): | |||
pass | |||
|
|||
self.x1 = p1.x |
There was a problem hiding this comment.
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__
, которые туда были переданы, а не выбирать только нужное в данный момент.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ок. поправил, и снова ценная информация.
В остальном - отлично! |
отработал по комментариям.. собрал заново. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Крутняк!
homework/tests.py
Outdated
def even_filter(*args): | ||
my_list = [] | ||
for arg in args: | ||
if not isinstance(arg, int): |
There was a problem hiding this comment.
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)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
точно! так эффективнее... спс
homework/tests.py
Outdated
def length(self): | ||
return 0 | ||
|
||
return math.sqrt(pow(self.p1.x - self.p2.x , 2) + pow(self.p1.y - self.p2.y , 2)) |
There was a problem hiding this comment.
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)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
пробел убрал. за оператор ** спасибо, буду использовать в будущем.
Учел замечания и предложения.
Учел замечания и предложения. |
Отказался от однострочника и добавил исключение на то, что если аргумент не может быть разделен на 2 (например, из-за типа аргумента)