相关疑难解决方法(0)

如何在许多文件中导入常量

我有一个包含许多模块的包.每个模块使用我在每个文件中独立定义的常量.但是,所有这些常量必须相互一致.所以我尝试在一个文件中定义它们并将其导入每个文件中.当我运行它时,我找不到常量的常量错误.

他们是一个干净的方式让一个文件由许多其他人导入并包含常量?

谢谢你的帮助

python import package

5
推荐指数
1
解决办法
8704
查看次数

修改locals()或frame.f_locals中的* existing *变量

我发现了与此问题相关的一些模糊的问题,但没有找到任何针对CPython的干净且特定的解决方案。我认为“有效”解决方案是特定于解释器的。

首先,我认为我了解:

  • locals() 给出了不可修改的字典。
  • 函数可以(并且确实确实)使用某种优化来访问其局部变量
  • frame.f_locals给出了locals()类似的字典,但不太容易通过hackhacking exec。或至少我没有能力做些骇人听闻的未证明的事情,例如locals()['var'] = value ; exec ""
  • exec 能够对局部变量做一些奇怪的事情,但它并不可靠-例如,我读到某处它在Python 3中不起作用。未经测试。

因此,我了解到,鉴于这些限制,向局部变量添加额外的变量永远是不安全的,因为这会破坏解释器的结构。

但是,应该可以更改已经存在的变量,不是吗?

我考虑过的事情

  • 在一种功能中f,可以访问f.func_code.co_nlocalsf.func_code.co_varnames
  • 在一个框架中,可以通过访问/检查/读取变量frame.f_locals。这是通过设置跟踪器的用例sys.settrace
  • 可以很容易地访问框架所在的功能-结合使用设置跟踪的用例,并使用它在给定触发器或任何给定局部变量的情况下“执行操作”。

变量应该在某个地方,最好是可写的...但是我找不到它。即使它是一个数组(用于有效的解释器访问),或者我需要一些额外的C特定接线,我也准备提交。

如何从跟踪函数或修饰的包装函数或类似的东西实现对变量的修改?

完整的解决方案当然会受到赞赏,但即使是某些指针也会对我有很大帮助,因为我在这里遇到了很多不可写的字典:-/


编辑:hackish的exec是做这样的事情还是

python cpython

5
推荐指数
2
解决办法
931
查看次数

sys.modules[__name__] = _classname()。它实际上有什么作用?

我正在阅读这个问题中提到的 Alex Martelli 的这段代码。我知道这告诉你你当前所在的模块,但是他末尾的这行代码确实让我感到困惑。在文件末尾声明当前模块的语句的含义和意义是什么?sys.modules[__name__]constant.py

# Put in const.py...:
class _const:
    class ConstError(TypeError): pass
    def __setattr__(self,name,value):
        if self.__dict__.has_key(name):
            raise self.ConstError, "Can't rebind const(%s)"%name
        self.__dict__[name]=value
import sys
sys.modules[__name__]=_const() #this I don't understand
# that's all -- now any client-code can
import const
Run Code Online (Sandbox Code Playgroud)

基本上,我的问题是,在我看来,这行代码没有做任何事情;我理解错了吗?由于在 Python 中,您不必将类定义放在单独的文件中,因此我认为我并不真正需要两个模块,除非我想重用“const”类。那么在这种情况下sys.moldules[__name__]=_const()也没有必要......我理解正确吗?

python

5
推荐指数
1
解决办法
5205
查看次数

用C语言编写的Python模块中的常量整数属性

我根据https://docs.python.org/3.3/extending/extending.html在C中实现了一个python扩展模块

现在我想在该模块中有整数常量,所以我做了:

module= PyModule_Create(&myModuleDef);
...
PyModule_AddIntConstant(module, "VAR1",1);
PyModule_AddIntConstant(module, "VAR2",2);
...
return module;
Run Code Online (Sandbox Code Playgroud)

这有效.但我可以修改python中的"常量",比如

import myModule
myModule.VAR1 = 10
Run Code Online (Sandbox Code Playgroud)

我试图重载__setattr__,但在赋值时不调用此函数.

有解决方案吗?

c python module constants

3
推荐指数
1
解决办法
73
查看次数

Python是否支持由解释器强制执行的常量?

可能重复:
在Python中创建常量

Python是否支持由解释器强制执行的常量?例如:整数常量.程序员如何定义枚举类型?

python constants

1
推荐指数
1
解决办法
369
查看次数

在python中测试可变性

我正在做一个简单的测试以验证可变性我有一个变量 var

我想验证=赋值运算符是否正在为此更改相同存储位置的值

var = 1

要打印var我的 地址

hex(id(var))它给了我'0x1b65158'然后我分配了新值,var = 2但现在hex(id(var))更改为'0x1b65140'如果它更改了相同的位置,应该返回相同的值吗?请解释

注意:我不想做这里提到的相同任务。我试图了解它是如何可变分配的。而且我不想在这里创建常量。

python mutable

0
推荐指数
1
解决办法
76
查看次数

标签 统计

python ×6

constants ×2

c ×1

cpython ×1

import ×1

module ×1

mutable ×1

package ×1