Size: a a a

2020 January 30

IZ

Ilia Zviagin in SPb Python
Max Block
Нет. Он же так не умееет.

var1 = “bla”
var2 = 42

Я хочу вместо того, чтобы писать dict(“var1”: var1, “var2”: var2) использовать что-то типа magic_dict(var1, var2)
, который сделаем мне ключи как имена переменных
А нужны будут если локально переменные - возми из словаря нужное и набинди...
источник

MB

Max Block in SPb Python
Ilia Zviagin
А зачем тебе тут переменные, если можно просто значения из словаря по имени таскать?
Мне это надо для такого кода. Очень часто у меня встречается что-то типа

node = “…”
proxy = “….”
block_number = “…”
result = ...

log({“node”: node, “proxy”: proxy, “block_number”: block_number”, “result”: result})

А в JavaScript это выглядело бы так:
log({node, proxy, block_number, result})
источник

DM

Dmitriy Morozov in SPb Python
locals()?
источник

MB

Max Block in SPb Python
Т.е. если у меня имя ключа как имя переменной, я не хочу его два раза писать. Я пытался сам с использованием inspect написать, но как оказалось все там не так просто.
источник

YV

Yuliya Volkova in SPb Python
Max Block
Нет. Он же так не умееет.

var1 = “bla”
var2 = 42

Я хочу вместо того, чтобы писать dict(“var1”: var1, “var2”: var2) использовать что-то типа magic_dict(var1, var2)
, который сделаем мне ключи как имена переменных
Dict не так работает
источник

IZ

Ilia Zviagin in SPb Python
Max Block
Мне это надо для такого кода. Очень часто у меня встречается что-то типа

node = “…”
proxy = “….”
block_number = “…”
result = ...

log({“node”: node, “proxy”: proxy, “block_number”: block_number”, “result”: result})

А в JavaScript это выглядело бы так:
log({node, proxy, block_number, result})
Тут тоже не нужны особенно имена переменных, нужно будет - посчитаешь и по номеру найдешь
источник

DM

Dmitriy Morozov in SPb Python
там, конечно, много лишнего будет, но всё же выводит примерно требуемое в виде словаря
источник

YV

Yuliya Volkova in SPb Python
Max Block
Т.е. если у меня имя ключа как имя переменной, я не хочу его два раза писать. Я пытался сам с использованием inspect написать, но как оказалось все там не так просто.
a = "a"
b = "b"

print(dict(a=a, b=b))
источник

MB

Max Block in SPb Python
Если я буду писать свою функцию magic_dict(), то внутри нее locals() не сможет получить именя переменных из вне
источник

IZ

Ilia Zviagin in SPb Python
Max Block
Т.е. если у меня имя ключа как имя переменной, я не хочу его два раза писать. Я пытался сам с использованием inspect написать, но как оказалось все там не так просто.
Ещё можно написать функцию с ... И туда передать все переменные по имени, из тапла печатать
источник

YV

Yuliya Volkova in SPb Python
а ты хочешь брать имена
источник

MB

Max Block in SPb Python
Yuliya Volkova
a = "a"
b = "b"

print(dict(a=a, b=b))
Да, так можно. Но в JavaScrpit еще проще. Как я написал выше. Хочу писать минимум кода 🙂

log({node, proxy, block_number, result})

А в питоен постоянно приходится делать var1=var1, var2=var2…
источник

IZ

Ilia Zviagin in SPb Python
Max Block
Мне это надо для такого кода. Очень часто у меня встречается что-то типа

node = “…”
proxy = “….”
block_number = “…”
result = ...

log({“node”: node, “proxy”: proxy, “block_number”: block_number”, “result”: result})

А в JavaScript это выглядело бы так:
log({node, proxy, block_number, result})
Как бы последнее дело думать "я хочу тут делать как в том языке".  - везде все по разному
источник

DM

Dmitriy Morozov in SPb Python
Max Block
Да, так можно. Но в JavaScrpit еще проще. Как я написал выше. Хочу писать минимум кода 🙂

log({node, proxy, block_number, result})

А в питоен постоянно приходится делать var1=var1, var2=var2…
ты хочешь отправлять в лог словарь. Почему словарь, который выдаёт вызов locals(), ты не можешь куда-то передать?
источник

MB

Max Block in SPb Python
Ilia Zviagin
Как бы последнее дело думать "я хочу тут делать как в том языке".  - везде все по разному
Ну вот в JS же это работает, почему в Питоне не может? Я функцию даже написал. Но есть один случай, когда она не правильно работает:

def vdict(*fields):
   frame = inspect.currentframe()
   frame = inspect.getouterframes(frame)[1]
   string = inspect.getframeinfo(frame[0]).code_context[0].strip()
   args = string[string.find("(") + 1 : -1].split(",")  # noqa E203

   names = []
   for i in args:
       if i.find("=") != -1:
           names.append(i.split("=")[1].strip())
       else:
           names.append(i.strip())

   result = {}
   for idx, name in enumerate(names):
       result[name] = fields[idx]
   return result


вот только эта функция не будет работать, если в одной строке есть ее два вызова , типа log(vdict(a1, a2), vdict(b1,b2) — уже не сработает
источник

IZ

Ilia Zviagin in SPb Python
Max Block
Ну вот в JS же это работает, почему в Питоне не может? Я функцию даже написал. Но есть один случай, когда она не правильно работает:

def vdict(*fields):
   frame = inspect.currentframe()
   frame = inspect.getouterframes(frame)[1]
   string = inspect.getframeinfo(frame[0]).code_context[0].strip()
   args = string[string.find("(") + 1 : -1].split(",")  # noqa E203

   names = []
   for i in args:
       if i.find("=") != -1:
           names.append(i.split("=")[1].strip())
       else:
           names.append(i.strip())

   result = {}
   for idx, name in enumerate(names):
       result[name] = fields[idx]
   return result


вот только эта функция не будет работать, если в одной строке есть ее два вызова , типа log(vdict(a1, a2), vdict(b1,b2) — уже не сработает
Потому тчо разные языки.
источник

IZ

Ilia Zviagin in SPb Python
Ладно, я не буду больше ...
источник

MB

Max Block in SPb Python
Dmitriy Morozov
ты хочешь отправлять в лог словарь. Почему словарь, который выдаёт вызов locals(), ты не можешь куда-то передать?
С логом это пример всего лишь. Я хочу максимально просто получать дикт из переменных.

var1 = ..
var2 =..

Я хочу вместо

d = {“var1”: var1, “var2: var2}

делать что-то типа:
d = magic_dict(var1, var2)
источник

IZ

Ilia Zviagin in SPb Python
Max Block
С логом это пример всего лишь. Я хочу максимально просто получать дикт из переменных.

var1 = ..
var2 =..

Я хочу вместо

d = {“var1”: var1, “var2: var2}

делать что-то типа:
d = magic_dict(var1, var2)
Так доведи это до логического конца, не делай переменные вообще, храни всё в словарях, все данные!
источник

MB

Max Block in SPb Python
Ilia Zviagin
Потому тчо разные языки.
То, что языки разные, это я прекрасно знаю. Но если в интерпретаторе JavaScript смогли добиться создания объекта по типу {var1, var2}, то есть ли РЕАЛЬНАЯ причина, почему в питоне это не возможно?
источник