2009-10-08 33 views
8
def applejuice(q): 
    print THE FUNCTION NAME! 

Nó sẽ dẫn đến "applejuice" dưới dạng chuỗi.Cách in tên hàm dưới dạng chuỗi trong Python từ bên trong hàm đó

+1

Xem http://meta.stackexchange.com/questions/18584/how-to-ask-a-smart-question-on-so/25128#25128 –

+1

Từ câu trả lời mà bạn đã chọn chúng ta có thể kết luận rằng đây thực sự là một bản sao. Thật vậy, một câu hỏi gần như chính xác cùng một tên đã tồn tại: http://stackoverflow.com/questions/251464/how-to-get-the-function-name-as-string-in-python –

+0

Tôi không đồng ý rằng đây là một bản sao của # 251464 - có vẻ như câu hỏi này là ngược lại. –

Trả lời

19

này cũng hoạt động:

import sys 

def applejuice(q): 
    func_name = sys._getframe().f_code.co_name 
    print func_name 
2

Bạn cần giải thích vấn đề của mình là gì. Bởi vì câu trả lời cho câu hỏi của bạn là:

print "applejuice" 
+2

có thể anh ta ngụ ý: def func (anothah_func): in anothah_func's name – wilhelmtell

+0

Vâng, điều đó chắc chắn có thể. Chúng tôi sẽ xem liệu anh ấy có nói vấn đề là gì không. –

7
import traceback 

def applejuice(q): 
    stack = traceback.extract_stack() 
    (filename, line, procname, text) = stack[-1] 
    print procname 

Tôi giả định này được sử dụng để gỡ lỗi, vì vậy có lẽ bạn muốn xem xét các thủ tục khác được cung cấp bởi traceback module. Họ sẽ cho bạn in toàn bộ cuộc gọi stack, dấu vết ngoại lệ vv

3

Một cách khác

import inspect 
def applejuice(q): 
    print inspect.getframeinfo(inspect.currentframe())[2] 
0
def foo(): 
    # a func can just make a call to itself and fetch the name 
    funcName = foo.__name__ 
    # print it 
    print 'Internal: {0}'.format(funcName) 
    # return it 
    return funcName 

# you can fetch the name externally 
fooName = foo.__name__ 
print 'The name of {0} as fetched: {0}'.format(fooName) 

# print what name foo returned in this example 
whatIsTheName = foo() 
print 'The name foo returned is: {0}'.format(whatIsTheName) 
Các vấn đề liên quan