Python:为什么我可以';是否在def函数(此处)中输入例如(x+;1)?

Python:为什么我可以';是否在def函数(此处)中输入例如(x+;1)?,python,python-3.x,function,user-defined-functions,Python,Python 3.x,Function,User Defined Functions,SyntaxError:无效语法 为什么呢?我不明白背后的逻辑? (我知道这是一个简单的问题,但我找不到答案 关于我的问题,我得到了很多不明确的反馈,很抱歉,因为英语不是我的第一语言,我不能简单地澄清我的问题: 当我学习return的功能时,我用f(x)=codomain后面的逻辑作为def function(x)=return codomain来折衷逻辑 但正如你所知,数学中有函数,比如f(x+2)=5x+3。我想也许我可以在def函数上做同样的事情,问题是它给出了一个语法错误,我很好奇它背后

SyntaxError:无效语法

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

关于我的问题,我得到了很多不明确的反馈,很抱歉,因为英语不是我的第一语言,我不能简单地澄清我的问题:

当我学习return的功能时,我用f(x)=codomain后面的逻辑作为def function(x)=return codomain来折衷逻辑
但正如你所知,数学中有函数,比如f(x+2)=5x+3。我想也许我可以在def函数上做同样的事情,问题是它给出了一个语法错误,我很好奇它背后的设计思想,以及是否有其他解决方案可以在代码中实现它。谢谢你的回答!

既然你问到了设计决策背后的逻辑,你认为语法会是怎样的有吗?请注意,到处共享的
x
并不相同。以下是相同的:

def function(x+4):
    return (x*5)+3
这允许您范围变量,而不必调试独占使用全局变量可能导致的混乱共享状态

回到你的问题,在Python中,加法操作符不会导致赋值(除非滥用dunder方法……不要这样做),
x+4
会发生什么情况?它应该是
x=x+4
的占位符,还是应该分配给某个新变量,表示函数的“参数1”的某个空灵概念

让我们再深入一点。下面的例子怎么样:

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

x = 5
def f(y):
    return y
print(f(x))  # Prints 5
突然,事情变得更加模棱两可。我们如何调用这个函数?我们是否使用
f(1,2)
?我们是否只传递一个参数
f(3)
并猜测哪个部分对应于
x
,哪个部分对应于
y
?即使我们弄清楚调用这样一个函数的语义,语句
x+y
实际上做了什么?它代表
x=x+y
?代表
y=x+y
?代表
arg1=x+y

通过不允许您描述的行为,Python使您的意图变得清晰。要做一件事,您必须告诉Python实际做那件事。根据Python的禅宗

显式比隐式好


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

不过,您要做的可以归结为在参数传递给函数之前更新参数。这可以通过装饰器完成


你不能,它不是Python语法的一部分,只是没有意义。你为什么要这样做?参数必须是占位符。和变量一样。你能有一个变量名
x+4
?即你能做
x+4=3
?然后你调用
x+4
得到3吗?这是不合逻辑的。即使是常识也不允许这样做。当你ee
x+4=3
显然你应该为x求解。即使Python允许你这么做,为什么你会期望这两个函数是等价的?如果x=10,第二个函数返回73,但为了保持一致,第一个函数应该返回33。Haskell有些东西。你也可以使用currying。如果你真的想让它更灵活,你可以因此,创建一个函数,用传递给该函数的值返回装饰器。如下所示:
add=lambda b:lambda f:lambda x:f(x+b)
。这是当前的
add(4)(func)(1)#28
,但仍然是装饰器:
@add(4);func(x):…
def f(x+y):
    return x
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