Форум сайта python.su
221
kampellaи это ровно 2 разных случая почему так происходит. В одном работает правило областей видимости функций, а именно то как происходит поиск переменной. В другом понятие изменяемых и не изменяемых типов данных, которые конкретно в этом случае передаются через аргумент функции. В терминах С это что то вроде передача массива по ссылке и по значению.
Можно и не передавать, список всеравно именится.
Офлайн
857
kampellaВот твой первый код, убрал передачу в вызове:
Можно и не передавать, список всеравно именится.
>>> def one(): ... l = [1] ... print 'one', l ... def two(l): ... l[0] += 1 ... print 'two', l ... two() ... print 'one+1', l ... >>> one() one [1] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 7, in one TypeError: two() takes exactly 1 argument (0 given) >>>
>>> def one(): ... l = [1] ... print 'one', l ... def two(): ... l[0] += 1 ... print 'two', l ... two() ... print 'one+1', l ... >>> one() one [1] two [2] one+1 [2] >>>
Отредактировано py.user.next (Авг. 13, 2015 01:07:35)
Офлайн