мы можем создать переменную, которая может быть изменена из любых функций в python? - PullRequest
0 голосов
/ 13 марта 2020

Здравствуйте, я хочу знать, есть ли способ объявить переменную, которая может быть изменена из любой функции, без необходимости использовать ключевое слово global, потому что у меня есть много функций, модифицирующих определенную переменную, и половину времени я забыл поставить global myvar при создании новой функции, изменяющей myvar.

Ответы [ 3 ]

1 голос
/ 13 марта 2020

Вы можете использовать классы . При создании нового объекта вы можете инициализировать переменные и использовать их в любом методе этого объекта.

Эти переменные имеют префикс self..

1 голос
/ 13 марта 2020

да, это поведение по умолчанию python. Но есть некоторые нюансы, о которых вы должны знать:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

global_var1 = {}
global_var2 = 10
global_var3 = []


def manipulate_globals1():
    # this is the behavior you want
    global_var1['new_entry'] = 10
    global_var3.append(10)

    # this would fail
    # global_var2 += 10

    # but this works
    global global_var2
    global_var2 += 10


def manipulate_globals2():
    # here we create scoped variables with the same name as the globals
    global_var1 = []
    global_var2 = 5


if __name__ == '__main__':
    print(global_var1, global_var2, global_var3)
    manipulate_globals1()
    print(global_var1, global_var2, global_var3)
    manipulate_globals2()
    print(global_var1, global_var2, global_var3)

Если вы хотите манипулировать неконтейнерными переменными внутри функции, вы можете сделать это следующим образом:

создать файл globals.py с содержанием:

a = 10
b = 20

в вашем основном / основном файле:

import globals

def manipulate_globals():
    globals.a = 20 
    globals.b = 30

if __name__ == '__main__':
    manipulate_globals()
    print(globals.a, globals.b)

Хотя это плохая практика, и вы не должны использовать глобальные инфляции

0 голосов
/ 13 марта 2020

Да, можно объявить глобальную переменную без ключевого слова global. Область действия переменной определяется тем, где она объявлена ​​в коде. Чтобы объявить новую глобальную переменную, просто объявите ее вне области действия всех других функций. Для получения дополнительной информации о области видимости и глобальных и локальных переменных в python, посмотрите https://www.geeksforgeeks.org/global-local-variables-python/

...