我想循环遍历HTML表单的元素,并将<input>字段的值存储在对象中.但是,以下代码不起作用:
function config() {
$("#frmMain").children().map(function() {
var child = $("this");
if (child.is(":checkbox"))
this[child.attr("name")] = child.attr("checked");
if (child.is(":radio, checked"))
this[child.attr("name")] = child.val();
if (child.is(":text"))
this[child.attr("name")] = child.val();
return null;
});
Run Code Online (Sandbox Code Playgroud)
以下都没有(受jobscry答案的启发):
function config() {
$("#frmMain").children().each(function() {
var child = $("this");
alert(child.length);
if (child.is(":checkbox")) {
this[child.attr("name")] = child.attr("checked");
}
if (child.is(":radio, checked"))
this[child.attr("name")] = child.val();
if (child.is(":text"))
this[child.attr("name")] = child.val();
});
}
Run Code Online (Sandbox Code Playgroud)
警报始终显示child.length == 0
.手动选择元素有效:
>>> $("#frmMain").children() Object length=42 >>> $("#frmMain").children().filter(":checkbox") Object length=3
有关如何正确执行循环的任何提示?
我有2个资源管理类DeviceContext
,OpenGLContext
都是class DisplayOpenGL
.资源生命周期与之相关DisplayOpenGL
.初始化看起来像这样(伪代码):
DeviceContext m_device = DeviceContext(hwnd);
m_device.SetPixelFormat();
OpenGLContext m_opengl = OpenGLContext(m_device);
Run Code Online (Sandbox Code Playgroud)
问题是调用SetPixelFormat(),因为我无法在DisplayOpenGL
c'tor 的初始化列表中执行此操作:
class DisplayOpenGL {
public:
DisplayOpenGL(HWND hwnd)
: m_device(hwnd),
// <- Must call m_device.SetPixelFormat here ->
m_opengl(m_device) { };
private:
DeviceContext m_device;
OpenGLContext m_opengl;
};
Run Code Online (Sandbox Code Playgroud)
我能看到的解决方案:
m_dummy(m_device.SetPixelFormat())
- 无法工作,因为SetPixelFormat()没有retval.(如果它有一个retval,你应该这样做吗?)unique_ptr<OpenGLContext> m_opengl;
而不是OpenGLContext m_opengl;
.m_opengl()
,在c'tor体中调用SetPixelFormat()并使用m_opengl.reset(new OpenGLContext);
SetPixelFormat()
来自DeviceContext
c'tor的 电话哪种解决方案更可取?为什么?我错过了什么?
我在Windows上使用Visual Studio 2010 Express,如果重要的话.
编辑:我最感兴趣的是在决定使用其中一种方法时所涉及的权衡.
m_dummy()
不工作,即使它会显得不优雅unique_ptr<X>
对我来说很有意思 …c++ constructor initialization smart-pointers initialization-list
当从内置类型以及其他类派生时,似乎内置类型的构造函数不会调用超类构造函数.这导致__init__方法不会被调用MRO中内置之后的类型.
例:
class A:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
print("A().__init__()")
class B(list, A):
def __init__(self, *args, **kwargs):
print("B().__init__() start")
super().__init__(*args, **kwargs)
print("B().__init__() end")
if __name__ == '__main__':
b = B()
Run Code Online (Sandbox Code Playgroud)
在此示例中,永远不会调用A .__ init__.当B被定义为class B(A, list)
相反 - 切换继承顺序 - 它按预期工作(即调用A .__ init__).
对继承顺序的这种非常微妙的依赖似乎是非pythonic的,它是这样的吗?这也意味着你必须永远不要从复杂类层次结构中的内置类型派生,因为当别人从你的类派生时(维护恐怖),你无法知道内置函数在MRO中的最终位置.我错过了什么吗?
额外信息:Python 3.1版
由于SHA1的加密分析取得了重大进展,因此应该逐步取消SHA2(维基百科).
然而,为了在PBKDF2中用作底层散列函数,它基本上用作PRNG.因此,使用SHA1作为PBKDF2的哈希值仍然是安全的,对吧?
如何确定Python 3.x中Unicode字符串的显示宽度,以及是否有一种方法可以使用该信息将这些字符串与对齐str.format()
?
激励示例:将字符串表打印到控制台。一些字符串包含非ASCII字符。
>>> for title in d.keys():
>>> print("{:<20} | {}".format(title, d[title]))
zootehni- | zooteh.
zootekni- | zootek.
zoothe?que | zooth.
zooveterinar- | zoovet.
zoovetinstitut- | zoovetinst.
? | ??
>>> s = 'e?'
>>> len(s)
2
>>> [ord(c) for c in s]
[101, 768]
>>> unicodedata.name(s[1])
'COMBINING GRAVE ACCENT'
>>> s2 = '?'
>>> len(s2)
1
Run Code Online (Sandbox Code Playgroud)
可以看出,str.format()
仅将字符串(len(s)
)中代码点的数量作为宽度,导致输出中的列偏斜。搜索该unicodedata
模块,没有发现任何建议的解决方案。
Unicode规范化可以解决è的问题,但不能解决亚洲字符(通常显示宽度更大)的问题。类似地,存在零宽度的unicode字符(例如,零宽度的空间用于允许单词内的换行符)。您无法使用规范化解决这些问题,因此请不要建议“规范化字符串”。
编辑:添加了有关规范化的信息。
编辑2:在我的原始数据集中,也有一些欧洲组合字符,即使标准化后也不会导致单个代码点:
zwemwater | zwemw.
zwia?z- | zw. …
Run Code Online (Sandbox Code Playgroud) 我想根据当前鼠标位置更新我的绘图数据.
我的目标是像交互式幂函数图,但不是从滑块中取指数,而是将指数作为鼠标光标的当前x值(在绘图坐标空间中,而不是显示坐标).
如果无法获得onMouseMove回调,onClick也可以.但是,我不想点击特定的图形(然后我可以使用TapTool),但是在图中的任何地方点击都应该足够了.
我有一个NameDatabase
打开sqlite文件的类.有些事情可能会出错,例如格式错误的数据库,错误的架构等.这通常会导致异常(sqlite3.Error
在我的情况下).
我不想让那个例外逃过我的班级.相反,我想给调用者我自己的异常类(推理:除了NameDatabase
我还有图像和GPS轨道的类,我想向呼叫者提供一个常见的异常列表来处理).
首先,这是一个好主意吗?第二,我最好怎么做呢?
我目前的代码:
class FileParseError(...): pass
class NameDatabase:
def __init__(self, fname):
self.fname = fname
try:
self.conn = sqlite3.connect(fname)
# Check if we can query the DB and if the schema is ok.
self.conn.execute('SELECT count(*) FROM names')
except sqlite3.Error:
raise FileParseError("Not a valid database: '%s'", fname)
Run Code Online (Sandbox Code Playgroud)
这有效,但给出了双回溯(在处理上述异常时,发生了另一个异常).我理想的是原始回溯,以及我自己的类型FileParseError
(可以存储有关原始异常的一些信息)的例外.
我知道我可以sys.exc_info()
在我的异常处理程序中使用并在外部重新引发异常,但这似乎很麻烦,因为我必须在except子句中设置一个标志以记住之后处理错误.有没有更好的办法?
exc = None
try:
...
except sqlite3.Error:
exc = sys.exc_info()
if exc:
raise FileParseError("Invalid DB '%s': %s", fname, str(exc[1])), None, …
Run Code Online (Sandbox Code Playgroud)