想了解Python中的动态/运行时方法创建的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于代码生成的相关问题,此外,我们还将为您介绍关于python–AirflowDAG中的动态任务生成、p
想了解Python中的动态/运行时方法创建的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于代码生成的相关问题,此外,我们还将为您介绍关于python – Airflow DAG中的动态任务生成、python-2.7 – 处理由Python代码生成的C子进程导致的分段错误、Python3 代码在 Jupyter 和 iPython 中工作,但当我从命令行将它作为脚本运行时失败、Python中动态创建类实例的方法的新知识。
本文目录一览:- Python中的动态/运行时方法创建(代码生成)(python 动态生成代码)
- python – Airflow DAG中的动态任务生成
- python-2.7 – 处理由Python代码生成的C子进程导致的分段错误
- Python3 代码在 Jupyter 和 iPython 中工作,但当我从命令行将它作为脚本运行时失败
- Python中动态创建类实例的方法
Python中的动态/运行时方法创建(代码生成)(python 动态生成代码)
我需要在运行时为方法生成代码。能够运行任意代码并具有文档字符串非常重要。
我想出了一个结合exec
和的解决方案setattr
,这是一个虚拟的示例:
class Viking(object): def __init__(self): code = '''''' def dynamo(self, arg): """ dynamo''s a dynamic method! """ self.weight += 1 return arg * self.weight '''''' self.weight = 50 d = {} exec code.strip() in d setattr(self.__class__, ''dynamo'', d[''dynamo''])if __name__ == "__main__": v = Viking() print v.dynamo(10) print v.dynamo(10) print v.dynamo.__doc__
是否有更好/更安全/更惯用的方式获得相同的结果?
答案1
小编典典基于Theran的代码,但将其扩展为类的方法:
class Dynamo(object): passdef add_dynamo(cls,i): def innerdynamo(self): print "in dynamo %d" % i innerdynamo.__doc__ = "docstring for dynamo%d" % i innerdynamo.__name__ = "dynamo%d" % i setattr(cls,innerdynamo.__name__,innerdynamo)for i in range(2): add_dynamo(Dynamo, i)d=Dynamo()d.dynamo0()d.dynamo1()
应该打印:
in dynamo 0in dynamo 1
python – Airflow DAG中的动态任务生成
基本上我有一个任务,在python运算符中使用数据库钩子来生成列表.然后对于列表中的每个项目,我想使用python运算符执行任务,该项目作为参数传递给python函数.我可以使用某种模式来实现这一目标吗?
解决方法
让在python运算符中使用数据库钩子的任务生成列表“是控制器dag中的任务,并将列表中的每个项目传递给params部分中的trigger_dag.
您可以在气流安装的examples文件夹中找到参考
祝好运!
python-2.7 – 处理由Python代码生成的C子进程导致的分段错误
这是我的C代码.它旨在模拟分段错误.
Python代码的目的是将C程序作为子进程运行并捕获运行时错误(如果有的话).
int main() { int*a; a=NULL; cout<<*a<<endl; return 0; }
python代码如下:
from subprocess import * import signal def handler(signum,frame): print "Error Occured",signum raise IOError("Segmentation Fault Occured.") #The C++ code is already compiled a = Popen(["./a.out"]) try: signal.signal(signal.SIGSEGV,handler) except IOError as e: print e
当C代码直接在终端上运行时(不使用Python代码),这就是输出:
Segmentation fault (core dumped)
使用Python代码运行相同时,不会观察到任何输出.
我的做法出了什么问题?
提前感谢你.
PS:我尝试过这个替代方案并且有效.但是,它不能用于我的应用程序,因为我不能使用wait()方法.
a.wait() if a.returncode == -11: print "Segmentation fault,core dumped"
解决方法
signal.signal(signal.SIGSEGV,handler)
我使用了以下内容:
signal.signal(signal.SIGCHLD,handler)
Python3 代码在 Jupyter 和 iPython 中工作,但当我从命令行将它作为脚本运行时失败
如何解决Python3 代码在 Jupyter 和 iPython 中工作,但当我从命令行将它作为脚本运行时失败?
我在 Jupyter 中编写了一些代码,它按照我的预期完美运行。然后,我使用记事本,将代码复制粘贴到记事本,并从 cmd 将其作为脚本运行。但是,当我从 cmd 运行时,代码似乎被窃听了。我在 Jupyter 和 cmd 上都调用了 function_1(),它们给出了不同的结果。我在 iPython 上检查了我的代码,它在 iPython 上按预期工作,所以问题一定是当我将其复制粘贴为脚本时。
Align(
alignment: Alignment.centerLeft,child: Container(
padding: EdgeInsets.symmetric(vertical: 6.0),child: Stack(
children: [
Positioned(
bottom: 2,left: 0,right: 0,child: Container(height: 1.0,color: const Color(0xFF2F3543)),),Text(
"Forgot password?",style: TextStyle(
fontWeight: FontWeight.w300,inherit: true,fontSize: 13.0,foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = 2
..color = Colors.white,style: TextStyle(
color: const Color(0xFF2F3543),fontWeight: FontWeight.w300,)
],)
这些是执行(?我是数学系学生,我不知道正确的术语)代码。如果需要,我可以上传所有内容(实际脚本、文本文件、jupyter ipynb)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Python中动态创建类实例的方法
简介
在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢?
其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模块。如下:
def createInstance(module_name,class_name,*args,**kwargs): module_Meta = __import__(module_name,globals(),locals(),[class_name]) class_Meta = getattr(module_Meta,class_name) obj = class_Meta(*args,**kwargs) return obj
例子
首先我们建一个目录 my_modules,其中包括三个文件
* init.py: 模块文件
* my_module.py: 测试用的模块
* my_another_module: 另一个测试用的模块
my_module.py
from my_modules.my_another_module import * class MyObject(object): def test(self): print 'MyObject.test' MyObject1().test() MyObject2().test() MyAnotherObject().test() class MyObject1(object): def test(self): print 'MyObject1.test' class MyObject2(object): def test(self): print 'MyObject2.test'
my_another_module.py
class MyAnotherObject(object): def test(self): print 'MyAnotherObject.test'
test.py
def createInstance(module_name,**kwargs) return obj obj = createInstance("my_modules.my_module","MyObject") obj.test() MyObject.test MyObject1.test MyObject2.test MyAnotherObject.test
pyinstaller集成
对于使用pyinstaller打包的应用程序,如果使用上面的代码,运行打包后的程序会出现下面的错误
Traceback (most recent call last): File "test.py",line 12,in <module> obj = createInstance("my_modules.my_module","MyObject") File "test.py",line 7,in createInstance module_Meta = __import__(module_name,[class_name]) ImportError: No module named my_modules.my_module Failed to execute script test
这里错误的原因是 pyinstaller 在打包分析类的时候没有分析到 my_modules 下面的模块,所以运行报错。
解决办法一:
在 test.py 中把 my_modules 下的模块手动 import,见下面代码中的第一行。这种方法最简单,但是显然不太好。
import my_modules.my_module def createInstance(module_name,"MyObject") obj.test()
解决办法二:
在使用 pyinstaller 打包的时候,指定 “Chidden-import”,如下
pyinstaller -D --hidden-import my_modules.my_module test.py
解决办法三:
动态修改 python 运行时path,见下面代码中的前两行,其中path我们可以通过环境变量或者参数传递进来。显然这种方法要比前两种方法灵活的多。
import sys sys.path.append(...) def createInstance(module_name,"MyObject") obj.test()
以上所述是小编给大家介绍的Python中动态创建类实例的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
关于Python中的动态/运行时方法创建和代码生成的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于python – Airflow DAG中的动态任务生成、python-2.7 – 处理由Python代码生成的C子进程导致的分段错误、Python3 代码在 Jupyter 和 iPython 中工作,但当我从命令行将它作为脚本运行时失败、Python中动态创建类实例的方法等相关内容,可以在本站寻找。
本文标签: