这个问题在这里已经有了答案:Creatingdynamicallynamedvariablesinafunctioninpython3/Understandingexec/eval/localsinpython3(2个答案)关闭5年前。为什么Python的eval在函数内部不起作用?相同的eval(compile(cmd))代码在全局环境中工作,但在foo函数内部不起作用。简单的例子:fn='/tmp/tmp'mode='single'deffoo(cmd,fn,mode):eval(compile(cmd,fn,mode))#这是输出和错误信息:globalscope:cmd=x=1
这个问题在这里已经有了答案:Whyisusing'eval'abadpractice?(8个答案)关闭9年前。我知道不应该使用eval。出于所有显而易见的原因(性能、可维护性等)。我的问题更多-它有合法用途吗?应该在哪里使用它而不是以另一种方式实现代码。由于它以多种语言实现并且可能导致糟糕的编程风格,我认为它仍然可用是有原因的。
我正在使用Tensorflow1.4。我创建了一个自定义的tf.estimator来进行分类,如下所示:defmodel_fn():#Someoperationshere[...]returntf.estimator.EstimatorSpec(mode=mode,predictions={"Preds":predictions},loss=cost,train_op=loss,eval_metric_ops=eval_metric_ops,training_hooks=[summary_hook])my_estimator=tf.estimator.Estimator(model_f
我正在尝试使用eval()执行一些函数,我需要为它们创建某种运行环境。文档中说您可以将全局变量作为第二个参数传递给eval()。但在我的情况下似乎不起作用。这是简化的示例(我尝试了两种方法,声明变量全局和使用globals(),但两者都不起作用):文件script.py:importtestglobaltest_variabletest_variable='test_value'g=globals()g['test_variable']='test_value'eval('test.my_func()',g)文件test.py:defmy_func():globaltest_varia
所以我明白了exec和eval以及compile的作用。但为什么我需要使用它们?我不清楚使用场景。任何人都可以给我一些例子,以便我更好地理解这个概念。因为我知道这都是理论。 最佳答案 我将给出一个示例,其中我使用了eval并且我认为它是最佳选择。我正在编写一个简单的软件测试实用程序……用来测试学生的练习是否符合作业要求。目标是为一个简单的配置文件提供一种方法作为测试规范(解决使用编程语言描述/记录/实现基本编程任务的测试用例的“先有鸡还是先有蛋”的问题).我的工具基于标准库中的ConfigParser。但是,我确实希望能够表示任意P
为什么5*7的文字计算失败,而5+7却没有?importastprint(ast.literal_eval('5+7'))#->12print(ast.literal_eval('5*7'))#->Traceback(mostrecentcalllast):...ValueError:malformednodeorstring:documentation不解释这个。我在SO上回答了这个问题后发现了这个问题:Gettingtheresultofastring. 最佳答案 ast.literal_eval()接受评估数据中的+因为5+2
首先,我要说的是,我阅读了很多关于创建动态命名变量的类似主题的帖子,但它们大多与Python2相关,或者它们假定您正在使用类。是的,我读了BehaviorofexecfunctioninPython2andPython3.我也知道创建动态命名的变量在99%的时间里是一个坏主意,字典是获得的方式,但我只想知道它是否仍然可能以及exec和locals在python中的工作方式3.我想展示一些示例代码来说明我的问题(fibonacci计算斐波那契数,ListOfLetters提供["A","B",...]):deffunctionname():forindex,buchstabeinenum
关于在不安全的字符串上使用Python的eval有很多关于SO的问题(例如:SecurityofPython'seval()onuntrustedstrings?,Python:makeevalsafe)。一致的回答是这是个坏主意。但是,我发现关于哪些字符串可以被认为是安全的(如果有的话)的信息很少。现在我想知道是否有可用的“安全字符串”定义(例如:仅包含小写ascii字符或任何符号+-*/()的字符串)。我发现的漏洞通常依赖于_.,:[]'"等。这种方法是否安全(用于图形绘制Web应用程序)?否则,我想使用AlexMartelli建议的解析包是唯一的方法。编辑:不幸的是,既没有答案可
我正在尝试运行tensorflow图来训练模型并使用单独的评估数据集定期进行评估。训练和评估数据都是使用队列运行器实现的。我当前的解决方案是在同一个图中创建两个输入,并使用依赖于is_training占位符的tf.cond。以下代码突出显示了我的问题:importtensorflowastffromtensorflow.models.image.cifar10importcifar10fromtimeimporttimedefget_train_inputs(is_training):returncifar10.inputs(False)defget_eval_inputs(is_tr
我有一个字符串"{'datetime':datetime.datetime(2010,11,21,0,56,58)}"我想将其转换为它所代表的对象。使用ast.literal_eval()给出:ValueError:malformedstring;因为它不允许构造对象(即datetime调用)。无论如何,要么让ast正确处理这个问题,要么保护eval以防止代码注入(inject)? 最佳答案 跟进IgnacioVazquez-Abrams'想法:importastimportdatetimedefparse_datetime_dic