我有一个可信的远程服务器,存储许多自定义Python模块.我可以通过HTTP(例如使用urllib2.urlopen
)作为text/plain 获取它们,但是我无法将获取的模块代码保存到本地硬盘.如何将代码作为完全可操作的Python模块导入,包括其全局变量和导入?
我想我必须使用某些组合exec
和imp
模块的功能,但我还是无法让它工作.
我正在开发一个文档测试框架 - 基本上是PDF的单元测试.测试是框架定义的类实例的(修饰)方法,它们在运行时定位和实例化,并调用方法来执行测试.
我的目标是减少编写测试的人需要关注的古怪Python语法的数量,因为这些人可能是也可能不是Python程序员,甚至根本不是程序员.所以我希望他们能够为方法编写"def foo():"而不是"def foo(self):",但仍然可以使用"self"来访问成员.
在一个普通的程序中,我会认为这是一个可怕的想法,但在像这样的特定于域的语言类程序中,似乎值得一试.
我已经通过使用装饰器成功地从方法签名中消除了自我(实际上,因为我已经为测试用例使用了装饰器,我只是将其滚动到那个),但是"self"不会引用任何内容.测试用例方法.
我已经考虑过使用global for self,甚至提出了一个或多或少有效的实现,但我宁愿污染最小的命名空间,这就是为什么我更愿意将变量直接注入test case方法的本地命名空间.有什么想法吗?
是否可以在python中声明函数并在以后或在单独的文件中定义它们?
我有一些代码:
class tata:
def method1(self):
def func1():
# This local function will be only used in method1, so there is no use to
# define it outside.
# Some code for func1.
# Some code for method1.
Run Code Online (Sandbox Code Playgroud)
问题是代码变得混乱且难以阅读.所以我想知道是否有可能在func1
内部声明method1
并在以后定义它?
我有一些测试代码:
def num(num): def deco(func): def wrap(*args, **kwargs): inputed_num = num return func(*args, **kwargs) return wrap return deco @num(5) def test(a): return a + inputed_num print test(1)
运行此代码时,我得到一个错误,表明未定义 'inputed_num'
我的问题是:在wrap函数中,是不是func可以得到'inputed_num'的闭包?
无论如何,如果没有,我该如何实现我的目标: 初始化一些值,并在main函数中直接使用该值.
想.