小编bra*_*zzi的帖子

python闭包+ oop

我试图用python闭包做一些有点奇怪的事(至少对我来说).说我有2个这样的课程:

#!/usr/bin/python
import types

def method_a(self):
    print "ma %d" % self.val

class A(object):
    def __init__(self):
        self.val = 5
        pass

    def foo(self, a):
        def closure(self):
            print "closure %d, %d" % (self.val, a)
        return closure

class B(object):
    def __init__(self):
        self.val = 10
        pass

    def foo(self):
        print "B::foo %d"  % self.val


a = A()
b = B()
b.undo = types.MethodType(a.foo(1), b)

b.undo()
Run Code Online (Sandbox Code Playgroud)

因此,对象a的方法返回一个由对象b使用的闭包,闭包函数将绑定到对象b,因为上面的代码将导致:

closure 10, 1
Run Code Online (Sandbox Code Playgroud)

我的问题是:无论如何都要允许closure()方法访问属性,对象的方法是什么?

谢谢,

python oop closures

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

如何为Gedit插件创建的菜单项添加键盘快捷键/加速键

我创建了一个2 Gedit的插件作为描述的添加项目到菜单这里.如何将键盘快捷键/加速键/加速键绑定到此菜单项?

python gtk pygtk keyboard-shortcuts gedit

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

Liferay:如何从JSP页面调用Servlet

这是我的第一个Portlet.我没有在servlet中获取值.请看节目.在我的自定义portlet Java类doView()方法中,我展示了一个JSP页面

public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {            
    include(viewJSP, renderRequest, renderResponse);
}
Run Code Online (Sandbox Code Playgroud)

view.jsp页面内部,我引用一个servlet来接收值:

<form action="formServlet" method="post">
    <h1>Please Login</h1>
    Login:    <input type="text" name="login"><br>
    Password: <input type="password" name="password"><br>
    <input type=submit value="Login">
</form>
Run Code Online (Sandbox Code Playgroud)

内部web.xml文件:

<servlet>
    <servlet-name>formServlet</servlet-name>
    <servlet-class>FormServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>formServlet</servlet-name>
    <url-pattern>formServlet</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

在我的servlet里面

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {  
    String name = (String)request.getParameter("login");
    System.out.println("The Name is "+name);    
}
Run Code Online (Sandbox Code Playgroud)

但我不知道为什么没有调用servlet.

java portlet servlets liferay liferay-6

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

liferay 6.2中设置参数和设置属性有什么区别?

我非常困惑何时使用什么,以及使用这些参数的优点和缺点是什么。

谁能帮我澄清一下吗?

portlet liferay

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

为什么 Event.fireAsync() 需要 @ObservesAsync 注释?

在 CDI 2.0 中,可以通过调用异步触发事件Event.fireAsync(),然后使用带@ObservesAsync注释的侦听器侦听此事件。

为什么我们需要Event.firesAsync()@ObservesAsync

  • CDI 2.0 不能异步处理由 触发Event.fire()和捕获的事件@ObservesAsync吗?
  • 或者Event.fireAsync()反过来说,为什么 CDI 2.0 不能异步处理由和 cauguth触发的事件@Observes

java events cdi cdi-2.0 jakarta-ee

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

bash 参数扩展中不带冒号的等号/减号

我最近在 Bash 脚本中发现了这样的片段:

$ echo ${A=3}
Run Code Online (Sandbox Code Playgroud)

现在,我知道如果是“falsy”,${A:=3}则会设置变量,或者如果是“falsy”,则会返回 3 。不过,我从未见过这些类似的不带冒号的表达式,而且我在Bash 文档中找不到这些不带冒号的表达式的解释。AA${A:-3}A

这里发生了什么?

bash environment-variables variable-expansion

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

如何在Redis中查询和表示对象/哈希之间的关系

让我们假设我有一个有文章和作者的应用程序.它将数据保存在Redis基础中.这些文章存储为哈希,如下面以JSON语法表示的那样:

{ "title" : "My title", "content" : "This is a content", "authorId" : 1}
Run Code Online (Sandbox Code Playgroud)

另外,我的作者用哈希代表:

{ "name": "John Smith", "username" : "jsmith", "password" : "secret", "id" : 1}
Run Code Online (Sandbox Code Playgroud)

问题是,如何获取给定作者ID的所有文章?在Redis中有一些命令可以做到吗?你会手动检索和过滤它们吗?或者我表达这种关系的方式有缺陷吗?你会建议什么?

relationship relation nosql redis

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

如何替换XML元素中的文本?

给出以下xml:

<!-- file.xml -->
<video>
    <original_spoken_locale>en-US</original_spoken_locale>
    <another_tag>somevalue</another_tag>
</video>
Run Code Online (Sandbox Code Playgroud)

替换<original_spoken_locale>标签内部值的最佳方法是什么?如果我确实知道价值,我可以使用类似的东西:

with open('file.xml', 'r') as file:
    contents = file.read()
new_contents = contents.replace('en-US, 'new-value')
with open('file.xml', 'w') as file:
    file.write(new_contents)
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,我不知道它的价值.

python xml lxml

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

每次使用resut时,Python是否会使用bignums重新评估算术运算?

好吧,我是想在蟒蛇一些非常大量的评价抛出-我这时才意识到是-约为10 ^(10 ^ 120)的相当巨大的.无论如何,我后退到10**10**5和10**10**6.检查两者的时差给我带来了这个有点奇怪的发现,我认为这是一种低效率.

结果是,当我尝试时cProfile.run("x=10**10**6"),花了0.3秒,cProfile.run("print 10**10**6")花了40秒.

然后我尝试x= 10**10**6了几乎没有时间,但此后每次我解释 x(x然后输入)它将需要很长时间(我想40秒).所以,我假设每次我解释x它再次计算整个值.

所以我的问题是:效率不是很低吗?假设我在模块中声明了一些变量x= 10**10,并且每次我引用xpython解释器都会10**10反复计算值?

Gory的细节将非常感激.

python

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

无法使用Titanium Appcelerator中的Alloy更新模型

我正在尝试使用Alloy更新Titanium中的集合中的模型.

此代码无效:

var contactos = Alloy.Collections.instance('Contact');

var contacto = contactos.get({id: 3});
// Output: {id:3, name:'Juan 3', marcado: 1}
Ti.API.debug('get: ' + JSON.stringify(contacto));

contacto.set({marcado: 0});
// Output: {id:3, name:'Juan 3', marcado: 0}
Ti.API.debug('set: ' + JSON.stringify(contacto));

contacto.save();    
contactos.fetch();

// Output: [{id:3, name:'Juan 3', marcado: 1},{...},{...}]    
Ti.API.debug('despues de save: ' + JSON.stringify( JSON.stringify( contactos ) ));
Run Code Online (Sandbox Code Playgroud)

虽然这是有效的:

var contactos = Alloy.Collections.instance('Contact');

var contacto1 = Alloy.createModel('Contact');
// Output: {id:null, name:'', marcado: 0}
Ti.API.debug('createModel: ' + JSON.stringify(contacto1));

var contacto2 = contactos.get({id: 3});
// Output: …
Run Code Online (Sandbox Code Playgroud)

model updates updatemodel titanium titanium-alloy

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