Python 函数和装饰器(包装器)中的括号
Parentheses in Python's functions and decorators(wrappers)
感谢阅读我的问题。由于我对Python还是个新手,我想问一下Python中的()。
def addOne(myFunc):
def addOneInside():
return myFunc() + 1
return addOneInside # <-----here is the question
@addOne
def oldFunc():
return 3
print oldFunc()
请注意,在第四行,虽然程序 returns 是一个函数,但它不需要括号()。为什么它没有出现语法错误错误?非常感谢您提前的回答!
圆括号用于 运行 函数,但没有括号,名称仍然像变量一样引用函数。
return myFunc() + 1
这将计算 myFunc
函数,将其值加 1,然后 return 该值。需要括号才能使函数 运行 和 return 成为一个数值。
return addOneInside
这实际上并不是运行宁addOneInside
,它只是return将函数作为变量。您可以将其分配给另一个名称并将其存储以备后用。理论上你可以这样做:
plusOne = addOneInside
plusOne()
它实际上会调用 addOneInside
函数。
您最初问题中的特定实例称为装饰器,它是您对传递给函数的参数执行代码的一种方式。你的例子不是很实用,但我可以修改它来展示一个简单的用例。
假设您只想将正数传递给您的函数。如果 myFunc
传递了一个负数,您希望将其更改为 0。您可以使用这样的装饰器来管理它。
def addOne(myFunc):
def addOneInside(num):
if num < 0:
num = 0
return myFunc(num)
return addOneInside # <-----here is the question
@addOne
def oldFunc(number):
return number
解释一下,@addOne
是装饰器语法,它附加了addOneInside
函数,当你调用它时,它会在oldFunc
的argument/s上被调用。所以现在这里有一些示例输出:
oldFunc(-12)
>>> 0
oldFunc(12)
>>> 12
现在您可以向 oldFunc
添加独立于参数解析逻辑运行的逻辑。您还可以相对轻松地更改允许的参数。也许还有一个最大上限可以达到,或者您希望它记录或注意该值不应该为负数。您还可以将此装饰器应用于多个函数,它会对所有函数执行相同的操作。
This blogpost 为我解释了很多,所以如果此信息太简短而不清楚,请尝试阅读那里的详细解释。
您在函数 addOne()
中的缩进不正确(我已修复),但我认为这不是您的问题。
如果您使用的是 Python3,那么 print
是一个函数,必须这样调用:
print(oldFunc())
感谢阅读我的问题。由于我对Python还是个新手,我想问一下Python中的()。
def addOne(myFunc):
def addOneInside():
return myFunc() + 1
return addOneInside # <-----here is the question
@addOne
def oldFunc():
return 3
print oldFunc()
请注意,在第四行,虽然程序 returns 是一个函数,但它不需要括号()。为什么它没有出现语法错误错误?非常感谢您提前的回答!
圆括号用于 运行 函数,但没有括号,名称仍然像变量一样引用函数。
return myFunc() + 1
这将计算 myFunc
函数,将其值加 1,然后 return 该值。需要括号才能使函数 运行 和 return 成为一个数值。
return addOneInside
这实际上并不是运行宁addOneInside
,它只是return将函数作为变量。您可以将其分配给另一个名称并将其存储以备后用。理论上你可以这样做:
plusOne = addOneInside
plusOne()
它实际上会调用 addOneInside
函数。
您最初问题中的特定实例称为装饰器,它是您对传递给函数的参数执行代码的一种方式。你的例子不是很实用,但我可以修改它来展示一个简单的用例。
假设您只想将正数传递给您的函数。如果 myFunc
传递了一个负数,您希望将其更改为 0。您可以使用这样的装饰器来管理它。
def addOne(myFunc):
def addOneInside(num):
if num < 0:
num = 0
return myFunc(num)
return addOneInside # <-----here is the question
@addOne
def oldFunc(number):
return number
解释一下,@addOne
是装饰器语法,它附加了addOneInside
函数,当你调用它时,它会在oldFunc
的argument/s上被调用。所以现在这里有一些示例输出:
oldFunc(-12)
>>> 0
oldFunc(12)
>>> 12
现在您可以向 oldFunc
添加独立于参数解析逻辑运行的逻辑。您还可以相对轻松地更改允许的参数。也许还有一个最大上限可以达到,或者您希望它记录或注意该值不应该为负数。您还可以将此装饰器应用于多个函数,它会对所有函数执行相同的操作。
This blogpost 为我解释了很多,所以如果此信息太简短而不清楚,请尝试阅读那里的详细解释。
您在函数 addOne()
中的缩进不正确(我已修复),但我认为这不是您的问题。
如果您使用的是 Python3,那么 print
是一个函数,必须这样调用:
print(oldFunc())