Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Передача по ссылке?


Автор: YahоО 22.7.2023, 17:00
Сам написал такую функцию:
Код

def t(a):   
    c={} 
    a['aaaaaa'] = 10000      
    for k, v in sorted(a.items(), key=lambda v:v[1]):c[k]=v
    a=c
    return c
    
a = {'apple': 5600, 'orange': 3500, 'banana': 5000}
d=t(a)
print(a)  # ???
print(d)

и мне в ней не понятно как получить ожидаемый и однозначный из нее ответ.
По идее  строки "return c" в ней не должно быть, а ответ предполагается все же получить, т.к. в функцию передается dict, и в общем то такой ответ есть, но он не сортирован как задумано.
И только с помощью "лишней" строки "return c" можно получить то что требуется, т.е. обновленный и сортированный словарь.
Получается что в функции имеется какая то ошибка, а вот в чем причина и как ее исправить?


Автор: Oldshelf 23.7.2023, 07:12
Похоже,  присвоение a=c внутри функции работает для локальной переменной. Хотя, a - глобальная. Видимо, какая-то ошибка интерпретатора.

Сработал https://www.online-python.com/nAcHqEsNKJ с явным указанием, что a - глобальная переменная:
Код

def t():
 global a
 c={} 
 a['aaaaaa'] = 10000 
 for k, v in sorted(a.items(), key=lambda v:v[1]):c[k]=v
 a=c
 return c
 
a = {'apple': 5600, 'orange': 3500, 'banana': 5000}
d=t()
print(a) # ???
print(d)

Автор: YahоО 23.7.2023, 11:31
Да, Ваш код работает, спасибо, понял свою ошибку, и переделал:
Код

def t(a): 
    a['aaaaaa'] = 1      
    for k, v in sorted(a.items(), key=lambda v:v[1]):a[k+'_']=v    
    g=set(a.keys())
    for key in g:
        if not '_' in key:
            a.pop(key)
    a.pop('aaaaaa_')
    g=a.keys()
    for key in g:        
        a[key.replace('_','')  ] = a[key]
        a.pop(key)
a = {'apple': 5600, 'orange': 3500, 'banana': 5000}
t(a)
print(a)

хотя и максимально некрасиво, но работает как требовалось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)