python - Python:将(否则)未定义的名称绑定到对象
问题描述
这个问题源于一个非常具体的用例。一些聪明的人整理了一个 repl.it,它允许您在网络上使用 Python 版本的处理库:
https://repl.it/@templates/Python-Processing
Python 代码如下所示:
from browser import document, window, alert
def sketch(p):
#this p is needed. it will be the processing sketch itself.
# to do things like background(0) instead do p.background(0)
def setup():
p.createCanvas(700, 410)
p.background(0)
p.rectMode(p.CENTER)
def draw():
#p.background(0)
p.fill(255,255,0,128)
p.ellipse(p.mouseX,p.mouseY,50,50)
def mousePressed(self):
p.background(0)
def keyPressed(self):
if p.key==" ":
print("Hallo")
p.setup = setup
p.draw = draw
p.mousePressed = mousePressed
p.keyPressed = keyPressed
myp5 = window.p5.new(sketch)
问题是我真的希望用户代码看起来像这样(就像在桌面版本的 Python 版本处理中一样):
def setup():
createCanvas(700, 410)
background(0)
rectMode(CENTER)
def draw():
fill(255,255,0,128)
ellipse(mouseX, mouseY, 50, 50)
def mousePressed(self):
background(0)
def keyPressed(self):
if key==" ":
print("Hallo")
...但正如您在 repl 中看到的,所有调用都必须以“p”开头。以便它们作用于处理草图,并包装在一个以该草图作为参数的函数中。
我想这个问题可以归结为:有没有办法包装东西,以便其他未定义的全局变量/函数(例如createCanvas
)绑定到特定对象(在这种情况下解析为p.createCanvas
)?
我承认这有点不合 Python,因为它是关于隐含原本显式的内容,但在这种情况下,它将有助于使代码更符合处理库的精神。
解决方案
推荐阅读
- asp.net - 在从 Silverlight 迁移时,如果我们将 .xaml 文件转换为 .aspx 文件,在 .cs 文件中编写的逻辑是否相同?
- sql - 如何输出两列的分组结果,一列值为行,另一列为列?
- r - 为分类算法准备数据
- javascript - 如何仅使用 RegEx 获取第一个字符匹配
- azure-language-understanding - 如何将 API 添加到聊天机器人或任何网站通知(如 twitter)
- java - 具有真正混合的 java 和 scala 源的 Gradle
- javascript - 创建多维数组,然后将每个多维数组推入另一个数组
- php - Jquery验证不适用于弹出窗口
- javascript - 推送方法不返回新数组
- salesforce - 无法使用 Salesforce CPQ 发布的读取产品 API 读取超过 31 种产品