Итак, давайте начнем с: Вы действительно не должны этого делать. Данные - это просто данные в Python - идентификатор (например, имя, которое вы используете, чтобы говорить об этом) ничего не значит для самой программы. Это имеет смысл только программисту.
Тем не менее, есть способы, чтобы сделать то, что вы пытаетесь сделать, , и они все неправильно, что нужно сделать. Но они возможны, поэтому давайте поговорим о них.
globals()
предоставит вам словарь с ключами идентификаторов и значений, um, values, для всех объектов, находящихся в настоящее время в глобальной области. Это означает, что вы можете сделать:
def list_processor(data):
g = globals()
data_name = next((k for k,v in g.items() if v is data))
if data_name == 'myList1':
... # do whatever you want here
Обратите внимание на то, что вы просматриваете ВСЁ в глобальном масштабе. Во-первых, это немой, поскольку он медленный, а во-вторых, он немой, потому что он глючит. Что делать, если myList1
не передается из глобальной области? Что, если это локальная переменная внутри функции, которая никогда не попадает в глобальную область? Теперь ваш хитрый хак не удался.
Правильный способ сделать это - выполнить какую-то интроспекцию по аргументу, передаваемому как «data
». Например, если myList1
всегда имеет 8 элементов и myList2
всегда имеет 10:
def f_if_myList1(lst):
"""Do whatever we do if we pass myList1"""
...
def f_if_myList2(lst):
"""Do whatever we do if we pass myList2"""
...
def list_processor(data):
if len(data) == 8: # myList1!
f_if_myList1(data)
elif len(data) == 10:
f_if_myList2(data)
else:
# not sure. raise ValueError()?
uhmm ... похоже, мне нужно изучить механику публикации на этом сайте, так как окончательный текст выглядит совсем не так, как я на самом деле набрал! – lookiluke
Объекты не имеют имен, они имеют только идентификаторы. Кроме того, вы выбираете очень плохой способ сделать это. – Shashank
ok! Я получаю это сейчас (относительно новое для программирования на питоне). Итак, как бы я сделал это лучше? – lookiluke