Tên hàm python bên trong hàm

Cách Pythonic nhất để trích xuất tên từ bất kỳ đối tượng hoặc lớp nào là sử dụng thuộc tính __name__ của nó. Các thuộc tính được đặt trong hai dấu gạch dưới (thuộc tính dunder) cung cấp chức năng đặc biệt cho các lập trình viên Python. Ví dụ: gọi ________0____0 mang lại giá trị chuỗi ___________1

def your_function():
    pass


string_name = your_function.__name__

print(string_name)
# your_function

Tuy nhiên, có một trường hợp quan trọng mà phương pháp này sẽ thất bại

? . Trong Python, hàm là đối tượng. Bạn có thể tạo nhiều biến trỏ đến cùng một đối tượng trong bộ nhớ. Do đó, bạn có thể tạo hai tên

print(string_name)
# your_function
2 và
print(string_name)
# your_function
3 mà cả hai đều trỏ đến cùng một đối tượng hàm. Khi gọi
print(string_name)
# your_function
4, kết quả có thể là
print(string_name)
# your_function
3 thay vì
print(string_name)
# your_function
2 như bạn mong đợi

Điều này được thể hiện trong ví dụ tối thiểu sau đây

________số 8_______

Vì cả hai tên đều trỏ đến cùng một đối tượng bộ nhớ, nhưng

print(string_name)
# your_function
3 trỏ đến nó trước, nên tên của đối tượng là
print(string_name)
# your_function
3. Việc sử dụng bộ nhớ của mã này được hiển thị bằng công cụ Python Tutor

Tên hàm python bên trong hàm

Cả hai biến đều tham chiếu đến cùng một đối tượng hàm có giá trị mặc định là tên

print(string_name)
# your_function
3

Phương pháp 2. Sử dụng thuộc tính __qualname__

Để trích xuất tên từ bất kỳ đối tượng hoặc lớp nào, bạn cũng có thể sử dụng thuộc tính

def your_function():
    pass


string_name = your_function.__name__

print(string_name)
# your_function
0 của nó. Ví dụ, gọi
def your_function():
    pass


string_name = your_function.__name__

print(string_name)
# your_function
1 mang lại giá trị chuỗi
print(string_name)
# your_function
1. Bạn sẽ sử dụng
def your_function():
    pass


string_name = your_function.__name__

print(string_name)
# your_function
0 trên __name__ nếu bạn cũng cần một số ngữ cảnh, chẳng hạn như lớp xác định phương thức

Đoạn mã sau tạo một hàm và một phương thức bên trong một lớp. Sau đó, nó so sánh đầu ra của các thuộc tính __name__

def your_function():
    pass


string_name = your_function.__name__

print(string_name)
# your_function
0 cho cả hàm và lớp

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"

Bạn có thể tìm hiểu sâu hơn về các đặc điểm riêng của

def your_function():
    pass


string_name = your_function.__name__

print(string_name)
# your_function
0 tại đây và tại đây


cảm ơn đã đọc bài viết này. Để nâng cao kỹ năng Python của bạn, hãy cân nhắc tham gia học viện email Finxter miễn phí với nhiều cheat sheet, hướng dẫn Python và câu đố lập trình thú vị. 🙂

Tên hàm python bên trong hàm

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Trong bài viết này, chúng ta sẽ tìm hiểu cách lấy tên hàm và tầm quan trọng của nó trong lập trình Python

Tên hàm là một phần thiết yếu của lập trình Python. Chúng giúp chúng tôi giữ cho mã của chúng tôi được tổ chức và dễ đọc. Khi viết một hàm, chúng ta đặt tên cho nó để sau này tham khảo. Tên hàm giống như nhãn của hàm. Nó giúp chúng ta nhớ chức năng làm gì và làm cho mã của chúng ta dễ đọc hơn

Gọi hàm trong python

Khi chúng ta gọi một hàm, chúng ta sử dụng tên hàm theo sau dấu ngoặc đơn
Ví dụ: nếu chúng ta có một hàm tên my_func(), chúng ta sẽ gọi nó là my_func(). Các dấu ngoặc đơn là cần thiết vì chúng cho Python biết chúng ta muốn thực thi mã bên trong hàm

def func:
	print("Welcome to geekbits!!") 

func() # Calling the function.

Trả về Chào mừng bạn đến với geekbits

Python sẽ không thực thi mã bên trong hàm nếu chúng ta bỏ qua dấu ngoặc đơn khi gọi hàm
Nó có thể gây nhầm lẫn cho người mới bắt đầu, vì vậy hãy luôn bao gồm dấu ngoặc đơn khi gọi hàm

Quy ước đặt tên (tên hàm Python)

Tên hàm có thể có độ dài bất kỳ và chứa các chữ cái, số và dấu gạch dưới. Họ không thể bắt đầu bằng một số, mặc dù. Việc sử dụng tên mô tả cho các chức năng của chúng ta được coi là một thông lệ tốt để những người khác có thể dễ dàng hiểu mã của chúng ta làm gì

Chúng ta đã biết cách sử dụng hàm print() để in thông báo ra màn hình. Tham khảo bài viết này

https. //www. chuyên viên máy tính. io/python-print-chức năng/

Hãy xem cách chúng ta có thể lấy tên của hàm. Chúng ta có thể làm điều này bằng cách sử dụng biến __name__ tích hợp

Sử dụng biến __name__ trong python

Biến __name__ chứa tên của mô-đun hiện tại. Khi chúng tôi chạy một chương trình Python, biến __name__ được đặt thành

print("I am %s" %__name__)

def func():
    print ("This is file 1")

if __name__ == "__main__":
    func()
2. Nếu chúng tôi nhập một mô-đun, biến __name__ được đặt thành tên của mô-đun đó

Hãy xem cách nó hoạt động với hàm print(). Chúng ta có thể bắt đầu bằng cách tạo hai tệp python. tệp1 và tệp2

Trong file1, chúng ta sẽ định nghĩa hàm print()

print("I am %s" %__name__)

def func():
    print ("This is file 1")

if __name__ == "__main__":
    func()

trả lại

Tôi là _chính_

Đây là tập 1

Sau khi chạy chương trình này, biến __name__ được đặt thành

print("I am %s" %__name__)

def func():
    print ("This is file 1")

if __name__ == "__main__":
    func()
2. Đó là lý do tại sao câu lệnh if thực thi và "Đây là tệp 1" được in trong bảng điều khiển


Ở file2, chúng ta sẽ import module từ file1 và chạy chương trình

import file1

trả lại

tôi là tập tin1

Nhập mô-đun chạy chương trình từ mô-đun đã nhập

Như bạn có thể thấy, biến __name__ được đặt thành tên của mô-đun mà chúng tôi đã nhập. Trong trường hợp này, nó là file1. Tuy nhiên, câu lệnh if trong tệp1 thực thi vì biến __name__ không được đặt thành

print("I am %s" %__name__)

def func():
    print ("This is file 1")

if __name__ == "__main__":
    func()
2. Nó được đặt thành file1

Hãy thực hiện một số sửa đổi đối với file1 và chạy chương trình

import file2
print("I am %s" %__name__)

trả lại

tôi là tập tin1

Tôi là _chính_

Như bạn có thể thấy, Chạy chương trình này sẽ thực thi mô-đun đã nhập và sau đó là chức năng in. Biến __name__ được đặt thành

print("I am %s" %__name__)

def func():
    print ("This is file 1")

if __name__ == "__main__":
    func()
2, là tên của mô-đun hiện tại. Câu lệnh if trong file1 cũng không thực thi vì file1 không chạy trực tiếp. Điều này có nghĩa là biến __name__ không được đặt thành
print("I am %s" %__name__)

def func():
    print ("This is file 1")

if __name__ == "__main__":
    func()
2

Bây giờ chúng ta đã biết cách thức hoạt động của biến __name__, hãy xem cách chúng ta có thể sử dụng nó để biết tên của một hàm

Lấy tên hàm trong python. biến __name__

Chúng ta có thể sử dụng biến __name__ để lấy tên của bất kỳ chức năng nào, không chỉ các mô-đun đã nhập. Ví dụ: chúng ta có thể định nghĩa chức năng của mình và sau đó in tên của nó

def func():
	print("Hello from Geekbits")

print(func.__name__)

Chức năng trả về

Sau khi chạy chương trình này, chúng tôi thấy biến tên được đặt thành 'func'

Biến __name__ có thể rất hữu ích khi chúng ta muốn biết tên của hàm hiện đang thực thi. Ví dụ: giả sử chúng ta có một chương trình gọi hai hàm, func1() và func2()

def func1():
	print("Hello from func1()")


def func2():
	print("Hello from func2()")

    
func1()

func2()

Chúng ta có thể sử dụng biến __name__ để in tên của hàm đang thực thi

def func1():
	print(func1.__name__)
	print("Hello from func1()")


def func2():
	print(func2.__name__)
	print("Hello from func2()")


func2()

func1()

trả lại

chức năng2

Xin chào từ func2()

chức năng1

Xin chào từ func1()

Sau khi chạy chương trình này, chúng tôi thấy rằng biến __name__ được đặt thành 'func2' khi func2() được thực thi và 'func1' khi func1() được thực thi


Đây là một cách khác để làm điều tương tự

import sys

def func1():
	print(sys._getframe().f_code.co_name)
	print("Hello from func1()")


def func2():
	print(sys._getframe().f_code.co_name)
	print("Hello from func2()")


func2()

func1()

trả lại

chức năng2

Xin chào từ func2()

chức năng1

Xin chào từ func1()

Như bạn có thể thấy, biến __name__ có thể rất hữu ích cho mục đích gỡ lỗi. Nó có thể giúp chúng ta biết chức năng nào hiện đang được thực thi. Điều này rất hữu ích khi chúng ta đang làm việc với các chương trình lớn có nhiều chức năng

Phần kết luận

Trong bài viết này, chúng ta đã học cách lấy tên của một hàm bằng cách sử dụng biến __name__. Chúng tôi cũng đã thấy điều này có thể hữu ích như thế nào cho mục đích gỡ lỗi. Câu hỏi ??