Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 11, 2015 18:54:19

kampella
Зарегистрирован: 2014-11-21
Сообщения: 95
Репутация: +  1  -
Профиль   Отправить e-mail  

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

Почему в Python есть возможность изменять объекты в функциях на глобальном уровне?

def one():
    l = [1]
    print 'one', l
    def two(l):
        l[0] += 1 
        print 'two', l 
    two(l)
    print 'one+1', l 
one()

Отредактировано kampella (Авг. 11, 2015 18:55:42)

Офлайн

#2 Авг. 11, 2015 19:02:47

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

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

doc
смотреть в сторону immutable и mutable



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Авг. 11, 2015 19:03:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

А почему её не должно быть?



Офлайн

#4 Авг. 11, 2015 19:34:52

kampella
Зарегистрирован: 2014-11-21
Сообщения: 95
Репутация: +  1  -
Профиль   Отправить e-mail  

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

FishHook
А почему её не должно быть?

Ну а какже границы области видимости и все такое?

Офлайн

#5 Авг. 11, 2015 22:18:13

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

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

kampella
Ну а какже границы области видимости и все такое?
А как должно работать это
def a():
     pass
 
def b():
     a()
 
b()
?

Офлайн

#6 Авг. 12, 2015 01:14:57

kampella
Зарегистрирован: 2014-11-21
Сообщения: 95
Репутация: +  1  -
Профиль   Отправить e-mail  

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

Shaman
Только присваивание определяет локальную переменную, так?

Офлайн

#7 Авг. 12, 2015 03:41:59

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

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

Походу, какая-то проблема с пониманием аргументов функции.

>>> def one():
...     l = [1]
...     print 'one', l
...     def two(l):
...         l.append(2)
...         print 'two', l 
...     two([0])
...     print 'one+1', l 
... 
>>> one()
one [1]
two [0, 2]
one+1 [1]
>>>

А именно, человек не знает разницы между формальными аргументами функции и фактическими аргументами функции.



Офлайн

#8 Авг. 12, 2015 14:19:10

kampella
Зарегистрирован: 2014-11-21
Сообщения: 95
Репутация: +  1  -
Профиль   Отправить e-mail  

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

py.user.next
Походу, какая-то проблема с пониманием аргументов функции.

Вы не поняли вопроса.

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

Офлайн

#9 Авг. 12, 2015 14:51:55

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

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

kampella
Вы не поняли вопроса.
Ну, как спросил. Сам же передаёшь список в функцию, а потом спрашиваешь, почему она его меняет.



Офлайн

#10 Авг. 12, 2015 16:26:52

kampella
Зарегистрирован: 2014-11-21
Сообщения: 95
Репутация: +  1  -
Профиль   Отправить e-mail  

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

py.user.next
def two(l): l += 1 print ‘two’, l

Можно и не передавать, список всеравно именится.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version