我尝试为一个类创建一个表示函数,我希望它与python-2.x和python-3.x兼容。不过,我注意到,当普通字符串作为%U
传递给^{PyUnicode_FromFormat
:
/* key and value are arguments for the function. */
PyObject *repr;
if (PyUnicode_CheckExact(key)) {
repr = PyUnicode_FromFormat("%U=%R", key, value);
}
else {
PyObject *tmp = PyUnicode_FromObject(key);
if (tmp == NULL) {
return NULL;
}
repr = PyUnicode_FromFormat("%U=%R", tmp, value);
Py_DECREF(tmp);
}
关键是我希望表示不包含""
(或''
),如果我使用%R
或%S
,则会添加该符号。在
我最近才发现这个问题,而且我到处都在使用PyUnicode_FromFormat("%U", something);
,所以我的问题是:在保持python2.x和3.x兼容的同时,能否简化这个问题?在
我认为做你想做的事情不存在一个非常简单的方法。我能看到的最好的方法是消除
if
语句,只需使用else
大小写,因此总是调用PyUnicode_FromObject
:如果你看一下the implementation of ^{} ,你会看到它做的第一件事是}不是unicode的情况,它应该稍微更有效,因为您避免了分支。在
PyUnicode_CheckExact
,在这种情况下,它返回原始对象的incref
ed版本。因此,所做的额外工作非常小(对于key
已经是unicode的情况),并且对于{相关问题 更多 >
编程相关推荐