Python函数参数中的数学符号?

Python Mathematical signs in function parameter?

我想知道是否有办法将数学符号添加到函数参数中。

def math(x, y, symbol):
      answer = x 'symbol' y
      return answer

这是我的意思的一个小例子。

编辑: 这是整个问题

def code_message(str_val, str_val2, symbol1, symbol2):
    for char in str_val:

        while char.isalpha() == True:
            code = int(ord(char))
            if code < ord('Z'):
                code symbol1= key
                str_val2 += str(chr(code))
            elif code > ord('z'):
                code symbol1= key
                str_val2 += str(chr(code))
            elif code > ord('A'):
                code symbol2= key
                str_val2 += str(chr(code))
            elif code < ord('a'):
                code symbol2= key
                str_val2 += str(chr(code))
            break
        if char.isalpha() == False:
            str_val2 += char
    return str_val2

我需要多次调用该函数,但有时第一个符号使用 +/-,第二个符号有时使用 +/-

原始代码:

def code_message(str_val, str_val2):
    for char in str_val:

        while char.isalpha() == True:
            code = int(ord(char))
            if code < ord('Z'):
                code -= key
                str_val2 += str(chr(code))
            elif code > ord('z'):
                code -= key
                str_val2 += str(chr(code))
            elif code > ord('A'):
                code += key
                str_val2 += str(chr(code))
            elif code < ord('a'):
                code += key
                str_val2 += str(chr(code))
            break
        if char.isalpha() == False:
            str_val2 += char
    return str_val2

使用相应的功能,来自operator模块:

from operator import add
def math(x, y, add):
      answer = add(x, y)
      return answer

您可以将数学符号传递给函数的唯一方法是在字符串模式下传递,然后您将遇到两个问题,同时计算符号和方程。所以当你处理数字时,你最好使用适当的函数来直接完成这项工作。

也可以使用字典将符号映射到对应的函数:

from operator import add, sub, mul
mapping = {"+": add, "-":sub, "*": mul}
def math(x, y, sym):
    try:
        f = mapping[sym]
    except KeyError:
        raise Exception("Enter a valid operator")
    else:
        answer = f(x, y)
        return answer

您不能将运算符传递给函数,但是您可以传递 operator 库中定义的运算符函数。因此,您的功能将类似于:

>>> from operator import eq, add, sub
>>> def magic(left, op, right):
...     return op(left, right)
...

例子:

# To Add
>>> magic(3, add, 5)
8
# To Subtract
>>> magic(3, sub, 5)
-2
# To check equality
>>> magic(3, eq, 3)
True

注意:我使用函数作为 magic 而不是 math 因为 math 是默认的 python 库并且它使用预定义关键字不是好的做法。

你应该首先考虑你必须使用answer = x symbol y而不是相反

然后关于符号的使用,您可以将函数作为参数发送。 对于基本运算符,您可以使用 operator 模块。

例如:

import operator

def math(x, y, function):
      return function(x, y)

math(4,5, operator.sub)

您将在文档中找到您需要的所有其他操作。

我很惊讶没有人提到 eval()。看下面的例子:

def function(operator1, operator2, symbol):
    return eval(str(operator1) + symbol + str(operator2))

print(function(2, 3, '+'))      # prints: 5
print(function(2, 3, '-'))      # prints: -1

# Of course you can also "chain" operations, e.g., for 4 + 5 - 6
result = function(function(4, 5, '+'), 6, '-')
print(result)                   # prints 3

# Finally, it also works with string input for the operands so you 
# can read them directly from e.g., user input with `input()`
print(function('2', '3', '+'))  # prints: 5