Nếu tôi hiểu chính xác bạn muốn viết tắt để in tên biến và giá trị của nó trong phạm vi hiện tại? Điều này nói chung là không thể mà không sử dụng chức năng theo dõi phiên dịch hoặc sys._getframe, mà nói chung chỉ nên được sử dụng nếu bạn biết những gì bạn đang làm. Lý do cho điều này là các chức năng in không có cách nào khác nhận được người dân địa phương từ phạm vi gọi:
def a():
x = 1
magic_print("x") #will not work without accessing the current frame
gì bạn có thể làm mà không có những được vượt qua một cách rõ ràng người dân địa phương đến một chức năng như thế này:
def printNameAndValue(varname, values):
print("%s=%s" % (varname, values[varname]))
def a():
x = 1
printNameAndValue("x", locals()) #prints 'x=1'
EDIT:
Xem câu trả lời bằng cách xác định mô-đun kiểm tra (sử dụng nội bộ sys._getframe).Cho đầy đủ một giải pháp sử dụng chức năng theo dõi trực tiếp - hữu ích nếu bạn đang sử dụng python 2.0 và kiểm tra không có sẵn;)
from sys import settrace
__v = {} #global dictionary that holds the variables
def __trace(frame, event, arg):
""" a trace function saving the locals on every function call """
global __v
if not event == "call":
return __trace
__v.update(frame.f_back.f_locals)
def enableTrace(f):
""" a wrapper decorator setting and removing the trace """
def _f(*a, **kwa):
settrace(__trace)
try:
f(*a, **kwa)
finally:
settrace(None)
return _f
def printv(vname):
""" the function doing the printing """
global __v
print "%s=%s" % (vname, __v[vname])
Save nó trong một mô-đun và sử dụng như thế này:
from modulenamehere import enableTrace, printv
@enableTrace
def somefunction():
x = 1
[...]
printv("x")
Python được nhập động, vì vậy câu trả lời ngắn gọn là "Có, tất nhiên!". Câu trả lời dài phụ thuộc vào những gì bạn đã thử, bạn có thể chia sẻ những gì bạn đã làm và những gì đã đi sai và những gì bạn mong đợi thay thế? –
Tôi đã thử nhiều thứ, đây là nơi tôi đang cố gắng in chuỗi và số dấu chấm động nhưng kết quả là in điểm nổi và không có chuỗi: – malby
def printme (a): b = '% s', a in b trả lại b – malby