Есть ли способ передать выражение без кавычек в качестве аргумента функции Python и иметь возможность работать с этим аргументом внутри функции? - PullRequest
0 голосов
/ 25 декабря 2018

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

И вот почему.

Я написал функцию, использующую механизм в matplotlib, который мы будем называть function_plot, который будет отображать функции, предоставляемые в качестве аргументов.Например, следующее

function_plot('sin(x)', -10, 10)` 

сделает график sin (x) от x = -10 до x = 10.

function_plot работает отлично.Единственная проблема заключается в том, что мои друзья-математики предпочитают передавать ему sin (x) без кавычек.

Я пытался переписать function_plot различными способами, чтобы исключить кавычки, но все, что я пробовал, не работает.

Один из подходов, который, как я думал, был обнадеживающим, состоял в том, чтобы передать sin (x) или просто sin без кавычек, захватить выражение внутри function_plot, поместить его в кавычки и затем продолжить в оригинальном порядке.Это происхождение моего запроса.

Но всякий раз, когда выражение, не заключенное в кавычки, передается функции, если выражение не является чем-то уже определенным, возникает ошибка «имя не известно».

Есть ли способ сделать то, что я хотел бы сделать, или должен просто сдаться?

1 Ответ

0 голосов
/ 25 декабря 2018

Вы можете использовать lambda выражения для построения функции inline.Например:

function_plot(lambda x: sin(x/2) + 1, -10, 10)

Затем в определении function_plot вы можете вызывать эту функцию для каждого значения в домене:

def function_plot(f, low, high):
    points = [(x, f(x)) for x in range(low, high+1)]
    # Do something with the points
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...