在Python中,有没有办法绑定未绑定的方法而不调用它?
我正在编写一个wxPython程序,对于某个类,我认为将所有按钮的数据组合在一起作为类级别的元组列表是很好的,如下所示:
class MyWidget(wx.Window):
buttons = [("OK", OnOK),
("Cancel", OnCancel)]
# ...
def Setup(self):
for text, handler in MyWidget.buttons:
# This following line is the problem line.
b = wx.Button(parent, label=text).Bind(wx.EVT_BUTTON, handler)
Run Code Online (Sandbox Code Playgroud)
问题是,由于所有的值handler都是未绑定的方法,我的程序在一个壮观的火焰中爆炸,我哭泣.
我在网上寻找解决方案似乎应该是一个相对简单,可解决的问题.不幸的是我找不到任何东西.现在,我正在functools.partial尝试解决这个问题,但有没有人知道是否有一种干净,健康,Pythonic的方式将未绑定的方法绑定到一个实例并继续传递它而不调用它?
在Python中,fractions.Fraction和decimal.Decimal标准库类存在,以帮助保持精确有理数运算.对于不熟悉的例子,它有助于:
>>> 1 / 10 * 3
0.30000000000000004
>>> decimal.Decimal('1') / 10 * 3
Decimal('0.3')
>>> fractions.Fraction('1') / 10 * 3
Fraction(3, 10)
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我有一个Fraction,将它转换成一个最好的方法是Decimal什么?
不幸的是,明显的解决方案不起作用
>>> decimal.Decimal(fractions.Fraction(3, 10))
Traceback (most recent call last):
...
TypeError: conversion from Fraction to Decimal is not supported
Run Code Online (Sandbox Code Playgroud)
现在我正在使用这段代码:
>>> decimal.Decimal(float(fractions.Fraction(3, 10)))
Decimal('0.299999999999999988897769753748434595763683319091796875')
Run Code Online (Sandbox Code Playgroud)
现在,当我实际输出此值时,任何舍入量都会将其转换为0.3,并且我只在输出之前立即执行此转换(所有核心数学都已完成Fraction).尽管如此,对我来说似乎有些愚蠢,我无法从中得到Decimal('0.3')一个Fraction(3, 10).任何帮助,将不胜感激!
我有一个模型,我试图在不调用数据库层的情况下测试验证.我不会用文字描述,而只是发布一些示例代码.这里的问题是与Bar的ForeignKey关系,这与我正在尝试测试的内容无关,但是阻止我运行我想要的测试.
首先,myapp/models.py:
from django.core.exceptions import ValidationError
from django.db import models
class BadFooError(ValidationError):
pass
class Bar(models.Model):
description = models.CharField(max_length=20)
class Foo(models.Model):
bar = models.ForeignKey(Bar)
a_value = models.IntegerField()
b_value = models.BooleanField()
def clean(self):
super(Foo, self).clean()
if self.b_value and self.a_value > 50:
raise BadFooError("No good")
Run Code Online (Sandbox Code Playgroud)
接下来myapp/tests.py:
from unittest import TestCase
from mock import MagicMock
from . import models
class SimpleTest(TestCase):
def test_avalue_bvalue_validation(self):
foo = models.Foo()
foo.a_value = 30
foo.b_value = True
foo.bar = MagicMock(spec=models.Bar)
self.assertRaises(models.BadFooError, foo.full_clean)
def test_method_2(self):
foo …Run Code Online (Sandbox Code Playgroud) 我正在编写调用django.core.urlresolvers.reverse()生成链接的便捷代码。但是,我似乎无法编写一个简单的URLconf来进行快速测试。
这是我尝试过的:
>>> from django.conf.urls import patterns, url
>>> conf = patterns('', url(r'^foo/$', lambda request: None, name='foo'))
>>> from django.core.urlresolvers import reverse
>>> reverse('foo', conf)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File ".../env/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 445, in reverse
resolver = get_resolver(urlconf)
File ".../env/local/lib/python2.7/site-packages/django/utils/functional.py", line 27, in wrapper
if mem_args in cache:
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
我在 Python 2.7 上使用 Django 1.5。
我正在尝试为数字电子课程制作一个真值表生成器,因为这是我在业余时间玩得开心并且不评判我的方式.
Anywho,我想我有一个哈希,字符串等价于运算符作为键,以及与这些运算符对应的Scheme程序作为值.
例如
(define operator-table #hash(("+" . or)
("*" . and)))
所以我可以做点什么
(lambda (a b) ((hash-ref operator-table (string-ref input-str i)) a b))
Run Code Online (Sandbox Code Playgroud)
现在我意识到上面的内容可能无法正常工作,但是因为在我做对了之前我甚至无法修补它,因为显然and并且or在Scheme中很特别.在REPL,如果我输入not它回复#<procedure:not>.但是,如果我给它,and或者or,它说and: bad syntax in: and.是否有and我可以使用的程序版本?或者我必须制作一个lambda?或者我完全错过了什么?
我不只是从一开始就使用lambda的唯一原因是我不想失去内置的可变性能and[我可以做得(and #t #f)很好(and #t #f #f #t #f #t)].
我有以下提交历史记录:
(master) (topic) (quickfix)
a -> b -> c -> d -> e
Run Code Online (Sandbox Code Playgroud)
我想修改它,使其看起来像这样:
(master, quickfix) (topic)
a -> e -> b -> c -> d
Run Code Online (Sandbox Code Playgroud)
换句话说,master正在提交a。我开始在一个topic分支上工作,但在该分支上我发现了一个问题并修复了不相关的代码。我在一个quickfix分支中执行此操作,但该分支来自topic而不是master. 我想合并quickfix回master,但不进行任何在 中所做的更改topic。
我知道我可以使用 diff/apply 来最终到达我想去的地方,但是这种情况在我身上发生过几次,我发现 diff/apply 工作流程有点麻烦。git 中是否有一个功能可以让这变得更容易?
特定
(defun show-arg (a)
(format t "a is ~a~%" a))
(defun show-key (&key a)
(format t "a is ~a~%" a))
Run Code Online (Sandbox Code Playgroud)
评估
(show-arg)
Run Code Online (Sandbox Code Playgroud)
将导致错误说"无效数量的参数:0",其中
(show-key)
Run Code Online (Sandbox Code Playgroud)
会显示 a is NIL
我怎样才能SHOW-KEY发出错误信号SHOW-ARG呢?除了(unless a (error "a is required"))在函数体中使用之外还有其他方法吗?我非常喜欢关键字参数并且经常使用它们,并且几乎总是希望它们是必需的.
def is_unbound_method(func):
pass
def foo(): pass
class MyClass(object):
def bar(self): pass
Run Code Online (Sandbox Code Playgroud)
我可以把什么在体内is_unbound_method,使
is_unbound_method(foo) == False
is_unbound_method(MyClass().bar) == False
is_unbound_method(MyClass.bar) == True
Run Code Online (Sandbox Code Playgroud)
??
我是CakePHP的新手,我正在编写一个CakePHP应用程序,它目前有一个Author模型和一个Book模型.作者和书籍都有多对多的关系.
但是,我想另外,对于每个作者 - 书本关系,都有一个与该作者博客相对应的链接,在那里他们反映了他们写这本书的经历.
如果这令人困惑,以下段落试图详细说明我的情况更清楚:
对于每位作者,都会有一篇关于他们每本书经历的文章.反过来看这种关系,这意味着对于每本书,每个作者都会有一个相应的链接(假设书籍可以有多个作者),其中作者描述了他/她编写书籍的经历.
换句话说,对于每一个(作者,书籍)对,我希望能够存储相关的URL.
我将使用更加花哨,抽象的数学术语,我将使用可怕的和不正确的:我有一个无向图,其中每个顶点都是作者或书,每个边都有一个顶点的作者和另一个顶点的书.这听起来有点令人困惑,但(我认为)它正如我所能完全描述我的情况.
鉴于上面的描述,我想知道我是否可以将任意数据附加到该关系的任何给定边缘,并在以后检索它.
目前我有第三个模型,AuthorBook,它作为图形边缘.
作者与AuthorBook有一个hasMany关系.
Book与AuthorBook有很多关系.
AuthorBook与Author和Book有一个belongsTo关系,另外还有一个url字段.
这个解决方案有效,但由于某些原因,Book没有直接连接到Author这一事实让我烦恼.是否有任何方法可以实现同样的效果,同时还将AuthorBook模型从图片中删除?
(另外,我意识到我可以在保留AuthorBook的同时让它们直接相关,但这看起来很丑陋而且也是多余的.)
(另外,我意识到我仍然会有一个author_book SQL表.这丝毫不会打扰我,我认为不管怎么说都不可能.)
感谢您的时间!请不要点燃我!!!
说我有一个控制器
@FXML private ObservableList<String> myStrings = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)
是否可以编写任何FXML,它将ListView myStrings与其项目连接起来?
我的第一次尝试是:
<ListView>
<items fx:id="myStrings"/>
</ListView>
Run Code Online (Sandbox Code Playgroud)
但是这种抱怨fx:id在那个位置上是无效的.我也试过了
<ListView items="${controller.myStrings}"/>
Run Code Online (Sandbox Code Playgroud)
......但它无法解决这个问题.
<ListView fx:id="myStringsListView"/>
// In controller
@FXML private ListView<String> myStringsListView;
@FXML public void initialize() {
myStringsListView.setItems(myStrings);
}
Run Code Online (Sandbox Code Playgroud)
这就是我现在正在做的事情,但是间接和样板的数量在这里伤害了我.
python ×4
django ×2
bind ×1
boolean ×1
cakephp ×1
class ×1
common-lisp ×1
data-binding ×1
decimal ×1
django-urls ×1
fractions ×1
fxml ×1
git ×1
java ×1
javafx ×1
javafx-2 ×1
many-to-many ×1
methods ×1
python-2.7 ×1
python-mock ×1
racket ×1
rebase ×1
scheme ×1