Как насчет этого?
if ((d1 - (int)d1) == 0)
// integer
Наиболее вероятным ответом будет то, что это просто сохраняет грамматику простой, не было камнем преткновения для принятия, и многие были довольны тем, что не нужно устранять неоднозначность области, к которой принадлежит имя, при присвоении ему в конструкции цикла. . Переменные не объявляются внутри области видимости, это подразумевается расположением операторов присваивания. Ключевое слово global
существует именно по этой причине (чтобы обозначить, что присваивание выполняется в глобальной области видимости).
Обновление
Вот хорошее обсуждение темы: http://mail.python.org/pipermail/python-ideas/2008-October/002109.html
Предыдущие предложения сделать для- петля переменные, локальные для цикла, имеют наткнулся на проблему существующих код, который зависит от переменной цикла сохраняя свое значение после выхода из петля, и кажется, что это рассматривается как желательная черта.
Короче говоря, вы, вероятно, можете обвинить в этом сообщество Python: P
Действительно полезным случаем для этого является использование enumerate
и вы хотите получить общее количество в конце:
for count, x in enumerate(someiterator, start=1):
dosomething(count, x)
print "I did something {0} times".format(count)
Это необходимо? Нет. Но это, безусловно, удобно.
Еще одна вещь, о которой следует помнить: в Python 2 также происходит утечка переменных в списках:
>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> x
9
Но то же самое не относится к Python 3.