小编Jed*_*urt的帖子

为什么Python 3更改为exec会破坏此代码?

我在SO上查看了无数的"Python exec"主题,但找不到能解决我问题的主题.非常抱歉,如果之前有人问过这个问题.这是我的问题:

# Python 2.6: prints 'it is working'
# Python 3.1.2: "NameError: global name 'a_func' is not defined"
class Testing(object):
  def __init__(self):
    exec("""def a_func():
      print('it is working')""")
    a_func()

Testing()
Run Code Online (Sandbox Code Playgroud)
# Python 2.6: prints 'it is working'
# Python 3.1.2: prints 'it is working'
class Testing(object):
  def __init__(self):
    def a_func():
      print('it is working')
    a_func()

Testing()
Run Code Online (Sandbox Code Playgroud)

由于标准函数定义适用于两个Python版本,我假设问题必须是对exec工作方式的改变.我阅读了2.6和3的API文档,并exec阅读了"Python 3.0中的新功能"页面,并且看不出代码中断的任何原因.

python metaprogramming exec backwards-compatibility python-3.x

11
推荐指数
2
解决办法
2663
查看次数

仅使用 Firebase 进行单点登录

我有两个域使用相同的 Firebase 后端实例。我们仅使用 Firebase 电子邮件和密码身份验证(我们没有后端)。是否可以允许用户在域之间漫游而不强制他们再次登录?一种想法是,当登录用户被重定向到另一个域时,我们在 URL 中传递 JWT,然后使用它自动登录另一个域。那行得通吗?那里有任何安全问题吗?

single-sign-on firebase

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

如何在Python中将无上下文设计语法表达为内部DSL?

[注意:在提交之前重读这个,我意识到这个Q已经成为一个史诗.感谢您放纵我对这一追求背后的原因的长期解释.我觉得,如果我能够帮助另一个人开展一个类似的项目,如果我知道这个问题背后的动机,我就更有可能加入.]

我最近由Mikael Hvidtfeldt Christensen 进入Structure Synth.它是一种用于从(大多数)上下文无关语法(称为Eisenscript)生成3D几何的工具.结构Synth本身的灵感来自Context Free Art.上下文无关语法可以从令人惊讶的简单规则集创建一些令人惊叹的结果.

我当前的Structure Synth工作流程涉及从Structure Synth导出OBJ文件,将其导入Blender,设置灯光,材质等,然后使用Luxrender进行渲染.不幸的是,导入这些OBJ文件通常会导致Blender暂停,因为可能存在数千个具有相当复杂几何形状的对象.我说"公平"因为Structure Synth只生成基本形状,但是由三角形表示的球体仍然有很多面.

因此,直接在Blender中生成结构将优于当前进程(Blender对Python脚本的深入支持应该使这成为可能).智能Python库可以使用Blender的实例化功能来使用一个网格生成无数对象,从而节省内存.Plus Blender是一个功能齐全的3D套件,它解释CFDG的能力将提供远远超出Structure Synth所能提供的创造性可能性.

所以我的问题是如何最好地将Eisenscript语法翻译成Python DSL.这是一个简单的Eisenscript看起来像:

set maxdepth 2000
{ a 0.9 hue 30 } R1 

rule R1 { 
  { x 1  rz 3 ry 5  } R1
  { s 1 1 0.1 sat 0.9 } box
}

rule R1 { 
  { x 1  rz -3 ry 5  } R1
  { s 1 1 0.1 } box
}
Run Code Online (Sandbox Code Playgroud)

为了解释,第一次调用R1(第2行)将随机调用R1的两个定义之一.R1的每个定义递归调用R1(随机调用两个定义之一)并创建一个框.递归后第一行杀死了一代,已经达到了2000级.

Jeremy Ashkenas(CoffeeScript成名)使用块在Ruby中成功实现了无上下文DSL.在内部,它的工作原理是为每个规则的"名称"创建一个哈希键,并将该规则的每个定义的块存储在一个数组中,以便在调用规则时随机选择.

以前的Eisenscript规则定义将转换为Ruby DSL,如下所示: …

python dsl context-free-grammar blender

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

查找任何字段与搜索字符串匹配的文档

在研究MongoDB文本搜索和关键字索引之后,我问这个问题.我也发现了一个类似的问题,但是为每个包含所有字段值的文档添加一个数组似乎是一个kludgy解决方案.因此这个问题.

我们需要编写一个查询来返回任何字段与搜索字符串匹配的文档.

我们的第一个想法是沿着这些方向写一个查询:

db.collection.find( { field_one: /search string/i, 
                      field_two: /search string/i,
                      field_three: /search string/i } );
Run Code Online (Sandbox Code Playgroud)

我们的挑战是文档之间的字段会有所不同,因此我们无法对查询中的字段名称进行硬编码.

MongoDB是否可以使用以下伪代码?

db.collection.find( { [any field]: /search string/i } );
Run Code Online (Sandbox Code Playgroud)

mongodb

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