Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在调用标识符时需要将函数分配给标识符?_Python_Function_Python 3.x - Fatal编程技术网

Python 为什么在调用标识符时需要将函数分配给标识符?

Python 为什么在调用标识符时需要将函数分配给标识符?,python,function,python-3.x,Python,Function,Python 3.x,我想举一个代码示例: def coun(n): count = 0 def counter(): nonlocal count if count < n: count += 1 return count return counter cntrl = coun(4) print(cntrl()) def con(n): 计数=0 def计数器(): 非局部计数 如果计数3。这个打字错误作为

我想举一个代码示例:

def coun(n):
    count = 0
    def counter():
        nonlocal count
        if count < n:
            count += 1
        return count
    return counter

cntrl = coun(4)
print(cntrl())  
def con(n):
计数=0
def计数器():
非局部计数
如果计数

为什么我们必须将函数分配给标识符,更进一步,在print语句中,cntrl是使用括号调用的,而在函数conn的return语句中,计数器不是使用括号返回的。这是什么?(我只是python的新手)

调用标识符并不需要将函数分配给标识符

考虑一个简单的例子:

def function_factory():
    def f(x):
        return x
    return f
您可以将工厂返回的函数分配给标识符,并将其用作任何其他命名函数:

my_f = function_factory()
assert my_f(1) == 1
或者,您可以删除中间赋值并在一行中完成:

assert function_factory()(1) == 1

不是

因为您正在执行
return counter
而不是
return counter()。您可以通过将其分配给变量来完成此操作,也可以使用通常的函数调用约定立即调用它:

print(coun(4)())

通过在函数后添加
()
来调用函数,如果不想调用函数(或任何其他东西),则不添加括号,在这种情况下,返回的是函数本身,而不是函数的返回值,其中as
cntrl=coun(4)
您正在调用
con
并获取它的返回值。
返回计数器()
立即调用该函数完全没有问题,完全无法在另一个函数中定义它,或者您可以执行
打印(cntrl)
要查看函数本身的表示,而不实际调用它。。。但我认为这里的标准是“当你想调用某个东西时,你可以调用它”,而不是其他任何地方。这实际上是一个包装函数。通过将外部函数分配给标识符调用外部函数,然后通过调用内部函数调用标识符。另一种方法是在另一个函数上方执行
@count
来包装它。从中了解有关包装器/装饰器的更多信息。名称绝对不是必需的<代码>(lambda x:x+1)(2)
->
3
。这个打字错误作为一个注释是有意义的,我不确定它是否真的属于你的答案。@杰克·艾德利,你的答案正好击中了我问题的头部,但是为什么在con(4)后面需要括号作为:print(con(4)()而不是作为:print(con(4))?因为
coun
返回一个函数
coun(4)
是一个函数,您需要调用一个函数来获得它的结果。调用函数的方式是在函数后面加括号。这与您需要将
(4)
放在
con
之后的位置完全相同。哇,谢谢!尽管如此,您能否解释一下为什么要使用assert语句以及为什么必须使用assert语句(如果在某些程序的特定代码中不使用assert语句的话)