Hướng dẫn get function name python - lấy tên hàm python

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc

    Bàn luận 

    Một trong những phong cách mã hóa nổi bật nhất là theo mô hình OOP. Đối với điều này, ngày nay, căng thẳng đã được viết mã với mô đun, tăng gỡ lỗi và tạo ra một mã mạnh mẽ hơn, có thể sử dụng lại. Tất cả điều này đã khuyến khích việc sử dụng các chức năng khác nhau cho các nhiệm vụ khác nhau và do đó chúng tôi buộc phải biết một số hack của các chức năng. Bài viết này thảo luận về cách in tên của một hàm. Hãy để thảo luận về những cách nhất định trong đó điều này có thể được thực hiện. & NBSP;

    Python3

    Phương pháp 1: Nhận tên hàm trong Python bằng hàm.func_name & nbsp;

    Bằng cách sử dụng chức năng thuộc tính chức năng đơn giản, func_name, người ta có thể lấy tên của hàm và do đó có thể khá tiện dụng cho mục đích kiểm tra và đôi khi cho tài liệu. Hạn chế là điều này hoạt động chỉ dành cho Python2. & NBSP;

    foobar = "foo"
    
    def func(var):
        print var.origname
    
    7
    foobar = "foo"
    
    def func(var):
        print var.origname
    
    8

    foobar = "foo"
    
    def func(var):
        print var.origname
    
    9
    func(foobar)
    
    0
    func(foobar)
    
    1

    The name of function is : GFG

    func(foobar) 2func(foobar) 3func(foobar) 4 func(foobar) 5 func(foobar) 6__name__ 

    Đầu ra:

    Python3

    Phương pháp 1: Nhận tên hàm trong Python bằng hàm.func_name & nbsp;

    Bằng cách sử dụng chức năng thuộc tính chức năng đơn giản, func_name, người ta có thể lấy tên của hàm và do đó có thể khá tiện dụng cho mục đích kiểm tra và đôi khi cho tài liệu. Hạn chế là điều này hoạt động chỉ dành cho Python2. & NBSP;

    foobar = "foo"
    
    def func(var):
        print var.origname
    
    7
    foobar = "foo"
    
    def func(var):
        print var.origname
    
    8

    foobar = "foo"
    
    def func(var):
        print var.origname
    
    9
    func(foobar)
    
    0
    func(foobar)
    
    1

    The name of function is : GFG

    func(foobar) 2func(foobar) 3func(foobar) 4 func(foobar) 5 func(foobar) 6

    Đầu ra:

    Phương pháp 2: Nhận tên hàm trong Python bằng hàm .__ Tên __ & nbsp;

    Hàm này có thể được sử dụng thay thế cho hàm trên và đã được giới thiệu trong Python3 vì hàm được đề cập trong phương pháp trên đã được khấu hao trong Python3. & NBSP;

    foobar = "foo"
    
    def func(var):
        print var.origname
    
    9
    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    0

    func(foobar)
    
    2
    func(foobar)
    
    3
    func(foobar)
    
    4
    func(foobar)
    
    5
    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    6

    Phương pháp 3: Nhận tên hàm trong Python bằng cách sử dụng thuộc tính __qualname__

    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    0
    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    0

    func(foobar)
    
    2
    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    3

    func(foobar)
    
    2
    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    5

    foobar = "foo"
    
    def func(var):
        print var.origname
    
    9
    func(foobar)
    
    0
    func(foobar)
    
    1

    Geekforgeeks
    Geekforgeeks.my_method

    Có thể lấy tên biến ban đầu của một biến được truyền đến một hàm không? Ví dụ.

    Nội dung chính

    • Làm thế nào để bạn có được tên chức năng và đối số trong Python?
    • Tên biến được sử dụng bởi một hàm để nhận giá trị được chuyển là gì?
    • * Kwargs trong Python là gì?
    • Làm thế nào để các đối số được thông qua trong Python bằng cách tham chiếu hoặc theo giá trị?

    foobar = "foo"
    
    def func(var):
        print var.origname
    

    Tất cả các tham số (đối số) trong ngôn ngữ Python được truyền qua tham chiếu.Điều đó có nghĩa là nếu bạn thay đổi những gì một tham số đề cập đến trong một hàm, thay đổi cũng phản ánh lại trong hàm gọi.by reference. It means if you change what a parameter refers to within a function, the change also reflects back in the calling function.

    func(foobar)
    

    Returns:

    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    4

    EDIT:

    Có thể lấy tên biến ban đầu của một biến được truyền đến một hàm không? Ví dụ.

    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    

    Nội dung chính

    Để có thể:

    Tất cả những gì tôi đang cố gắng làm là làm cho một chức năng như:May 1, 2010 at 11:57

    .. và có chức năng tạo tên tệp từ tên của biến được truyền cho nó.Acorn

    Tôi cho rằng nếu không thể tôi sẽ phải truyền biến và tên của biến như một chuỗi mỗi lần.26 gold badges129 silver badges171 bronze badges

    3

    Khi được hỏi ngày 1 tháng 5 năm 2010 lúc 11:57May 1, 2010 at 11:57 To make it clear, I don't recommend using this AT ALL, it will break, it's a mess, it won't help you in any way, but it's doable for entertainment/education purposes.

    AcornacornAcorn

    47.5K26 Huy hiệu vàng129 Huy hiệu bạc171 Huy hiệu đồng26 gold badges129 silver badges171 bronze badges

    Output:

    ['e', '1000', 'c']
    

    Chỉnh sửa: Để làm rõ, tôi không khuyên bạn nên sử dụng điều này, nó sẽ bị phá vỡ, đó là một mớ hỗn độn, nó sẽ không giúp bạn bằng mọi cách, nhưng nó có thể thực hiện được cho mục đích giải trí/giáo dục. To make it clear, I don't recommend using this AT ALL, it will break, it's a mess, it won't help you in any way, but it's doable for entertainment/education purposes.

    16.4K13 Huy hiệu vàng54 Huy hiệu bạc101 Huy hiệu đồng13 gold badges54 silver badges101 bronze badges13 gold badges54 silver badges101 bronze badges

    Đã trả lời ngày 1 tháng 5 năm 2010 lúc 12:13May 1, 2010 at 12:13

    Ivo Wetzelivo WetzelIvo Wetzel

    45,9K15 Huy hiệu vàng97 Huy hiệu bạc110 Huy hiệu đồng15 gold badges97 silver badges110 bronze badges

    11

    Để thêm vào câu trả lời của Michael Mrozek, bạn có thể trích xuất các tham số chính xác so với toàn bộ mã bằng cách:

    The name of function is : GFG
    0

    Đã trả lời ngày 7 tháng 10 năm 2014 lúc 16:10Oct 7, 2014 at 16:10Oct 7, 2014 at 16:10

    propjk007propjk007propjk007propjk007

    5958 Huy hiệu bạc18 Huy hiệu đồng8 silver badges18 bronze badges8 silver badges18 bronze badges

    1

    Có vẻ như IVO đã đánh bại tôi đến

    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    5, nhưng đây là một triển khai khác:
    The name of function is : GFG
    2

    Tất nhiên, nó có thể bị lừa:

    The name of function is : GFG
    3

    Đạo đức: Đừng làm điều đó.

    Đã trả lời ngày 1 tháng 5 năm 2010 lúc 12:22May 1, 2010 at 12:22May 1, 2010 at 12:22

    Outisoutisoutisoutis

    73.5K20 Huy hiệu vàng147 Huy hiệu bạc216 Huy hiệu Đồng20 gold badges147 silver badges216 bronze badges20 gold badges147 silver badges216 bronze badges

    1

    Bạn không thể. Nó được đánh giá trước khi được chuyển đến chức năng. Tất cả những gì bạn có thể làm là vượt qua nó như một chuỗi.

    Đã trả lời ngày 1 tháng 5 năm 2010 lúc 12:01May 1, 2010 at 12:01May 1, 2010 at 12:01

    Max Shawabkehmax ShawabkehMax ShawabkehMax Shawabkeh

    36,8K9 Huy hiệu vàng81 Huy hiệu bạc91 Huy hiệu Đồng9 gold badges81 silver badges91 bronze badges9 gold badges81 silver badges91 bronze badges

    4

    Một cách khác bạn có thể thử nếu bạn biết mã gọi sẽ như thế nào là sử dụng

    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    7:
    The name of function is : GFG
    5
    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    8 sẽ chứa dòng mã được sử dụng để gọi
    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    9 (trong ví dụ của bạn, nó sẽ là chuỗi
    import inspect
    
    def foo(a, f, b):
        frame = inspect.currentframe()
        frame = inspect.getouterframes(frame)[1]
        string = inspect.getframeinfo(frame[0]).code_context[0].strip()
        args = string[string.find('(') + 1:-1].split(',')
        
        names = []
        for i in args:
            if i.find('=') != -1:
                names.append(i.split('=')[1].strip())
            
            else:
                names.append(i)
        
        print names
    
    def main():
        e = 1
        c = 2
        foo(e, 1000, b = c)
    
    main()
    
    0). Bạn có thể phân tích cú pháp đó để rút ra đối số

    Đã trả lời ngày 28 tháng 4 năm 2012 lúc 7:09Apr 28, 2012 at 7:09Apr 28, 2012 at 7:09

    Michael Mrozekmichael MrozekMichael MrozekMichael Mrozek

    164K28 Huy hiệu vàng167 Huy hiệu bạc172 Huy hiệu đồng28 gold badges167 silver badges172 bronze badges28 gold badges167 silver badges172 bronze badges

    Câu trả lời của @ivo Wetzel hoạt động trong trường hợp gọi chức năng được thực hiện trong một dòng, như

    The name of function is : GFG
    9

    Trong trường hợp cuộc gọi hàm đó không nằm trong một dòng, như:

    func(foobar)
    
    0

    Mã dưới đây hoạt động:

    func(foobar)
    
    1

    Bạn sẽ nhận được:

    func(foobar)
    
    2

    Nhưng vẫn vậy, điều này có thể phá vỡ.

    Đã trả lời ngày 18 tháng 7 năm 2016 lúc 10:20Jul 18, 2016 at 10:20Jul 18, 2016 at 10:20

    AeonaeonAeonAeon

    891 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges1 silver badge4 bronze badges

    Đối với hậu thế, đây là một số mã tôi đã viết cho nhiệm vụ này, nói chung tôi nghĩ rằng có một mô -đun bị thiếu trong Python để cung cấp cho mọi người kiểm tra tốt và mạnh mẽ về môi trường người gọi. Tương tự như những gì RLAng Eval Framework cung cấp cho R.

    func(foobar)
    
    3

    Osamoele

    3234 Huy hiệu bạc15 Huy hiệu Đồng4 silver badges15 bronze badges4 silver badges15 bronze badges

    Đã trả lời ngày 27 tháng 9 năm 2019 lúc 9:37Sep 27, 2019 at 9:37Sep 27, 2019 at 9:37

    Matt Oatesmatt OatesMatt OatesMatt Oates

    7785 Huy hiệu bạc6 Huy hiệu Đồng5 silver badges6 bronze badges5 silver badges6 bronze badges

    2

    Nếu bạn muốn một mối quan hệ cặp giá trị chính, có thể sử dụng từ điển sẽ tốt hơn?

    ... Hoặc nếu bạn đang cố gắng tạo một số tài liệu tự động từ mã của bạn, có lẽ một cái gì đó như doxygen (http://www.doxygen.nl/) có thể làm công việc cho bạn?

    Albert

    7.6333 Huy hiệu vàng18 Huy hiệu bạc31 Huy hiệu đồng3 gold badges18 silver badges31 bronze badges3 gold badges18 silver badges31 bronze badges

    Đã trả lời ngày 1 tháng 5 năm 2010 lúc 12:06May 1, 2010 at 12:06May 1, 2010 at 12:06

    Nick Cartwrightnick CartwrightNick CartwrightNick Cartwright

    8.25415 Huy hiệu vàng44 Huy hiệu bạc56 Huy hiệu Đồng15 gold badges44 silver badges56 bronze badges15 gold badges44 silver badges56 bronze badges

    Bạn có thể sử dụng gói Python-Varname

    func(foobar)
    
    4

    Output:

    func(foobar)
    
    5

    Gói dưới đây:

    https://github.com/pwwang/python-varname

    Đã trả lời ngày 17 tháng 1 năm 2021 lúc 9:20Jan 17, 2021 at 9:20Jan 17, 2021 at 9:20

    SynthaseSynthaseSynthaseSynthase

    5.3912 Huy hiệu vàng10 Huy hiệu bạc31 Huy hiệu đồng2 gold badges10 silver badges31 bronze badges2 gold badges10 silver badges31 bronze badges

    2

    Tôi tự hỏi làm thế nào icecream giải quyết vấn đề này. Vì vậy, tôi đã xem xét mã nguồn và đưa ra giải pháp sau (hơi đơn giản). Nó có thể không phải là 100% chống đạn (ví dụ: tôi đã bỏ

    import inspect
    
    def foo(a, f, b):
        frame = inspect.currentframe()
        frame = inspect.getouterframes(frame)[1]
        string = inspect.getframeinfo(frame[0]).code_context[0].strip()
        args = string[string.find('(') + 1:-1].split(',')
        
        names = []
        for i in args:
            if i.find('=') != -1:
                names.append(i.split('=')[1].strip())
            
            else:
                names.append(i)
        
        print names
    
    def main():
        e = 1
        c = 2
        foo(e, 1000, b = c)
    
    main()
    
    1 và tôi cho rằng chính xác một đối số chức năng), nhưng nó hoạt động tốt cho các trường hợp thử nghiệm khác nhau. Nó không cần phải phân tích mã nguồn, vì vậy nó sẽ mạnh mẽ và đơn giản hơn các giải pháp trước đây.
    func(foobar)
    
    6

    Output:

    func(foobar)
    
    7

    Cập nhật: Nếu bạn muốn di chuyển "ma thuật" vào một chức năng riêng biệt, bạn chỉ cần phải quay lại một khung hình trở lại với một

    import inspect
    
    def foo(a, f, b):
        frame = inspect.currentframe()
        frame = inspect.getouterframes(frame)[1]
        string = inspect.getframeinfo(frame[0]).code_context[0].strip()
        args = string[string.find('(') + 1:-1].split(',')
        
        names = []
        for i in args:
            if i.find('=') != -1:
                names.append(i.split('=')[1].strip())
            
            else:
                names.append(i)
        
        print names
    
    def main():
        e = 1
        c = 2
        foo(e, 1000, b = c)
    
    main()
    
    2 bổ sung.
    func(foobar)
    
    8

    Đã trả lời ngày 15 tháng 5 năm 2021 lúc 10:34May 15, 2021 at 10:34May 15, 2021 at 10:34

    FalkofalkoFalkoFalko

    16.4K13 Huy hiệu vàng54 Huy hiệu bạc101 Huy hiệu đồng13 gold badges54 silver badges101 bronze badges13 gold badges54 silver badges101 bronze badges

    1

    Đã trả lời ngày 1 tháng 5 năm 2010 lúc 12:13

    func(foobar)
    
    9

    Ivo Wetzelivo Wetzel

    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    0

    45,9K15 Huy hiệu vàng97 Huy hiệu bạc110 Huy hiệu đồng

    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    1

    Để thêm vào câu trả lời của Michael Mrozek, bạn có thể trích xuất các tham số chính xác so với toàn bộ mã bằng cách:Feb 21, 2020 at 18:31Feb 21, 2020 at 18:31

    1

    Đã trả lời ngày 7 tháng 10 năm 2014 lúc 16:10

    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    2

    Đã trả lời ngày 19 tháng 3 năm 2019 lúc 0:51Mar 19, 2019 at 0:51Mar 19, 2019 at 0:51

    CamioncamionCamionCamion

    1.1447 Huy hiệu bạc21 Huy hiệu đồng7 silver badges21 bronze badges7 silver badges21 bronze badges

    Nếu nó xảy ra như vậy là biến có thể gọi được (hàm), nó sẽ có thuộc tính

    import inspect
    
    def foo(a, f, b):
        frame = inspect.currentframe()
        frame = inspect.getouterframes(frame)[1]
        string = inspect.getframeinfo(frame[0]).code_context[0].strip()
        args = string[string.find('(') + 1:-1].split(',')
        
        names = []
        for i in args:
            if i.find('=') != -1:
                names.append(i.split('=')[1].strip())
            
            else:
                names.append(i)
        
        print names
    
    def main():
        e = 1
        c = 2
        foo(e, 1000, b = c)
    
    main()
    
    3.

    Ví dụ. một trình bao bọc để ghi lại thời gian thực hiện của một hàm:

    def log(soup):
        f = open(varname+'.html', 'w')
        print >>f, soup.prettify()
        f.close()
    
    3

    Đã trả lời ngày 13 tháng 1 lúc 4:45Jan 13 at 4:45Jan 13 at 4:45

    David Gilbertsondavid GilbertsonDavid GilbertsonDavid Gilbertson

    3.7901 Huy hiệu vàng21 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge21 silver badges30 bronze badges1 gold badge21 silver badges30 bronze badges

    1

    Làm thế nào để bạn có được tên chức năng và đối số trong Python?

    Để trích xuất số và tên của các đối số từ một hàm hoặc hàm [một cái gì đó] để trả về ("arg1", "arg2"), chúng tôi sử dụng mô -đun kiểm tra. Mã đã cho được viết như sau bằng cách sử dụng mô -đun kiểm tra để tìm các tham số bên trong các hàm amethod và foo.use the inspect module. The given code is written as follows using inspect module to find the parameters inside the functions aMethod and foo.use the inspect module. The given code is written as follows using inspect module to find the parameters inside the functions aMethod and foo.

    Tên biến được sử dụng bởi một hàm để nhận giá trị được chuyển là gì?

    Dữ liệu được truyền cho hàm được gọi là các tham số "thực tế".Các biến trong hàm nhận dữ liệu được truyền được gọi là các tham số "chính thức".formal" parameters.formal" parameters.

    * Kwargs trong Python là gì?

    ** KWARGS cho phép chúng tôi chuyển một số lượng các đối số từ khóa cho chức năng Python.Trong hàm, chúng tôi sử dụng Double-Sasterisk (**) trước tên tham số để biểu thị loại đối số này.allows us to pass a variable number of keyword arguments to a Python function. In the function, we use the double-asterisk ( ** ) before the parameter name to denote this type of argument.allows us to pass a variable number of keyword arguments to a Python function. In the function, we use the double-asterisk ( ** ) before the parameter name to denote this type of argument.

    Làm thế nào để các đối số được thông qua trong Python bằng cách tham chiếu hoặc theo giá trị?

    Tất cả các tham số (đối số) trong ngôn ngữ Python được truyền qua tham chiếu.Điều đó có nghĩa là nếu bạn thay đổi những gì một tham số đề cập đến trong một hàm, thay đổi cũng phản ánh lại trong hàm gọi.by reference. It means if you change what a parameter refers to within a function, the change also reflects back in the calling function.by reference. It means if you change what a parameter refers to within a function, the change also reflects back in the calling function.