Python самоанализ: вернуть аргумент функции в виде строки? - PullRequest
0 голосов
/ 06 апреля 2020

Вот что я хотел бы сделать

x = 1

f(x+3) # returns 'x+3' (a string)

Возможно ли это?

(Lisp и C могут это сделать, но f может быть макросом)

Ответы [ 2 ]

3 голосов
/ 24 апреля 2020

Это возможно, несмотря на то, что говорили другие. Единственный способ сделать это - проверить исходный код. Я не могу рекомендовать делать это в реальности. Это забавная маленькая игрушка.

from inspect import currentframe
import linecache
import re

def f(x):

    cf = currentframe()
    calling_line_number = cf.f_back.f_lineno

    calling_line = linecache.getline(__file__, calling_line_number)
    m = re.search(r"^.*?f\((?P<arg>.*?)\).*$", calling_line)
    if m:
        print (m.group("arg"))

x = 1
f(x + 3)

Prints x + 3, что и было передано функции f ().

0 голосов
/ 06 апреля 2020

Если значение, которое вы хотите добавить (3), является константой,

`def f(x):
    return f"{x}+3"

f(x)

Если это не так, вы можете передать два параметра,

def f(x, y):
    return f"{x} + {y}"

f(x, y)


...