Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 12, 2015 23:36:51

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Область видимости объектов в фукциях

kampella
Можно и не передавать, список всеравно именится.
и это ровно 2 разных случая почему так происходит. В одном работает правило областей видимости функций, а именно то как происходит поиск переменной. В другом понятие изменяемых и не изменяемых типов данных, которые конкретно в этом случае передаются через аргумент функции. В терминах С это что то вроде передача массива по ссылке и по значению.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#2 Авг. 13, 2015 01:05:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Область видимости объектов в фукциях

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 в функции нет - она начинает искать её в окрестностях и находит на уровне выше.



Отредактировано py.user.next (Авг. 13, 2015 01:07:35)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version