Как отличить переменную, переданную в качестве входных данных в жестко закодированную функцию, от локально определенной переменной?
Если бы у меня был:
def my_func(x: str) -> void:
//
def my_caller_func()-> void
local_var = "xyz"
local_var_2 = "zzz"
my_func(x=local_var)
Я пытаюсь написать посетитель libcst, который обнаружит, что входное значение, переданное на вход x my_func, равно «xyz».
Это возможно?
1 ответ
Я думаю, вы можете обнаружить, что декоратор может сделать что-то вроде того, что вы хотите (ничего не зная оlibcst
). Кажется, вы хотите иметь возможность сделать «что-то» , если значение передано вmy_func()
является"xyz"
потенциально без измененийmy_funct()
.
Декоратор, кажется, отвечает всем требованиям...
def log_if_x_interesting(func):
def inner(x):
if x == "xyz":
print("interesting")
func(x=x)
return inner
@log_if_x_interesting
def my_func(x: str):
print(x)
def my_caller_func():
local_var = "xyz"
local_var_2 = "zzz"
my_func(x=local_var)
my_func(x=local_var_2)
my_caller_func()
Это должно дать вам:
interesting
xyz
zzz
Если бы это помогло.