воскресенье, 9 июля 2017 г.

Сравнить величину с двумя значениями

В python обычную операцию сравнения значения с двумя числами можно сделать красивее.


Задача
Есть переменная a. Напишите метод, который возвращает True, если значение a больше 0 и меньше 100. Иначе метод должен возвращать False.

Решение 1:
def is_in_interval(a):
    return (0 < a) and (a < 100)

В python это сравнение можно сделать элегантнее:

Решение 2:
def is_in_interval(a):
    return 0 < a < 100

TypeError __init__() takes 1 positional argument but 2 were given


В приложении на Django можно столкнуться с ошибкой при попытке просмотреть страницу:
TypeError at /1/results/ __init__() takes 1 positional argument but 2 were given

Причины могут быть разными, но если вы используете generic представления - ListView, DetailView, то проверьте, не забыли ли вы в urls.py добавить .as_view() к названию представления.

Файл представления polls/views.py:
# ...

class ResultsView(generic.DetailView):
    model = Question
    template_name = 'polls/results.html'


Файл polls/urls.py:
from django.conf.urls import url

from . import views

app_name = 'polls'

urlpatterns = [
    # /polls/123/results
    url(r'^(?P[0-9]+)/results/$', views.ResultsView.as_view(), name='results'),
    # ...
]

Если в этом файле вместо views.ResultsView.as_view() написать просто views.ResultsView, то возникнет ошибка: __init__() takes 1 positional argument but 2 were given