Как работает разрешение области видимости python с ipywidgets? - PullRequest
0 голосов
/ 28 января 2020

Например, чем отличаются следующие фрагменты кода с точки зрения распределения памяти и создания ссылок -

Между вариантами 1 и 2, как во втором случае имеется переменная менеджера контекста во вложении Область действия позволяет вложенной функции «модифицировать» переменную c?

В случае 3 глобальные и локальные переменные объединяются с VBox. В случае 4, хотя локальная переменная g является локальной для области действия функции, ее можно изменить с помощью свойства children. Как дела 3 и 4 работают с точки зрения создания памяти / объекта?

import ipywidgets as w
from IPython.display import display
#Case 1:
def f1():
    global c
    c = 6
    def f2():
        c = 7
    f2()
    print(c)
f1()

#Case 2:
def f1():
    global c
    c = w.Output()
    with c:
        print(3)
    def f2():
        with c:
            print(2)
    f2()
f1()

#Case 3:
def f1():
    global t
    t = w.Dropdown(options = \
                    ["a","b"]
    g = w.label(description = "Some label")
    box = w.HBox([t, g])
    display(box)

f1()
t.value = "b"

#Case 4:
def f1():
    global t
    t = w.Dropdown(options = \
                    ["a","b"]
    g = w.label(description = "Some label")
    global box
    box = w.HBox([t, g])
    display(box)

f1()
(box.children[1]).description = \
                "changed label"
...