Python:为什么我不能输入例如(x + 1)在def函数内部(在这里)?

时间:2018-09-19 16:20:23

标签: python python-3.x function user-defined-functions

def function(x+4):
    return (x*5)+3

SyntaxError:语法无效

那是为什么?我没有背后的逻辑? (我知道这是一个简单的问题,但我找不到答案。

我对我的问题有很多不清楚的反馈,对不起,因为英语不是我的母语,所以我不能简单地阐明我的问题:

虽然我正在了解返回的作用,但由于def function(x)= return codomain,所以我在逻辑f(x)= codomain的背后折衷了逻辑 但您知道数学中有一些函数,例如f(x + 2)= 5x + 3。我以为我可以在def函数上做同样的事情,问题是它给出了语法错误,我很好奇它背后的设计思想以及是否有替代的解决方案可以在代码中实现。感谢答案! / p>

2 个答案:

答案 0 :(得分:1)

由于您询问了该设计决策背后的逻辑,因此您希望该语法表现如何?请注意,x到处都是不一样的。以下是相同的:

x = 5
def f(x):
    return x
print(f(x))  # Prints 5

x = 5
def f(y):
    return y
print(f(x))  # Prints 5

这使您可以查看变量,而不必调试仅使用全局变量可能导致的混乱共享状态。

不过,回到您的问题, Python的其他地方没有添加运算符引起赋值(除非滥用dunder方法...不要那样做。因此,在您的假设f(x+4)中,x+4会发生什么?是应该将其作为x=x+4的占位符,还是应该将其分配给表示该函数“参数1”的一些空想的新变量?

让我们再深入一点。那么下面的例子呢?

def f(x+y):
    return x

突然,事情变得更加模棱两可。我们怎么称呼这个功能?我们使用f(1,2)吗?我们是否仅传递单个参数f(3)并猜测哪个部分对应于x,哪个部分对应于y?即使我们弄清楚了调用该函数的语义,语句x+y的实际作用是什么?它代表x=x+y吗?要y=x+y吗?要arg1=x+y吗?

Python不允许您描述的行为,从而使您的意图明确。要执行某项操作,您必须告诉Python实际执行该操作。在Python的Zen中,

  

显式优于隐式。

答案 1 :(得分:1)

这是您所建议的一种不太常见的语法,它根本不是Python语法或我所知道的任何语言的一部分。

尽管如此,您要做的事情归结为在将参数传递给函数之前对其进行更新。可以使用装饰器完成。

def add_four_to_argument(f):
    return lambda x: f(x + 4)


@add_four_to_argument
def func(x):
    return (x*5)+3

print(func(1)) # 28