Могу ли я использовать уравнение в качестве параметра в Python - PullRequest
1 голос
/ 11 октября 2019

Я делаю программу для создания графиков на python, и мне нужно передать уравнение в качестве параметра функции (по мере необходимости для создания графика), и в этом уравнении мне нужны переменные, которые меняются во время работы функции.

Спасибо за то, что помогли мне с благодарностью.

Я пытался найти решения, но я не настолько хорош, поэтому я не понимаю и каково это, если вы можете объяснить.

#inside a class and this is also simplified.
def function(self, e):
    x = 0
    for i in range(100):
        print(e)
        x += 1

classObj.function(x * 2)


Я ожидаю, что вы сможете добавить переменную x в параметр e, чтобы я мог сделать ее более гибкой, но эта переменная создает функции для цикла.

Ответы [ 3 ]

2 голосов
/ 11 октября 2019

Я не уверен, правильно ли я понял ваш вопрос, но в Python вы можете передать функцию в качестве параметра. Чтобы описать это, мы говорим, что функции являются гражданами первого класса или что язык поддерживает функции более высокого порядка.

Вот пример того, как вы можете достичь этого:

class YourClass:
    def function(self, e):
        x = 0
        for i in range(100):
            result = e(x)  # you can call a function passed as a parameter
            print(result)  # do something with a result
            x += 1


def multiply_by_2(x):
    return x * 2


def add_2(x):
    return x + 2


obj = YourClass()
obj.function(multiply_by_2)  # just use function name without parenthesis
obj.function(add_2)  # you can also pass different function!
2 голосов
/ 11 октября 2019

Выражения аргумента оцениваются перед вызовом функции.

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

def function(self, f):
    for i in range(100):
        print(f(i))

classObj.function(lambda x: x * 2)
0 голосов
/ 11 октября 2019

Поскольку вы не определили x, вы получите сообщение об ошибке при вызове classObj.function(). Вы можете передать уравнение в виде строки и вызвать exec() или eval().

Например:

def function(self, e):
    x = 0
    for i in range(100):
        print(exec(e))
        print(eval(e))# does same thing as above line
        x += 1

classObj.function("x * 2")

Разница между eval() и exec() равначто eval() только eval использует одно выражение, но exec() может запускать большие куски кода. Я рекомендую использовать только то, что необходимо, поэтому exec() будет излишним.

Может быть, вы увидите этот пост о передаче выражений в функции, но я не уверен, что вы этого хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...