小编V.K*_*.K.的帖子

numpy字节到普通字符串

我有一个numpy的阵列Xdtype 'S' (numpy.bytes_).例如印刷print(X[0, 0])产量b'somestring'.同样str(X[0, 0])返回字符串"b'somestring'".

但是我需要打印或转换为字符串,以便它不包含b'在开头和'结尾.我只想打印somestring或返回一个字符串"somestring".怎么做?

注意:我无法更改数组的类型.

python numpy

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

循环进口地狱

Python是非常优雅的语言.好吧,除了......除了进口.我仍然无法以对我来说似乎很自然的方式工作.

我有一个MyObjectA存档的类mypackage/myobjecta.py.该对象使用了一些实用程序函数mypackage/utils.py.所以在我myobjecta.py写的第一行:

from mypackage.utils import util_func1, util_func2
Run Code Online (Sandbox Code Playgroud)

但是一些实用程序函数创建并返回新的实例MyObjectA.所以我需要写utils.py:

from mypackage.myobjecta import MyObjectA
Run Code Online (Sandbox Code Playgroud)

好吧,不,我不能.这是一个循环导入,Python将拒绝这样做.

关于这个问题,这里有很多问题,但似乎都没有给出令人满意的答案.从我在所有答案中可以阅读的内容:

  1. 重新组织你的模块,你做错了!但即使在我提出的这么简单的情况下,我也不知道如何更好地组织我的模块.
  2. 尝试import ...而不是from ... import ... (我个人不喜欢编写并可能重构所有全名限定符;我喜欢看看我从外部世界导入到模块中的确切内容).那会有帮助吗?我不确定,还有循环进口.
  3. 在你使用其他模块的东西之前,做一些黑客就像在函数体的内部范围中导入一些东西.

我仍然希望有解决方案4)这将是Pythonic在功能和优雅,简单和工作的意义上.或者没有?

注意:我主要是一个C++程序员,上面的例子通过包含相应的标题很容易解决,我不相信它在Python中是不可能的.

python import circular-dependency

13
推荐指数
1
解决办法
955
查看次数

将matplotlib图表嵌入到Qt/C++应用程序中

我正在开发一个Qt/C++中面向数学的GUI应用程序,并希望嵌入一个Python脚本,包括NumPy和Matplotlib.使用Python C API,我终于设法运行脚本,从Python变量中检索值,包括NumPy数组等.但是我将Matplotlib图表绘制到我的Qt/C++应用程序中失败了.

最好说,我已经设法使用Python脚本将图表的RGBA缓冲区保存到变量,然后将变量的值作为缓冲区类型的PyObject获取,获取缓冲区并将其转换为QImage,然后转换为QPixmap,最后放入它进入QLabel并显示它.

但我仍然缺少它的交互行为,调整大小等等虽然看起来它可以通过将Qt鼠标事件转发到figure.canvas.button_press_event来完成,但它变得过于复杂......所以我总结了我不明白这些原则Python嵌入得足够好.我错过了一些明显的东西.

我发现了一些将matplotlib图表嵌入PyQt或PySide(即用Python编写)应用程序的示例,其中我看到了类似QMainWindow.setCentralWidget(canvas)或layout.addWidget(canvas)的内容.这里的canvas是FigureCanvasQTAgg对象(http://matplotlib.org/api/backend_qt4agg_api.html).

这表明canvas继承自QWidget.但是,当我尝试使用Python的C API在C++代码中模仿它时,我只是用PyObject*画布结束,不知道如何将它转换为QWidget.这是我没有重要步骤的片段:

//draw a figure in Python script called from C++ app
PyRun_SimpleString("import matplotlib\n"
"matplotlib.use('Qt4agg')\n" //use Qt4 backend
"import pylab\n"
"pylab.plot(randn(10))\n" //plot something
"fig = pylab.gcf()\n" //take current figure
"canvas = fig.canvas" //canvas is of FigureCanvasQTAgg type

//get canvas as PyObject
PyObject* m = PyImport_AddModule("__main__");
PyObject* canvas = PyObject_GetAttrString(m, "canvas");
//from what I know, canvas is a PyObject wrapped around an object derived from QWidget

//...
//... here I do not know …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt matplotlib python-embedding

10
推荐指数
1
解决办法
2392
查看次数

快点评估numpy的数组比较

numpy如果我想比较两个数组,比如说我想测试A中的所有元素是否小于B中的值,我使用if (A < B).all():.但实际上,这需要分配和评估完整的数组C = A < B然后调用C.all()它.这有点浪费.有没有办法'快捷'比较,即直接A < B逐元素地评估(没有分配和临时计算C),并False在找到第一个无效元素比较时停止并返回?

python numpy

9
推荐指数
1
解决办法
362
查看次数

在 zig 语言中使用 var 而不是 const 的结构定义

我现在正在学习zig语言。我见过const类似关键字的结构体的定义

const X = struct {
    n: i32,
};
Run Code Online (Sandbox Code Playgroud)

我的理解是,const是一种互补var,后者允许变化,前者不允许。但是用 定义 struct 意味着什么var

var Y = struct {
    n: i32,
};
Run Code Online (Sandbox Code Playgroud)

这是合法的吗?我编译,所以是的。但这有什么意义和用途呢?

zig

9
推荐指数
1
解决办法
788
查看次数

Qt 在 Ubuntu 22.04 上缺少 OpenSSL 3.x 支持

我尝试构建用于QNetworkManager与服务器通信的应用程序。我在较旧的 Linux 版本上没有遇到任何问题,但在最新的 Ubuntu 22.04 上,网络回复失败,QtCreator 显示以下输出:

Incompatible version of OpenSSL (built with OpenSSL 1.x, runtime version is >= 3.x)
The backend "cert-only" does not support QSslKey
Active TLS backend does not support key creation
The backend "cert-only" does not support QSslKey
Active TLS backend does not support key creation
The backend "cert-only" does not support QSslKey
Active TLS backend does not support key creation
The backend "cert-only" does not support QSslKey
Active TLS backend does not support …
Run Code Online (Sandbox Code Playgroud)

c++ ubuntu qt openssl

9
推荐指数
1
解决办法
5853
查看次数

返回块中的最后一个表达式

我正在学习新的和非常漂亮的语言Kotlin,一切似乎都非常合乎逻辑和一致.我只发现一件似乎是规则的任意例外而不是一条可靠的规则.但也许我对这条规则背后的一些深层原因缺乏足够的了解.

我知道在if-elsewhen语句中有代码块,然后返回最后一个表达式.在下一个例子中12根据条件返回 - 在我们的例子中它返回1.

val x = if (1 < 2) {println("something"); 1} else {println("something else"); 2}
Run Code Online (Sandbox Code Playgroud)

另一方面,这不适用于任何代码块.下一行y不分配给1整个代码块作为lambda.

val y = {println("something"); 1}
Run Code Online (Sandbox Code Playgroud)

类似地,在函数体中,不返回最后一个表达式.这甚至都没有编译.

fun z() : Int {
    println("something")
    1
}
Run Code Online (Sandbox Code Playgroud)

那么规则到底是什么?它是否真的如此随意:如果in if-elsewhen语句用作表达式,则存在一个代码块,则返回块中的最后一个表达式.否则,最后一个表达式不会返回到外部作用域.或者我错过了什么?

kotlin

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

告诉 PyCharm 调试器不要进入装饰器

我在代码中的许多地方使用我自己的装饰器(例如用于日志记录等)。有没有办法告诉调试器跳过装饰器主体并直接进入装饰函数?

python pycharm

6
推荐指数
1
解决办法
1150
查看次数

有效测试 QSet 是否包含元素,如果不存在则插入

我需要检查 a 是否QSet包含某个值,如果不存在,我想插入它并返回一个布尔值,指示该值是否已插入 ( true) 或者是否已经存在 ( false)。我的问题是如何有效地做到这一点。以下代码实际上计算哈希并搜索该集合两次。这是非常低效的。

QSet<QString> names;
bool inserted = false;
QString name = "Dave";
if (!names.contains(name))
{
  inserted = true;
  names.insert(name);
}
Run Code Online (Sandbox Code Playgroud)

c++ qt

6
推荐指数
1
解决办法
1201
查看次数

使用 __del__ 观察 Python 和 PyQt 中的对象销毁

我有一个 PyQt QWidget(对象 A;它只是一个被动容器),其中包含几个子小部件(即有 Qt'ish 父子引用)。A 的子控件从另一个对象(对象 B;不一定是 Qt 对象)引用,该对象为 A 的子控件提供数据,并实际控制 A 的子控件的创建和结构。除了 A 的子对象之外,对象 B 没有其他外部引用。对象 A 引用了对象 B。因此,这是一个纯粹的循环引用教科书示例。

我想在某个时间点删除对象 A 和 B 的整个互连结构。我只需调用A.deleteLater()Qt 对象推荐的方法即可。在我看来,它工作得很好,并删除了 A 和 B,因为它们没有外部引用,只有相互的引用......但问题是,我不太确定它是否真的有效,是否可以依赖它会在任何地方工作,如果有人将 B 子类化会有任何危险。

出于调试目的,我想使用__del__析构函数观察 A 和 B 的正确销毁,该析构函数只会打印类似A was destroyed. 但后来我在文档中了解到,当__del__存在时,垃圾收集器不会收集此类具有循环引用的对象。这是否意味着观察破坏会影响或取消破坏?如果我是对的,这似乎有点像量子力学——观察者的存在会影响实验的结果。

所以基本上有两个问题:

  1. 这种使用是否deleteLater()正确、可靠?和

  2. 析构函数中的消息打印会__del__影响垃圾收集器吗?或者我可以使用哪些其他方法来观察和确认调试过程中的破坏?

python garbage-collection pyqt pyside

5
推荐指数
1
解决办法
2120
查看次数