python中状态和范围的更改
我正在使用python库和flask 我想打开一个页面“example.com”,然后按照链接打开“example.com/linked_page.html” 我的计划是使用如下请求会话(简化):python中状态和范围的更改,python,flask,Python,Flask,我正在使用python库和flask 我想打开一个页面“example.com”,然后按照链接打开“example.com/linked_page.html” 我的计划是使用如下请求会话(简化): 由于会话状态在函数中发生了更改,这将影响“main”(全局?)范围内的“s”值。在任何地方也有很好的讨论吗?这两个s变量彼此独立。。。。除非您使用global s否则get\u base\u page函数有自己的名称空间,因此这两个s变量之间不会有干扰 您可以从get\u base\u页面函数访问全局
由于会话状态在函数中发生了更改,这将影响“main”(全局?)范围内的“s”值。在任何地方也有很好的讨论吗?这两个
s
变量彼此独立。。。。除非您使用global s
否则get\u base\u page
函数有自己的名称空间,因此这两个s
变量之间不会有干扰
您可以从get\u base\u页面
函数访问全局变量。
但如果要为它们赋值,则需要将它们声明为global
。
否则,它们将在函数的本地名称空间中创建,就像在您的示例中一样
有关名称空间和范围(LEGB规则)的良好教程,请参阅文章
再次阅读您的问题,我认为我们需要澄清的一点是s
对象如何存储为d
字典中名为session
的键的值
现在启动python并执行以下操作(>>>是python提示符):
当您说s=3
时,您告诉python让s
名称指向/指示值3
。您没有覆盖值本身
现在,让我们对我们定义的类的泛型对象执行相同的操作:
>>> class A(object):
... def __init__(self, n):
... self.n = n
...
>>> s = A(42)
>>> d = {'session': s, 'key2': 8}
>>> d['session'].n
42
>>> s.n = 30
>>> d['session'].n
30
看到区别了吗?s
名称和会话
键指向/指示相同的对象实例。因此,当您更改其属性(通过任意一个名称访问它们)时,更改将同时影响这两个属性
有关不可变/可变对象,请参阅文章
使用所有python类型进行练习,看看会发生什么。玩得开心 谢谢你的解释!
>>> s = 42
>>> d = {'session': s, 'key2': 8}
>>> d
{'key2': 8, 'session': 42}
>>> s = 3
>>> d
{'key2': 8, 'session': 42}
>>> class A(object):
... def __init__(self, n):
... self.n = n
...
>>> s = A(42)
>>> d = {'session': s, 'key2': 8}
>>> d['session'].n
42
>>> s.n = 30
>>> d['session'].n
30