Найти - Пользователи
Полная версия: Область видимости объектов в фукциях
Начало » Python для новичков » Область видимости объектов в фукциях
1 2
JOHN_16
kampella
Можно и не передавать, список всеравно именится.
и это ровно 2 разных случая почему так происходит. В одном работает правило областей видимости функций, а именно то как происходит поиск переменной. В другом понятие изменяемых и не изменяемых типов данных, которые конкретно в этом случае передаются через аргумент функции. В терминах С это что то вроде передача массива по ссылке и по значению.
py.user.next
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]
>>>
И что тут неправильного? Обращение происходит к l, l в функции нет - она начинает искать её в окрестностях и находит на уровне выше.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB