我有一个numpy的阵列X
有dtype 'S' (numpy.bytes_)
.例如印刷print(X[0, 0])
产量b'somestring'
.同样str(X[0, 0])
返回字符串"b'somestring'"
.
但是我需要打印或转换为字符串,以便它不包含b'
在开头和'
结尾.我只想打印somestring
或返回一个字符串"somestring"
.怎么做?
注意:我无法更改数组的类型.
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将拒绝这样做.
关于这个问题,这里有很多问题,但似乎都没有给出令人满意的答案.从我在所有答案中可以阅读的内容:
import ...
而不是from ... import ...
(我个人不喜欢编写并可能重构所有全名限定符;我喜欢看看我从外部世界导入到模块中的确切内容).那会有帮助吗?我不确定,还有循环进口.我仍然希望有解决方案4)这将是Pythonic在功能和优雅,简单和工作的意义上.或者没有?
注意:我主要是一个C++程序员,上面的例子通过包含相应的标题很容易解决,我不相信它在Python中是不可能的.
我正在开发一个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) numpy如果我想比较两个数组,比如说我想测试A中的所有元素是否小于B中的值,我使用if (A < B).all():
.但实际上,这需要分配和评估完整的数组C = A < B
然后调用C.all()
它.这有点浪费.有没有办法'快捷'比较,即直接A < B
逐元素地评估(没有分配和临时计算C
),并False
在找到第一个无效元素比较时停止并返回?
我现在正在学习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)
这是合法的吗?我编译,所以是的。但这有什么意义和用途呢?
我尝试构建用于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) 我正在学习新的和非常漂亮的语言Kotlin,一切似乎都非常合乎逻辑和一致.我只发现一件似乎是规则的任意例外而不是一条可靠的规则.但也许我对这条规则背后的一些深层原因缺乏足够的了解.
我知道在if-else
和when
语句中有代码块,然后返回最后一个表达式.在下一个例子中1
或2
根据条件返回 - 在我们的例子中它返回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-else
或when
语句用作表达式,则存在一个代码块,则返回块中的最后一个表达式.否则,最后一个表达式不会返回到外部作用域.或者我错过了什么?
我在代码中的许多地方使用我自己的装饰器(例如用于日志记录等)。有没有办法告诉调试器跳过装饰器主体并直接进入装饰函数?
我需要检查 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) 我有一个 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__
存在时,垃圾收集器不会收集此类具有循环引用的对象。这是否意味着观察破坏会影响或取消破坏?如果我是对的,这似乎有点像量子力学——观察者的存在会影响实验的结果。
所以基本上有两个问题:
这种使用是否deleteLater()
正确、可靠?和
析构函数中的消息打印会__del__
影响垃圾收集器吗?或者我可以使用哪些其他方法来观察和确认调试过程中的破坏?