Преобразование списка строк в функции преобразования

В настоящее время я могу создать список функций преобразования, например:

casts = [float, float, int, str, int, str, str]

но я хотел бы сделать это следующим образом:

casts = input("Enter the casts: ") # this would be str str int int float

Я попробовал просто сделать cast.split() но это выводит только список строк, а не функции преобразования. Как я буду идти к достижению своей цели?

Каков фактический вариант использования? Похоже, это проблема XY.

s3dev 03.09.2024 23:51

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

capnhud 03.09.2024 23:54

используйте словарь поиска со значениями типа «float»: float

Kenny Ostrom 04.09.2024 04:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
133
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Функция — это не имя. Благословенный способ — использовать словарь для сопоставления имен функциям:

casts = {'int': int, 'float': float, 'str': str}
cast = casts[input('Enter the cast name')]

Антишаблон позволяет искать имена в модуле:

import builtins
cast = getattr(builtins, input('Enter the cast name)]

Но будьте осторожны: хотя это разрешено языком, это нарушает разделение между пользовательским кодом и внутренними компонентами языка. Вам следует избегать этого, если можете...


Судя по вашим комментариям, вы ищете что-то близкое к:

cast_ref = {'int': int, 'float': float, 'str': str}
casts = [cast_ref[src] for src in input('Enter the casts: ').split()]

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

capnhud 03.09.2024 23:57

Этот метод, похоже, не позволяет мне вводить более одного ключа вместо списка ключей.

capnhud 04.09.2024 00:25

@capnhud В этом случае отредактируйте свой вопрос, чтобы уточнить, как вы хотите вводить клавиши.

Anerdw 04.09.2024 00:28

@capnhud здесь более чем достаточно информации, которая поможет тебе справиться с этим делом, приходи сейчас

juanpa.arrivillaga 04.09.2024 00:35

@juanpa.arrivillaga Должно быть, я это упускаю, потому что все, что я получаю, это KeyErrors

capnhud 04.09.2024 00:43

@capnhud У вас есть два вопроса: «Как преобразовать "int" в int()» и «как разделить строку пробелами»? Первое — это суть поста, и этот ответ хорошо его описывает. На второе отвечает этот пост. Совмещения этих двух должно быть достаточно.

Anerdw 04.09.2024 01:00

вы можете использовать функцию eval

print(type(eval('int(2)')))
## int
cast = eval(input("Enter the cast: "))

Предыдущие комментарии указывают на то, что это небезопасно.

capnhud 04.09.2024 00:26

Если вы заранее не знаете типы данных, вы можете использовать встроенные механизмы вывода типов данных pandas для автоматического определения типов данных каждого столбца.

import pandas as pd

# Read the data file into a pandas DataFrame
df = pd.read_csv('data.csv')

# Infer data types for each column
df = df.infer_objects()

# Print the resulting DataFrame
print(df)

casts = [float, float, int, str, int, str, str]

def tonumtype(item,num)
tonumb = f"""
{item}({num}) """
return eval(tonumb)

tonumtype(casts[1],10) = float(10)
eval действительно следует избегать, когда это возможно. Кроме того, это вызовет SyntaxError.
Anerdw 04.09.2024 03:59

Другие вопросы по теме