В этом руководстве по Python мы обсудим «Как вызвать функцию по имени строки в Python», увидим 8 различных подходов с некоторыми наглядными примерами.
- Вызов с помощью функции getattr()
- С помощью globals()
- С использованием словаря
- С помощью eval()
- С помощью exec()
- С помощью locals().py
- Вызов метода класса по имени строки
- С помощью модуля importlib
- Заключение
Вызов с помощью функции getattr()
Функция getattr() в Python извлекает значение указанного атрибута из объекта, что полезно для того, чтобы сделать ваш код более читабельным, особенно при работе с динамическим доступом к атрибуту для вызова функции по имени строки.
Код:
import math function_name = 'sqrt' calculate_square_root = getattr(math, function_name) result = calculate_square_root(25) print(result)
В этом коде getattr(math, function_name) извлекает атрибут sqrt из математического модуля Python. Этот атрибут представляет собой функцию, которая вычисляет квадратный корень в Python.
calculate_square_root = getattr(math, function_name)
Динамически обращаясь к этому атрибуту с помощью функции getattr() в Python, вы можете программно выбрать, какую функцию вызывать на основе переменной(в данном случае function_name).
Выход:
5.0
Приложены снимки, иллюстрирующие код Python и соответствующий вывод в Visual Studio.
С помощью globals()
Вы можете вызвать функцию по ее имени, представленному в виде строки, используя функцию globals() в Python. Эта функция возвращает словарь, представляющий глобальную таблицу символов, которая включает в себя все функции, определенные на глобальном уровне.
Код:
def calculations(a, b): print(f'Addition : {a+b}') print(f'Subtraction : {a-b}') print(f'Multiplication : {a*b}') print(f'Division : {a/b}') function_name = globals()['calculations'] function_name(30,15)
В этом коде function_name присваивается значение, полученное из глобальной таблицы символов с помощью globals()[‘calculations’], функционального объекта вычислений.
Выход:
Addition : 45 Subtraction : 15 Multiplication : 450 Division : 2.0
Вот объединенное представление сценария Python и его результатов в Visual Studio.
С использованием словаря
Чтобы вызвать функцию по имени строки в Python, вы можете использовать словарь, который сопоставляет имена функций с соответствующими объектами функций.
Код:
def calculate_tax(income, tax_rate): return income * tax_rate functions_dict = { 'calculate_tax': calculate_tax, } function_name = 'calculate_tax' if function_name in functions_dict: print(functions_dict[function_name](50000, 0.2))
Создается словарь с именем Function_dict, где ключ Calculate_tax соответствует функции Calculate_tax. Далее переменной function_name присваивается строка «calculate_tax».
if function_name in functions_dict: print(functions_dict[function_name](50000, 0.2))
Оператор if проверяет, существует ли function_name в файле function_dict, и если да, то он вызывает функцию, используя функции_dict[function_name] со своими аргументами.
Выход:
10000.0
Ниже показан код Python вместе с его выходными данными, полученными в Visual Studio.
С помощью eval()
Мы можем использовать функцию eval() в Python для выполнения строки как кода Python. Сюда входит динамический вызов функций на основе имен строк.
Код:
def customer_service_greeting(name): return f'Hello {name}, thank you for contacting our customer service. How can I assist you today?' function_name = 'customer_service_greeting' func = eval(function_name) print(func('Peter Parker'))
Выход:
Hello Peter Parker, thank you for contacting our customer service. How can I assist you today?
Представлен скриншот кода Python и его вывода в Visual Studio.
С помощью exec()
Вы можете вызвать функцию из имени строки, используя функцию exec() и динамическое назначение переменных в Python.
Этот подход позволяет динамически выполнять код, определенный строками.
Вот пример кода:
def calculate_sales_tax(amount): tax_rate = 0.08 return amount * tax_rate function_name = 'calculate_sales_tax' exec(f'my_func={function_name}') my_func = globals()['my_func'] print(my_func(100))
Функция exec() используется для динамического выполнения строки f’my_func={function_name}’, эффективно создавая переменную my_func, которая содержит объект функции Calculation_sales_tax в Python.
exec(f'my_func={function_name}')
my_func извлекается из глобальной таблицы символов с помощью globals()[‘my_func’] и вызывается с аргументом в Python.
Выход:
8.0
Прикреплено объединенное изображение, показывающее как код Python, так и его выходные данные в Visual Studio.
С помощью locals().py
locals() — это встроенный метод Python, который мы можем вызвать методом из имен строк.
Мы вызвали locals(), фактически получив доступ к объекту метода Calcult_shipping_cost из таблицы локальных символов.
Код:
def calculate_shipping_cost(weight, distance): rate_per_mile = 0.5 return weight * distance * rate_per_mile print( locals()['calculate_shipping_cost'](20, 100) )
Выход:
1000.0
Вот сводное представление кода Python и его вывода в Visual Studio.
Вызов метода класса по имени строки
Мы также можем вызвать метод класса по имени строки в Python, используя getattr(). Мы объяснили метод getattr() в первом примере.
Код:
class Customer(): def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name def get_full_name(self): return self.first_name + ' ' + self.last_name custormer_object = globals()['Customer'] customer1 = custormer_object('John', 'Doe') func = getattr(customer1, 'get_full_name') print(func())
Выход:
John Doe
Ниже приведен объединенный снимок экрана кода Python и его вывода в Visual Studio.
С помощью модуля importlib
В Python вы можете вызвать функцию модуля с помощью модуля importlib. Этот модуль предоставляет возможность динамического импорта других модулей или определенных атрибутов(например, классов или функций) во время выполнения.
Код:
# Emp_Details.py class Employee: def __init__(self, first, last): self.first = first self.last = last def get_name(self): return self.first + ' ' + self.last
Код для файла main.py:
# main.py import importlib module = importlib.import_module('Emp_Details') cls = getattr(module, 'Employee') emp1 = cls('John', 'Doe') func = getattr(emp1, 'get_name') print(func())
Этот код содержит два файла: Emp_Details.py, который определяет класс «Сотрудник», и «main.py», куда импортируется класс «Сотрудник» из Emp_Details.py.
import importlib module = importlib.import_module('Emp_Details') cls = getattr(module, 'Employee')
И getattr(module, ‘Employee’) извлекает объект класса «Сотрудник» из импортированного модуля. Ниже показано, как динамически вызывать функцию модуля с помощью модуля importlib в Python.
Выход:
John Doe
Ниже приведен снимок экрана с двойным представлением, показывающий код Python и его выходные данные в Visual Studio.
Заключение
Здесь мы рассмотрели различные методы вызова функции по имени строки в Python, продемонстрировав восемь подходов и техник. Мы обсудили, как использовать встроенные функции, такие как getattr(), globals(), eval(), exec() и locals(), а также использовать словари, методы классов и модуль importlib для вызова функций по имени строки.
Каждый метод предоставляет свой способ динамического вызова функций на основе имен строк, что обеспечивает гибкость и универсальность программирования на Python.