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_function2 và
print[string_name] # your_function3 mà cả hai đều trỏ đến cùng một đối tượng hàm. Khi gọi
print[string_name] # your_function4, kết quả có thể là
print[string_name] # your_function3 thay vì
print[string_name] # your_function2 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_function3 trỏ đến nó trước, nên tên của đối tượng là
print[string_name] # your_function3. Việc sử dụng bộ nhớ của mã này được hiển thị bằng công cụ Python Tutor
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_function3
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_function0 của nó. Ví dụ, gọi
def your_function[]: pass string_name = your_function.__name__ print[string_name] # your_function1 mang lại giá trị chuỗi
print[string_name] # your_function1. Bạn sẽ sử dụng
def your_function[]: pass string_name = your_function.__name__ print[string_name] # your_function0 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__
và
def your_function[]: pass string_name = your_function.__name__ print[string_name] # your_function0 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_function0 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ị. 🙂
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 file1Hã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[]
2Bâ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 ??