Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 14, 2010 12:16:50

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

можно ли внутри функции\метода узнать откуда он вызван?

можно ли внутри функции\метода узнать откуда он вызван? те из другой функции\метода или напрямую из модуля.. если да то как?



Офлайн

#2 Фев. 14, 2010 13:12:32

Slava
От:
Зарегистрирован: 2009-11-21
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

можно ли внутри функции\метода узнать откуда он вызван?

Удобного способа нет. Можно через inspect получить стек фреймов, inspect.stack(), а дальше с помощью ф-й в inspect определить их тип.



Офлайн

#3 Фев. 14, 2010 16:05:24

sanook
От:
Зарегистрирован: 2010-02-12
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

можно ли внутри функции\метода узнать откуда он вызван?

if __name__ == __main__
примерно так



Офлайн

#4 Фев. 15, 2010 02:22:01

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

можно ли внутри функции\метода узнать откуда он вызван?

sys._getframe().f_code.co_name



Офлайн

#5 Фев. 23, 2010 15:34:28

ds40a
От:
Зарегистрирован: 2009-06-03
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

можно ли внутри функции\метода узнать откуда он вызван?

import traceback

def p1():
for s in traceback.extract_stack():
print s

def p2():
p1()

def p3():
p2()

p3()

“выхлоп”

('.\\T.PY', 13, ‘<module>’, ‘p3()’)
('.\\T.PY', 11, ‘p3’, ‘p2()’)
('.\\T.PY', 8, ‘p2’, ‘p1()’)
('.\\T.PY', 4, ‘p1’, ‘for s in traceback.extract_stack():’)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version