Как отличить переменную, переданную в качестве входных данных в жестко закодированную функцию, от локально определенной переменной?

Если бы у меня был:

      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

Если бы это помогло.

Другие вопросы по тегам