sizin gibi 2 işlevleri varsa:Arayanın işlev adını Python'da başka bir işlevin içine mi almak istiyorsunuz?
def A() :
B()
def B() :
this.caller.name
sizin gibi 2 işlevleri varsa:Arayanın işlev adını Python'da başka bir işlevin içine mi almak istiyorsunuz?
def A() :
B()
def B() :
this.caller.name
Sen çağrı almak için inspect modülünü kullanabilirsiniz:
def A
def B
ve A B çağırır, Kim gibi, B içindeki B aradığını alabilirsiniz yığını. Çerçeve kayıtlarının bir listesini döndürür. Her kayıttaki üçüncü öğe arayan adıdır. İstediğiniz şey şudur: Elbette
>>> import inspect
>>> def f():
... print inspect.stack()[1][3]
...
>>> def g():
... f()
...
>>> g()
g
, belirli bir dizin erişmeyi denemeden önce kayıtlarının bulunduğunu yeterli çerçeveyi kontrol etmek için iyi bir fikirdir. Aşağıdaki örnekte olduğu gibi
-denilen-yöntem-en azından bu işe yaramaz, onlar tuples sırasını değiştirdi. Şimdi adlandırılmış bir tuple kullanılıyor, bu yüzden inspect.stack() [1] .filename – timeyyy
:
>>> def foo():
... global x
... x = sys._getframe(1)
...
>>> def y(): foo()
...
>>> y()
>>> x.f_code.co_name
'y'
>>>
Önemli not: Bu _getframe
yöntem adı (hey, bir alt çizgi ile başlar) den açıktır olarak, bir API yöntemi değil bir düşüncesizce güvenmek olmalı . Baseconfig() içinde
[sys._getframe] kullanmak en iyisidir (http://docs.python.org/library/sys.html#sys._getframe) "Python'un tüm uygulamalarında mevcut olduğu garanti edilmez" - Bence bunun önemli olduğunu düşünüyorum. – RWS
@RWS, teşekkürler, not –
kullanıcı günlük modülü ve% (dosya adı) belirtebilirsiniz s seçeneği
import logging
logging.basicConfig(filename='/tmp/test.log', level=logging.DEBUG, format='%(asctime)s | %(levelname)s | %(funcName)s |%(message)s')
def A():
logging.info('info')
Dikkatle "% (dosya adı) seçeneği" deyin. Kod örneğinizde sahip olduğunuz şey olmalı: '% (funcName) s' :) –
sys
kullanılarak iki yol ve inspect
modül vardır:
inspect.stack()[1][3]
stack()
formu daha az okunabilir ve inspect.py
gelen özü, bkz sys._getframe()
çağırır beri uygulama bağlıdır:
def stack(context=1):
"""Return a list of records for the stack above the caller's frame."""
return getouterframes(sys._getframe(1), context)
Bu benim için çalışıyor! : D
>>> def a():
... import sys
... print sys._getframe(1).f_code.co_name
...
>>> def b():
... a()
...
...
>>> b()
b
>>>
Kaynağa sahipsiniz. Neden böyle bir şeye ihtiyacın var? –
Çünkü bir üçüncü parti uygulamasının python yorumlayıcısında kodun hatalarını ayıklarken gerçek bir hata ayıklayıcısı yok. –
olası kopyası [Python: Arayanın yöntem adı aranan yöntemde nasıl alınır?] (Http://stackoverflow.com/questions/2654113/python-how-to-get-the-callers-method-name-in python 3.4 üzerinde – bernie