什么';python内部函数定义中的变量是什么?
在view.generic.base中的视图的django中有类定义什么';python内部函数定义中的变量是什么?,python,django,function,class,symbols,Python,Django,Function,Class,Symbols,在view.generic.base中的视图的django中有类定义 class View(object): ... def as_view(cls, **initkwargs): """ Main entry point for a request-response process. """ ... def view(request, *args, **kwargs):
class View(object):
...
def as_view(cls, **initkwargs):
"""
Main entry point for a request-response process.
"""
...
def view(request, *args, **kwargs):
self = cls(**initkwargs)
if hasattr(self, 'get') and not hasattr(self, 'head'):
self.head = self.get
self.request = request
self.args = args
self.kwargs = kwargs
return self.dispatch(request, *args, **kwargs)
# take name and docstring from class
update_wrapper(view, cls, updated=())
# and possible attributes set by decorators
# like csrf_exempt from dispatch
update_wrapper(view, cls.dispatch, assigned=())
return view
它应该返回类似于视图的函数(请求、*args、**kwargs)。
请注意,“def view”中有一个变量,即“cls”
假设我们运行:
tmp=View.as_View(),tmp(请求、*args、**kwargs)如何知道cls的值
这是简化的情况强> 像这样说python代码:
>>> def func1(a):
... def func2(b):
... c = a + b
... print c
... return func2
...
>>> func3 = func1(3)
>>> func3(1)
4
>>> func4 = func1(4)
>>> func3(1)
4
>>> func4(1)
5
>>> func3.a=5
>>> func3(1)
4
>>> func1.a=5
>>> func3(1)
4
func3的def中的“a”实际上是什么?func3是如何得到它的
更新1: 谢谢你的回答。这个问题没有完全表达出来 我想,当我们调用func3=func1(3)时,程序中有两个对象,func1的代码,func1的对象(符号表)被称为func1(3) 我的问题是:
func2
继续存在,范围内的任何变量以及从内部函数func2
引用的变量都将保持在范围内
因此,即使在func1
结束后,func2
也始终可以访问func1
中声明的任何变量(包括a
等函数参数)
当运行func2
时,a
的值将是传递给func1
以生成通过从另一个函数返回函数而创建的func2的特定实例的值
使用简化示例,只要func2
继续存在,范围内的任何变量以及从内部函数func2
引用的变量都将保持在范围内
因此,即使在func1
结束后,func2
也始终可以访问func1
中声明的任何变量(包括a
等函数参数)
当运行func2
时,a
的值将是您传递给func1
以生成func2
的特定实例的值。对于start,这里没有递归,我想您指的是内部函数定义。内部函数可以访问周围的作用域(也称为闭包)。当您获得函数func3
的副本时,它将有权访问外部函数中定义的变量,包括它在开始时被调用的参数,这里没有递归,我猜您指的是内部函数定义。内部函数可以访问周围的作用域(也称为闭包)。当您获得函数func3
的副本时,它将可以访问外部函数中定义的变量,包括调用它的参数让我解释一下代码的作用
>>> def func1(a):
... def func2(b):
... c = a + b
... print c
... return func2
...
这将创建一个函数func1
,返回另一个函数func2
func2
对于func1
>>> func3 = func1(3)
这将创建变量func3
,func3
的值为func2
。因此,当您打印func3
的值时,它将返回函数
>>> func3
<function func2 at 0x7fd29fcb66e0>
a
是局部变量,因此您无法访问它。当您调用func3
时,它将使用a
作为1
调用func2
>>> func3(1)
4
因此,这将调用func2(1)
,其中a
是本地func2
中的3
,让我解释一下您的代码的作用
>>> def func1(a):
... def func2(b):
... c = a + b
... print c
... return func2
...
>>> func3.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'a'
这将创建一个函数func1
,返回另一个函数func2
func2
对于func1
>>> func3 = func1(3)
这将创建变量func3
,func3
的值为func2
。因此,当您打印func3
的值时,它将返回函数
>>> func3
<function func2 at 0x7fd29fcb66e0>
a
是局部变量,因此您无法访问它。当您调用func3
时,它将使用a
作为1
调用func2
>>> func3(1)
4
因此,这将调用func2(1)
,其中a
在本地func2
中是3
,我运行了相同的python程序,但做了一些更改:
>>> func3.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'a'
>>> def func1(a):
... def func2(b):
... c = a + b
... print c
... print a
... print b
... return func2
...
>>> func3 = func1(3)
>>> func3(1)
4
3
1
首先,当您调用fun1(3)时,fun1返回fun2,类似这样
2.现在,当您调用函数func3(1)时,实际上是在调用func2(1)
这就是它的工作方式:)我运行了相同的python程序,但做了一些更改:
>>> def func1(a):
... def func2(b):
... c = a + b
... print c
... print a
... print b
... return func2
...
>>> func3 = func1(3)
>>> func3(1)
4
3
1
首先,当您调用fun1(3)时,fun1返回fun2,类似这样
2.现在,当您调用函数func3(1)时,实际上是在调用func2(1)
这就是它的工作方式:)