鉴于我有一个模块的代码对象,我如何获得相应的模块对象?
它看起来像是moduleNames = {}; exec code in moduleNames非常接近我想要的东西.它将模块中声明的全局变量返回到字典中.但是,如果我想要实际的模块对象,我该如何获得它?
编辑:看起来你可以滚动自己的模块对象.模块类型不方便记录,但您可以执行以下操作:
import sys
module = sys.__class__
del sys
foo = module('foo', 'Doc string')
foo.__file__ = 'foo.pyc'
exec code in foo.__dict__
Run Code Online (Sandbox Code Playgroud) 所以我目前正在研究一种新的编程语言.受并发编程和Haskell的启发,该语言的主要目标之一是管理副作用.或多或少,每个模块都需要指定它允许的副作用.所以,如果我正在制作游戏,那么图形模块将无法执行IO.输入模块无法绘制到屏幕上.AI模块必须是完全纯净的.游戏的脚本和插件可以访问非常有限的IO子集来读取配置文件.等等.
然而,副作用的构成并不明确.我正在寻找有关我可能想用我的语言考虑的主题的任何想法或建议.这是我目前的想法.
一些副作用是明显的.无论是打印到用户控制台还是发射导弹,任何读取或写入用户拥有文件或与外部硬件交互的操作都会产生副作用.
其他更微妙,这些是我真正感兴趣的.这些是诸如获取随机数,获得系统时间,睡眠线程,实现软件事务存储器,甚至是非常基本的东西,如分配内存.
与其他用于控制副作用的语言(看着你的Haskell)不同,我想设计我的语言是务实和实用的.对副作用的限制应该有两个目的:
考虑到这一点,如上所述,我应该如何处理"伪"边效应,如随机数和睡眠?还有什么我可能错过的?我可以通过哪些方式管理内存使用和资源时间?
我有一个需要一些配置文件的项目.我想在存储库中保留默认配置文件.但是,我希望不必为每次提交都指定-X标志.是否有标准方法将一组修订文件标记为永久性地从提交中排除?
我遇到了一个奇怪的IE特定错误.似乎在使用document.createElement创建无线电输入时,生成的小部件不会响应点击.当您点击它们时,它们会灰显一秒,但它们不会被检查.它在FF3中按预期工作,但在IE7中没有.知道这是怎么回事?
<html>
<body>
<form>
<div id="foo">
</div>
</form>
<script>
var foo = document.getElementById('foo');
var t = document.createElement('input');
t.type='radio';
t.name ='fool';
var f = document.createElement('input');
f.type='radio';
f.name ='fool';
foo.appendChild(t);
foo.appendChild(f);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我在文档中看到,有一种__deepcopy__方法可用于扩展deepcopy内置类型之外的行为.但是,NamedTuple(typing模块中的类版本)的文档没有提及任何相关内容.但是因为它提供了哈希和相等测试的默认值,我想知道它是否也提供了深度复制的默认值?
python ×2
bytecode ×1
deep-copy ×1
haskell ×1
javascript ×1
mercurial ×1
python-3.x ×1
side-effects ×1