Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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_Flask - Fatal编程技术网

python中状态和范围的更改

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页面函数访问全局

我正在使用python库和flask

我想打开一个页面“example.com”,然后按照链接打开“example.com/linked_page.html”

我的计划是使用如下请求会话(简化):


由于会话状态在函数中发生了更改,这将影响“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