Python 全局变量不变

Python global variable doesnt change

示例代码:

podbor_dict = {}
def change(lst, sz):
    lst_r = [lst[i:i+sz] for i in range(0, len(lst), sz)]
    return lst_r
def qq():
    global podbor_dict
    if podbor_dict.get(
            'podbor_'):
        podbor = podbor_dict[
            'podbor_']
        podbor.clear()
    else:
        podbor_dict.update(
            {'podbor_': []})
        podbor = podbor_dict[
            'podbor_']
    podbor = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', ]
    podbor = change(podbor, 10)
    print(podbor)


def zz():
    global podbor_dict
    podbor = podbor_dict[
        'podbor_']
    print(podbor)
    print(podbor_dict)


qq()
zz()

函数'change'将每十个元素添加到一个新数组中。

预期输出:

[['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b'], ['c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']]
[['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b'], ['c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']]
{'podbor_': [['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b'], ['c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']]}

实际输出:

[['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b'], ['c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']]
[]
{'podbor_': []}

多次更改功能 'change' 但无济于事。 非常期待您的回答。

这是因为除了以空列表作为值的 'podbor_' 之外,您实际上并未向其中添加任何内容。将 else 块更改为

else:
    podbor = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']
    podbor = change(podbor, 10)
    podbor_dict.update({'podbor_': podbor})
    podbor = podbor_dict['podbor_']

# Output: [['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b'], ['c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']]
#         [['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b'], ['c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']]
#         {'podbor_': [['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b'], ['c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']]}

嘿,我找到了解决方案

podbor_dict = {}
def change(lst, sz):
    lst_r = [lst[i:i+sz] for i in range(0, len(lst), sz)]
    return lst_r
def qq():
    global podbor_dict
    global podbor
    if podbor_dict.get(
            'podbor_'):
        podbor = podbor_dict[
            'podbor_']
        podbor.clear()
    else:
        podbor_dict.update(
            {'podbor_': []})
        podbor = podbor_dict[
            'podbor_']
    podbor = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', ]
    podbor = change(podbor, 10)
    print("fda" , podbor)


def zz():
    global podbor_dict 
    global podbor
    podbor_dict = {'podbor_': podbor}
    print(podbor)
    print(podbor_dict)


qq()
zz()

我将变量 podbor 设置为全局变量,使用字典构建时出现错误

podbor_dict = {}
def change(lst, sz):
    lst_r = [lst[i:i+sz] for i in range(0, len(lst), sz)]
    return lst_r
def qq():
    global podbor_dict
    if podbor_dict.get(
            'podbor_'):
        podbor_dict['podbor_'].clear()
        # i also removed local variable declarations as they will be dropped at the end of the block anyway
    else:
        podbor_dict.update(
            {'podbor_': []})
    # we can say that if you assing value of dictionary to a variable, it will keep a reference to the list
    # fi we then assign to this variable, we do not change a value in dictionary, but only the reference
    # it is holding, thus dirrect assignment is needed   
    podbor = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', ]
    podbor_dict["podbor_"] = change(podbor, 10)
    print(podbor_dict["podbor_"])


def zz():
    global podbor_dict
    podbor = podbor_dict[
        'podbor_']
    print(podbor)
    print(podbor_dict)

qq()
zz()