关于范围的问题

我有一个全球课程。
在其中,我有一个类似的变量:
远程_device_enabled = bool
在一个模块中,我为globals.remote_device_enabled分配true/false。
设置后,此值永远不会改变。
在另一个模块中,在导入语句之后的顶部,我尝试了以下方式:
从全球进口 *
rde = globals.remote_device_enabled
这样,我认为我可以使用"如果RDE:"
但是,在功能中,我获得了不同的值。我是什么
误解?
我在模块的顶部尝试了此操作(但没有说话):
全球RDE
rde = globals.remote_device_enabled
当然,在函数中,使用相同两行的变量
代码将正确的值分配给RDE。
谢谢,
总数新手

# 回答1


新手也我认为您符合模块名称的全球资格。
在10/23/08,pat 来自 这里,
rde = <模块> .globals.remote_device_enabled
- -
问候,
lave
# 回答2


帕特·埃克里特:
不确定这是一个好主意,但是无论如何...
这节课 ?也许有更好的(或至少更惯用)
解决方案...
您可以显示实际代码吗?这确实会有所帮助。但是看来你的
" Globals"类主要是1/ A单例,2/用于应用
广泛的设置。那正确吗 ?
直接去上课?
请再次提供真实的代码。好吧...不一定是你的
整个代码,但至少可以最小的工作代码重现问题。

大会是使用较低的案例名称进行模块(和混合箱
类的名称)。这避免了同义词类和
模块...

没有足够的信息,我的水晶球要维修。对不起。
也许一些实际的代码可能会有所帮助? - )
在功能主体之外,"全局"陈述是一个无操作。在Python,
"全局"确实表示"模块级",因此在模块上定义的任何内容
水平已经尽可能全球化。
对不起,帕特,但是没有足够的背景让我们猜测是什么
错误的。很容易解决真实的代码,因此尝试
猜猜只是浪费时间。
# 回答3


Bruno Desthuilliers写道:
不确定这是一个好主意,但是无论如何...
这节课 ?也许有更好的(或至少更惯用)
解决方案...
您可以显示实际代码吗?这确实会有所帮助。但是看来你的
" Globals"类主要是1/ A单例,2/用于应用
广泛的设置。那正确吗 ?
直接去上课?
请再次提供真实的代码。好吧...不一定是你的
整个代码,但至少可以最小的工作代码重现问题。

大会是使用较低的案例名称进行模块(和混合箱
类的名称)。这避免了同义词类和
模块...

没有足够的信息,我的水晶球要维修。对不起。
也许一些实际的代码可能会有所帮助? - )
在功能主体外部,"全球" st 攻击是一个无障碍的。在Python,
"全局"确实表示"模块级",因此在模块上定义的任何内容
水平已经尽可能全球化。
对不起,帕特,但是没有足够的背景让我们猜测是什么
错误的。很容易解决真实的代码,因此尝试
猜猜只是浪费时间。

删除额外的变量和定义,这就是所有
有。
该技术是否 *正确 *编程是无关紧要的。我
只是想知道为什么范围无法像我想的那样工作。
- myglobals.py文件:
类myglobals():
远程_device_enabled = bool
---我的initialize.py文件:
从Myglobals Import *
defitialize():
myglobals.remote_device_enabled = true
---我的main.py文件:
从myglobals导入进口 *
rde = myglobals.remote_device_enabled
def main():
如果RDE:#这不会给我正确的价值
process_device()

# 回答4


帕特写道:2008年10月23日在星期四11:38:35 -0400:
好吧,这是你的第一个错误。在类中使用全局变量是没有的
比使用裸露的全局变量更好。它们仍然是全球的,那就是
一个问题:http://weblogs.asp.net/wallen/archiv...5/08/6750.aspx
如果Globals是一堂课,那将无法正常工作。我认为你的意思是全球
是一个模块。这仍然具有全球变量的所有缺点。
一切?
也许是时候回到基础知识并通过教程进行工作了。
在模块的顶部,"全局"关键字是一个no-op,因为
模块顶部的所有内容都已全局。
- -
史蒂文
# 回答5


帕特写道:
哦?
好吧,当然,如果愿意,您可以编写不良代码,并完成实际工作
更难。除非您来要求,否则没有皮肤
自由调试我们内心的善良。
使用称为类的类属性创建类myglobals
"远程_device_enabled"等于类Bool。
为什么不在这里初始化它呢?
为什么是类属性而不是实例属性?
创建一个名为" myglobals"的名称,该名称是该模块本地的。这是
绑定到由myglobals.py模块定义的相同的myglobals类。
将类属性remote_device_enabled设置为有用的值。
给出语法错误。
如果您在发送代码之前不会被烦恼测试,请
我不确定我是否会为您调试。
创建一个本地名称RDE,该名称从类中获取其初始值
属性remote_device_enabled。这可以更容易地写成:
rde = bool
自initialize()尚未被调用。
您的真实代码中正在发生其他明显的事情,因为遵循
您显示的程序逻辑(忽略语法),应该给出
正确的值:rde是布尔。出于幸运的事故,"如果布尔"评估
将调用为true和process_device()。
我建议您的意大利面条代码更加复杂,您
还没有成功嘲笑最小的线程 monstrates
问题。
- -
史蒂文
# 回答6


帕特·埃克里特:
(剪)
这显然很重要。如果正确的话,它将起作用,您
不会在这里问! - )
<无关>
您正在将课程用作裸露的名称空间。 FWIW,您也可以使用
模块本身 - 相同的效果,最简单的代码。

我认为第一个"导入"是错字。但这肯定意味着你没有
运行该代码。
对于"正确值"的定义?您没有导入或执行
到目前为目
目的。 fwiw,请注意, *在 *分配后调用初始化 *
RDE不会改变RDE仍将被绑定到布尔的事实
类型对象。
<无关>
您可能想看看其他Python应用程序如何管理
范围内的设置。
# 回答7


在消息<01 ***************************************************************************************************************************************************>
写道:
Singleton课。
# 回答8


在2008-10-24T01:08:12Z,pat 如果您 *真的 *想这样组织您的设置,我可以建议:
- myglobals.py文件:
#这无非是创建一个占位符
remote_device_enabled = none
---我的initialize.py文件:
导入myglobals
defitialize():
myglobals.remote_device_enabled = true
---我的main.py文件:
导入myglobals
导入初始化
初始化initialize()
def main():
如果myglobals.remote_device_enabled:
process_device()
- -
柯克·斯特劳瑟(Kirk Strauser)
一天公司
# 回答9


史蒂文·达·阿普拉诺(Steven D'Aprano)写道:
好吧,这是你的第一个错误。在类中使用全局变量是没有的
比使用裸露的全局变量更好。它们仍然是全球的,那就是
一个问题:http://weblogs.asp.net/wallen/archiv...5/08/6750.aspx
这取决于情况。
在我的程序中,我有一个例程,该程序加载了一堆文件,
初始化许多变量。之后,在
全球课程永远不会改变。维护这种类型的
代码比传递相同的变量从功能到函数到
功能。
另一方面,如果多个函数愿意改变
全球变量然后全球变量将是一场维护噩梦。
单方面指出,全球群体始终是"邪恶"的边界
主观的宗教信仰。

标签: python

添加新评论