Bài viết đăng tại: https://programming.laptrinh.site
Hướng dẫn này sẽ thảo luận về một số phương pháp để nhanh chóng nhận được chi tiết lệnh gọi hàm bằng Python. Điều này đặc biệt hữu ích khi phân tích một cơ sở mã lớn và việc tìm ra chức năng đang thực hiện trong nháy mắt trở nên khó khăn.
Thay vì quay đi quay lại mã, chúng tôi có các giải pháp thông minh hơn cho vấn đề chính xác này bằng cách sử dụng các hàm và bộ trang trí signature()
.
Sử dụng signature()
để nhận chi tiết cuộc gọi chức năng trong Python
Cách dễ nhất để lấy thông tin này là sử dụng inspect.signature()
. Tài liệu dành cho Python 3.5+ khuyến nghị sử dụng chức năng này.
inspect.signature()
chấp nhận nhiều loại có thể gọi được. Điều này bao gồm các hàm, lớp và các đối tượng functools.partial()
.
Hàm trả về chú thích có thể gọi được. Nếu không có chữ ký nào được cung cấp, hàm sẽ tạo ra ValueError
; nếu loại đối tượng không được hỗ trợ, nó sẽ phát sinh TypeError
.
Mã ví dụ:
import inspect
def foo (x, y, a = "anything" ):
pass
print (inspect . signature(foo))
Nó sẽ in phần sau trên thiết bị đầu cuối của bạn.
(x, y, a="anything")
Sử dụng Trình trang trí để nhận chi tiết cuộc gọi chức năng trong Python
Các hàm trong Python có một vài thuộc tính mà chúng ta có thể sử dụng. Trong số các thuộc tính này là __code__
.
Thuộc tính __code__
còn có các thuộc tính mà chúng ta có thể sử dụng. Dưới đây, bạn có thể tìm thấy từng người trong số họ được liệt kê, giải thích những gì họ làm.
Bên dưới đó, chúng tôi sẽ bao gồm một đoạn mã để viết chức năng của bạn có thể thực hiện tác vụ này. Chúng ta sử dụng thuộc tính __name__
để lấy tên hàm.
-
co_varnames
trả về một bộ tên của các đối số được truyền cho hàm và các biến cục bộ được sử dụng bên trong hàm. -
co_argcount
trả về số đối số. Tuy nhiên, số lượng này không bao gồm các đối số chỉ có từ khóa (kwargs
),*args
và**args
.Chúng tôi đã bao gồm một cách để in tất cả các đối số này trong đoạn mã của chúng tôi.
def get_func_dets(func):
# the point of using argcount is to ensure we only get
argument_names = func.__code__.co_varnames[:func.__code__.co_argcount]
func_name = func.__name__
# getting variable length arguments and keyword arguments
def inner_fun(*args, **kwargs):
print(func_name, "(", end = "")
print(", ".join('%s = %r' % ent
for ent in zip(argument_names, args[:len(argument_names)])), end=", ")
print("args = ", list(args[len(argument_names):]), end=",")
print("kwargs =", kwargs, end="")
print(")")
return inner_func
URL Link
https://laptrinh.site/nhan-chu-ky-chuc-nang/
Viết bởi Duy Mạnh. Đã đăng ký bản quyền tác giả tại Creativecommons và DMCA