标签: eval

Python:应用数学运算顺序来按照括号中的层次结构重新排序字符串

如何使用 Python 来应用带括号的数学运算顺序对字符串进行重新排序?

让我举个例子:

"son(father(granpa)mother))" ===> "granpa father mother son"
Run Code Online (Sandbox Code Playgroud)

这个想法是使用标准数学顺序运算对原始字符串重新排序。在数学顺序运算中,括号具有最高优先级。让我用一个数学例子:

4 + (5 + (3 + 3)) = ((3 + 3) + 5 ) + 4 = 3 + 3 + 5 + 4 = 14
Run Code Online (Sandbox Code Playgroud)

编辑:这个例子只使用+,因为python总是在+之前做*,在同一个括号级别,这不是重点,重点是字符串中的顺序,因为只会连接结果重新排序。

目标是对包含变量的字符串进行重新排序,以研究操作的可能优化。我想要重新排序的字符串示例:

def xor_with_nands(a,b):
  return f"~(~(~({a} & {b}) & {a}) & ~(~({a} & {b}) & {b}))"

>> xor_with_nands(0,1)
>> ~(~(~(0 & 1) & 0) & ~(~(0 & 1) & 1))
>> eval(xor_with_nands(0,1))
>> 1
Run Code Online (Sandbox Code Playgroud)

如果有一种方法可以创建一个函数,根据括号的数学顺序(只是括号,而不是其他数学运算顺序)对字符串进行重新排序,则可以分析某些过程中的优化。

我们的目标是获得一种工具,可以按执行顺序可视化嵌套逻辑操作,以便直观地理解它们并希望简化它们。

结论:调车场算法很棒。非常感谢!

python string eval

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

如何解决 Perl eval() 中的“发现裸字”问题

以下代码返回“在 (eval 1) 第 1 行,靠近“*,out”的操作符预期位置找到了裸字(out 之前缺少操作符?)”

$val = 0;
$name = "abc";
$myStr = '$val = ($name =~ in.*,out [)';
eval($myStr);
Run Code Online (Sandbox Code Playgroud)

根据我的理解,我可以通过用“//”包装“in.*,out [”块来解决这个问题。

但是“in.*,out [”可以变化。(例如:用户输入)。用户可能会错过给出“//”。因此,还有其他方法来处理这个问题吗?(例如:如果 eval() 尝试返回“在...处找到裸字”,则返回 0)

regex perl eval

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

R 分配给已评估的对象

我希望能够通过引用对象的名称而不是对象本身来更改数据框的单元格,但是当我尝试这样做时,会导致 warning could not find function "eval<-"

我可以使用下面的代码更改标准数据框的单元格:

my_object = tibble(x = c("Hello", "Goodbye"), 
                   y = c(1,2))

object[2,1] <- "Bye"
Run Code Online (Sandbox Code Playgroud)

但在使用对象的名称时我很难做同样的事情。我可以使用对象的名称来评估该对象并提取相关的单元格:

object_name = "my_object"
eval(sym(object_name))[2, 1]
Run Code Online (Sandbox Code Playgroud)

但我无法为该对象分配新变量(错误could not find function "eval<-":):

eval(sym(object_name))[2, 1] <- "Bye"
Run Code Online (Sandbox Code Playgroud)

eval r dataframe assign

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

寻找eval的替代方案

我是ruby的新手,但是它不是真的那种来自perl的变化,反正已经编写了一个简单的脚本来将我的gl perl Data :: Dumper输出转换成yaml配置,我的问题是我正在使用为了实现这一目标,并且看到我可能希望其他人有一天使用这个脚本,我想消除eval以获得更加理智的东西.

例:

输入文件包含

$VAR1 = { 'object' => { 'some_key' => 'some_value' } }
Run Code Online (Sandbox Code Playgroud)

读取它的方法

# read in file here ...
eval( stringified_file )
print $VAR1.to_yaml
Run Code Online (Sandbox Code Playgroud)

产量

object:
  some_key: some_value
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

ruby eval

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

替换私有范围变量中的eval

我正在尝试删除此函数中的eval语句.我已经习惯了这种[无论]样式的替换,但在这种情况下它不起作用.看一看:

var App = (function(fw) {
    var somevar1 = "hello";
    var somevar2 = "world";
    this.get = function(what) {
        return eval(what);
    }
});

var app = new App({some: "thing"});

// now for the use:
console.log(app.get("somevar1"),app);?
Run Code Online (Sandbox Code Playgroud)

在函数中,所有我正常的"eval scrubbing"选项都不起作用,例如,我无法使用:

 return this[what]
 return [what]
 return app[what]
 return new Function(what);
Run Code Online (Sandbox Code Playgroud)

当然,这不是一个需要评估的奇怪案例吗?.. ps我必须注意,我不能在App内部重新调整变量,因为它是巨大代码库的一部分.

这是摆弄的东西:

http://jsfiddle.net/xAVYa/

javascript jquery scope eval

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

在没有eval()的情况下在pymongo中设置mongo数据库.也许setattr()?

我习惯于在pymongo中这样做,作为访问特定数据库的一种方法:

import pymongo

connection = pymongo.MongoClient()
db = connection.DBNAME
Run Code Online (Sandbox Code Playgroud)

然后,我现在想要能够连接到通过变量命名的数据库,并着眼于循环一系列数据库.所以类似于:

dbname = 'DBNAME'

connection = pymongo.MongoClient()
db = eval('connection.' + dbname)
Run Code Online (Sandbox Code Playgroud)

我被告知eval()偶尔会成为魔鬼,应该避免.如何使用setattr()或其他解决方案执行此操作?就像是...

dbname = 'DBNAME'

connection = pymongo.MongoClient()
db = setattr(connection, '??name??', dbname)
Run Code Online (Sandbox Code Playgroud)

python eval mongodb setattr pymongo

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

使用eval的功能不会使其缩小

这是我的奇怪功能,让我的用户创建自己的JavaScript代码

function evalThisFunction(functionBody){        
     var func;
     eval("func = " + functionBody);
     return func;
}
Run Code Online (Sandbox Code Playgroud)

但在使用Closure Compiler(http://closure-compiler.appspot.com/)进行缩小后,我得到了这样的结果:

function a(b){eval("func = "+b);}
Run Code Online (Sandbox Code Playgroud)

你有没有看到我可以修改我奇怪的功能的方法,所以它在缩小后仍然可以工作?

javascript eval minify google-closure-compiler

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

在DO运行之前调用在DO的结果部分中评估的EVAL

以下代码旨在从指定的等待时间开始倒计时,然后评估提供的表单:

(defun wait (seconds form)
       (let ((end (+ (get-universal-time) seconds)))
         (do ()
          ((>= (get-universal-time) end)
           (eval form))
        (sleep 1))))
Run Code Online (Sandbox Code Playgroud)

如果我跑:

(wait 5 (format t "output"))
Run Code Online (Sandbox Code Playgroud)

结果是"输出"将在倒计时之前发送到stdout.输出"输出"后,程序仍像往常一样倒计时.

我得到了预期的结果,其中"输出"在倒计时完成后发送到stdout,具有以下代码:

(defun wait (seconds form)
       (let ((end (+ (get-universal-time) seconds)))
         (do ()
          ((>= (get-universal-time) end)
           (format t "output"))
        (sleep 1))))
Run Code Online (Sandbox Code Playgroud)

为什么在DO循环中调用EVAL会在声明DO循环时进行评估,但直接插入正在评估的表单会导致它等到结果时间?

lisp eval common-lisp

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

Common Lisp EVAL函数引用

我的问题很简单(也许是误导性的).

在Common Lisp中,当我运行以下命令时,我得到相应的结果:

(eval '''boo) => 'boo
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我运行以下命令,我会得到一些略有不同的东西.

(eval (eval '''boo)) => boo
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果第一个命令eval从变量符号中"删除"两个引号并在输出处留下一个标记,那么两个嵌套eval函数如何取出总共三个引号?

这特别令人困惑,因为以下结果会导致错误:

(eval 'boing) => ERROR. BOING is unbound. 
Run Code Online (Sandbox Code Playgroud)

lisp eval common-lisp

0
推荐指数
3
解决办法
391
查看次数

如何将eval输出重定向到文件?

我正在编写一个Perl脚本,我在其中读取包含Perl代码段和非Perl数据的文件.

处理完文件后,我将它们写入临时文件(生成的脚本),然后使用eval命令执行.我不想单独运行生成的脚本,因为我需要使用主脚本中变量在生成的脚本中进行插值.

我需要将eval命令的输出重定向到文件.有关如何实现这一目标的任何建议?

脚本中的步骤:

  1. READ_FILE

  2. 处理文件

  3. 使用临时文件名回写

  4. 读临时文件(my $file_name = read_file('temp_file_name'))

  5. eval(eval $file_name)

感谢帮助.

perl eval

0
推荐指数
2
解决办法
492
查看次数