Най-добрият начин да промените стойността на глобалната стойност във функция в Python?

Работя много с много глобални променливи в Python, чиято стойност постоянно трябва да се променя, когато кодът ми напредва. Много добро решение за мен би било да взема глобална променлива като аргумент вътре във функция, но доколкото ми е известно, е възможно да промените глобална променлива вътре във функция само чрез действително именуване на тази конкретна променлива по време на функцията определение. Тъй като работя с много различни имена на променливи, това ще ме принуди да правя много функции за име на променлива.

Това, което искам, е нещо подобно:

x = 5

def foo(_):
    global _
    
    _ = 10
    
    return _
    
foo(x)

print(x)

където x сега ще бъде 10 вместо действителната продукция, която е 5. Кой е най-ефективният начин да постигна това, което искам?


person Neoking    schedule 11.01.2021    source източник
comment
Не можете да предавате или връщате променливи в Python. Можете да предавате или връщате само обекти. (Освен това наистина не трябва да имате толкова много глобални променливи.)   -  person user2357112 supports Monica    schedule 11.01.2021
comment
Можете ли да споделите проблема, който се опитвате да разрешите? Не мисля, че това е най-добрият метод за решаване на какъвто и код да се опитвате да коригирате. Бих създал клас, имах текущите глобални променливи като свойства на този клас и foo би бил метод. Друг вариант би просто да приписва нова стойност на x, вместо да я променя на място.   -  person Mikael    schedule 11.01.2021
comment
Задължителна връзка към Ned Batchelder   -  person quamrana    schedule 11.01.2021
comment
Работя много с много глобални променливи в Python, чиято стойност постоянно трябва да се променя, когато кодът ми напредва. Това обикновено се счита за лош дизайн.   -  person juanpa.arrivillaga    schedule 11.01.2021
comment
@Mikael Да. Създавам игра Blackjack като част от курс на Udemy по Python. Имам само няколко месеца опит с Python.. За да направя това в перспектива, в момента току-що започнах да използвам Classes. Проблемът, който исках да разреша, не беше конкретен, а по-скоро общ: искам да използвам функции по гъвкав начин, за да променя променливите си от моите класове, както и глобалните променливи и да ги комбинирам, например за условия, сравняване и т.н. Ще публикувайте моя код на играта Blackjack в страницата за преглед на кода веднага щом е готов, тъй като смятам, че е твърде много за публикуване тук. Благодаря!   -  person Neoking    schedule 12.01.2021
comment
@quamrana Благодаря, това изглежда като наистина полезна връзка за мен.   -  person Neoking    schedule 12.01.2021
comment
@juanpa.arrivillaga Благодаря ви много за тази информация. Аз съм съвсем нов в Python, така че е много добре да съм наясно с това. Мисля, че използването на твърде много глобални променливи всъщност може да е една от причините да задам този въпрос на първо място :)   -  person Neoking    schedule 12.01.2021


Отговори (2)


Тъй като си правите труда да наименувате x, когато извиквате foo(x), не е много трудно да направите x = foo(x):

x = 5

def foo(_):
    _ = 10
    return _
    
x = foo(x)

print(x)
person quamrana    schedule 11.01.2021
comment
Заданието е ненужно. def foo(_): return 10 ще има същия ефект. - person chepner; 11.01.2021
comment
@anurag какво значение би имал ламбда израз тук? - person juanpa.arrivillaga; 11.01.2021
comment
@juanpa.arrivillaga благодаря! Това изглежда като най-лесното решение за това, което искам да постигна. - person Neoking; 12.01.2021

Може да не съм разбрал напълно нуждата ви да направите това, но можете също да управлявате глобалните елементи, както следва:

x = globals()
x['cartoon'] = 'mickey'
print(x['cartoon'])
person anurag    schedule 11.01.2021