- Как получить имя функции в виде строки в Python?
- Как получить имя функции как строку в Python?
- Постановка проблемы
- Метод 1: Используйте атрибут __name__
- Метод 2: Используйте атрибут __qualname__
- Читайте ещё по теме:
- Имя функции в Python: как его получить?
- Использование свойства __name__
- Использование модуля inspect
- Заключение
- Имена текущих функции (метода), класса, объекта
Как получить имя функции в виде строки в Python?
должен выводить «my_function» . Доступна ли такая функция в Python? Если нет, какие-либо идеи о том, как реализовать get_function_name_as_string , в Python?
В следующий раз, пожалуйста, укажите вашу мотивацию в вопросе. В своей нынешней форме он, очевидно, сбивает людей с толку, и некоторые из них склонны считать, что вы будете вызывать дословно get_function_name_as_string(my_function) и ожидаете в результате «my_function» . Я предполагаю, что ваша мотивация — это общий код, который работает с функцией как первоклассным объектом и должен получить имя функции, переданной в качестве аргумента.
Мотивация вопроса не имеет отношения к техническому ответу. Прекратите использовать его как оправдание для насмешек, критики, интеллектуального позирования и избегания ответов.
Мотивация может помочь решить, будет ли задан правильный вопрос. В этом примере пользователь уже четко знает имя функции, поэтому использовать другую функцию для его возврата? Почему бы просто не сделать что-то столь же простое, как print(«my_function») ? Ответ на это в мотивации.
@Dannid, это скучный аргумент. Если OP запрашивает имя функции, это потому, что она инкапсулирована или понята способом, который должен быть выведен, например, для целей отладки. Ручная настройка в среде, где требуется такое требование, является ужасной практикой программирования. У вас может быть список функций для вызова, или вам может быть передана функция и вы хотите записать имя функции. И еще миллион причин, кроме просто для развлечения / изучения Python, которого, если хотите, уже достаточно.
Перечитывая мой комментарий, я не уверен, почему я перешел на сторону желания мотивации в ОП. Мотивация должна быть неактуальной. Похоже, я играл адвоката бедного дьявола. Я полагаю, что я чувствовал и не очень хорошо общался, потому что это помогает узнать, какова цель функции — вы отлаживаете? Написание шаблона функции? Создание динамических глобальных переменных? Это одноразовая или постоянная функция, которую вы будете часто использовать? В любом случае, я должен был согласиться с тем, что мотивация не имеет отношения к техническому ответу, хотя это может помочь решить, какой технический ответ лучше.
Как получить имя функции как строку в Python?
Состав задачи, заданный объект функции, назначенного имени. Как получить имя функции как строку? Например, рассмотрим следующую функцию your_function. Как получить название «your_function» от этого? def your_function (): пройти string_name = . Ваше желаемое значение результата, хранящегося в String_Name, является строкой «your_function». … Как получить имя функции как строку в Python? Подробнее “
Постановка проблемы
Учитывая функциональный объект, назначенный на имя. Как получить имя функции как строку?
Например, рассмотрим следующую функцию your_function Отказ Как получить имя «your_function» из этого?
def your_function(): pass string_name = .
Ваше желаемое значение результата хранится в string_name это строка «your_function» Отказ
print(string_name) # your_function
Метод 1: Используйте атрибут __name__
Самый питонический способ извлечения имени от любого объекта или класса – использовать его __name__ атрибут. Атрибуты, заключенные в двойной подчеркивании (атрибуты Dunder), предоставляют специальные функциональные возможности для программистов Python. Например, звонок your_function .__ Имя__ дает строковое значение ‘your_function’ Отказ
def your_function(): pass string_name = your_function.__name__ print(string_name) # your_function
Тем не менее, есть важный случай, когда этот метод потерпит неудачу.
💣 Внимание : В Python функции являются объектами. Вы можете создавать несколько переменных, указывающих на тот же объект в памяти. Поэтому вы можете создать два имени func_1 и func_2 Это оба указывают на один и тот же объект функции. При звонке func_1 .__ name__ Результат может быть func_2 вместо func_1 что ты ожидал.
Это демонстрируется в следующем минимальном примере:
def func_2(): pass func_1 = func_2 print(func_1.__name__) # func_2
Как оба имена указывают на тот же объект памяти, но func_2 Во-первых, указывал на это имя объекта func_2 Отказ Использование памяти этого кода визуализируется с помощью инструмента Python Reputor:
Обе переменные относятся к тому же объекту функции, которые по умолчанию как func_2 имя.
Метод 2: Используйте атрибут __qualname__
Чтобы извлечь имя из любого объекта или класса, вы также можете использовать его __qualname__ атрибут. Например, звонок your_function .__ Qualname__ дает строковое значение ‘your_function’ Отказ Вы бы использовали __qualname__ над __имя__ Если вам также понадобится какой-то контекст, такой как класс, определяющий метод.
Следующий код создает функцию и способ внутри класса. Затем он сравнивает вывод __name__ и __qualname__ Атрибуты как функции, так и класса:
def my_function(): pass class My_Class(object): def my_method(self): pass print(my_function.__name__) # "my_function" print(My_Class.my_method.__name__) # "my_method" print(my_function.__qualname__) # "my_function" print(My_Class.my_method.__qualname__) # "My_Class.my_method"
Вы можете погрузиться глубже в идиосинкразиях __qualname__ здесь и здесь Отказ
Спасибо за прочтение этой статьи. Чтобы повысить свои навыки Python, подумайте о том, чтобы присоединиться к бесплатной академии электронной почты Finxter с большим количеством чит-листов, учебников Python и забиты забавных программиров! 🙂
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.
Читайте ещё по теме:
Имя функции в Python: как его получить?
В Python имя функции, как и все остальные объекты, обладает свойствами, доступ к которым можно получить при помощи встроенных функций и методов. В статье мы подробно рассмотрим разные способы определения имени функции.
Использование свойства __name__
В Python каждая функция обладает рядом свойств, которые доступны через специальные имена, начинающиеся и заканчивающиеся двумя подчеркиваниями. Одно из таких свойств — __name__ , которое содержит имя функции.
def my_function(): pass print(my_function.__name__) #my_function
В этом примере my_function.__name__ вернул строку my_function , которая является именем функции.
Использование модуля inspect
Модуль inspect в стандартной библиотеке Python предоставляет несколько функций для получения информации о функциях и других объектах. Одной из таких функций является inspect.getsource() , которая возвращает исходный код функции в виде строки.
import inspect def my_function(): pass def get_name(func): lines = inspect.getsource(func).splitlines() first_line = lines[0] name = first_line.split()[1].split('(')[0] return name print(get_name(my_function)) #my_function
В этом примере get_name() использует inspect.getsource() для получения исходного кода функции, затем извлекает первую строку этого кода и извлекает имя функции из этой строки.
Заключение
В Python есть несколько способов определить имя функции. Самый простой и прямой способ — использовать свойство __name__ функции. Наконец, можно использовать модуль inspect из стандартной библиотеки Python для извлечения исходного кода функции и поиска ее имени в этом коде.
Имена текущих функции (метода), класса, объекта
Возможно ли в Python при выполнении программы узнать имена выполняющейся в данный момент функции (метода), если это метод класса — имя этого класса, и, желательно, объекта этого класса.
Обрыв функции при вызове метода из объекта другого класса
Почему выполнение функция обрывается на вызове метода из объекта другого класса? DataBuffer.cpp.
Вызов метода класса из сторонней функции без объявления объекта
Собственно вопрос в топике. Можно? т.е. есть некий класс MyMySQLClass() в котором прописаны.
Работа метода класса в зависимости от типа объекта класса
есть такой код: template <typename __Type, size_t __m> class mvector < private: .
Как вывести имена текущих подключившихся компьютеров к бд
Нашел в майкрософте код, который выводит на печать имена компьютеров, которые в данный момент.
На басурманском сайте еще такое нашел, тоже работает:
print ("My name is: %s" % inspect.stack()[0][3])
А зачем?
Такое может понадобиться только для отладки. Ну так воспользуйтесь цивильным отладчиком. PyCharm ждёт вас.
Сообщение от dondublon
Почему же, совсем не обязательно. Самым банальным примером может служить библиотека flask-classy, она строит url на основе названия классов и названий методов и активно использует такие вещи.
Сообщение от alex925
Почему же, совсем не обязательно. Самым банальным примером может служить библиотека flask-classy, она строит url на основе названия классов и названий методов и активно использует такие вещи.
Не работал с flask-classy, но сильно сомневаюсь.
Речь была про то, чтобы узнать выполняющийся вот прям щас метод. Где мы сейчас, в идущем процессе. Смотрим на метод изнутри.
Строить url на основе названий классов — это совсем другое. Для этого даже объект класса создавать не нужно, и тем более — его запускать. Смотрим на методы извне.
Сообщение от dondublon
Сообщение от dondublon
Ну да, согласен, это немного другой разговор, но все равно не думаю, что это задача уж больно экзотическая.
Сообщение от dondublon
Есть необходимость организовать в программе логирование. Программа разделена, условно говоря, на интерфейсную и рабочую части (не MVC, скорее в ней вид объединен с контроллером в одном модуле, а модель — в нескольких других модулях).
В ходе не отладки, а рабочей эксплуатации программы могут возникать внештатные ситуации, инфа о которых будет сбрасываться в логи. Ну и хотелось бы знать, из какой именно функции модели пришла очередная запись в лог, чтобы лучше понимать, что случилось.
import traceback try: raise TypeError("Oups!") except Exception as err: tb = traceback.format_exc() print(tb)
В стандартном трейсе есть все, от описания ошибки, до указания на место возникновения. В реальном приложении конечно надо обработку похитрей делать, но способ все равно хороший.
Вызов метода объекта класса
Как вызвать метод объекта класса ? заголовочный файл********** #include <vector>.
Узнать все метода объекта класса
Можно ли вывести все методы объекта класса типа как get_defined_functions()?
Создание объекта класса и вызов его метода
Добрый день, форумчане. На Яве программирую не больше недели. Столкнулся со следующей проблемой.
Вызов метода объекта внутри определения метода другого объекта(вложенные классы)
Как мне вызвать метод объекта slider класса Slider внутри определения метода объекта класса.
Вывод результата работы метода объекта класса на экран
Здравствуйте, препод дал задание создать класс и реализовать внешний метод с помощью объекта.
Вызов метода класса в лямбде-функции, вызываемой в другом методе этого же класса
Здравствуйте. Помогите грамотно передать в лямбду метод класса. Упрощенно. Есть класс. В одном.
Использование метода класса как функции в качестве типизированного аргумента в методе класса
Использование метода класса как функции в качестве типизированного аргумента в методе класса .