目前,我正在做类似以下的事情,这很乏味:
run_once = 0
while 1:
if run_once == 0:
myFunction()
run_once = 1:
Run Code Online (Sandbox Code Playgroud)
我猜有一些更可接受的方式来处理这些东西?
我正在寻找的是按需执行一次函数.例如,按下某个按钮.它是一个交互式应用程序,具有许多用户控制的开关.每个交换机都有一个垃圾变量,只是为了跟踪它是否已经运行,似乎效率低下.
我正在开发一个处理向文件夹添加元数据的开源项目.提供的(Python)API允许您浏览和访问元数据,就像它只是另一个文件夹一样.因为它只是另一个文件夹.
\folder\.meta\folder\somedata.json
Run Code Online (Sandbox Code Playgroud)
阅读Python和HDF5一书中的HDF5我在寻找使用它的好处与使用文件夹中的文件相比,但我遇到的大部分内容都谈到了分层文件格式在添加数据方面的简单性的好处通过其API:
>>> import h5py
>>> f = h5py.File("weather.hdf5")
>>> f["/15/temperature"] = 21
Run Code Online (Sandbox Code Playgroud)
或者它能够根据请求(例如随机访问)只读取它的某些部分,以及并行执行单个HDF5文件(例如,用于多处理)
您可以挂载HDF5文件,https://github.com/zjttoefs/hdfuse5
它甚至拥有强大而简单的群组和数据集的基础概念,来自wiki的内容如下:
将数据集替换为文件和组与文件夹,整个功能集听起来像文件夹中的文件已经完全能够做到.
对于我遇到的每一个好处,没有一个突出显示HDF5专属.
所以我的问题是,如果我要给你一个HDF5文件和一个文件夹,两个内容相同,哪种情况下HDF5更适合?
编辑:
得到了一些关于HDF5可移植性的回应.
这听起来很可爱,但我还没有给出一个例子,一个场景,其中一个HDF5可以用文件输出一个文件夹.当文件夹在任何计算机上可读时,为什么有人会考虑使用HDF5,任何文件系统,通过网络,支持"并行I/O",没有HDF5解释器的人可读.
我甚至可以说,带文件的文件夹比任何HDF5都便携得多.
编辑2:
Thucydides411刚刚举了一个可移植性问题的例子. /sf/answers/1995841991/
我认为我从这个帖子的答案中拿走的是HDF5非常适合当你需要文件和文件夹的组织结构时,就像上面的示例场景一样,有很多(数百万)小(~1个字节)数据结构; 喜欢个别数字或字符串.它通过提供一个"子文件系统"来支持文件系统所缺少的东西,这种文件系统有利于小型和多型,而不是少量和大型.
在计算机图形学中,我们使用它来存储几何模型和关于各个顶点的任意数据,这些数据似乎与它在科学界的使用非常吻合.
希望这很清楚:
class myParent():
def __init__( self ):
self.parentNumber = 5
class Child( myParent ):
def __init__( self ):
self.childNumber = 4
def multiplyNumbers( self ):
print myParent.parentNumber * self.childNumber
p = Child()
p.multiplyNumbers()
Run Code Online (Sandbox Code Playgroud)
我希望单独设置parentNumber,然后通过子类达到该数字,在这种情况下使用它进行一些乘法.
我是OOP领域的新手,所以欢迎任何关于继承的一般指针!
更多信息: 我正在为基于vfx的项目设计项目管理解决方案,并且正在玩类和继承,以了解它们如何能够帮助我.
现在,我已经获得了顶级类,Project和派生类Shot.Shot具有self.length变量,具有特定镜头的长度.它还有一个getLengthInSeconds()方法,它使用self.length和Project.fps来确定以秒为单位的长度.Project有一个setFps()方法,其中在创建类的实例后设置fps.
我习惯于以变量为前缀的变量.并且没有对使用没有自我的更"全局"变量的类进行过多尝试..如果我把一切都变得全球化,没有自我,我可以毫不费力地使用Project.fps,但是我的脖子上有一个"糟糕的编程习惯"警告.也许有更好,更整洁的方式?
编辑:
经过一番阅读,super()似乎有点危险,比我想象的要多一些.我主要有单继承类,甚至不确定如何使用钻石层次结构.是否有更安全的方法来访问超类变量和不包含super()的方法?
编辑:
好吧,看看这是否有意义,或者我是否认为这一切都是错的.
我正在看班级和继承作为团体和孩子.一个孩子知道它的父母及其所有的价值观.一个孩子对另一个父母知道父母的价值观.我想要完成的是将所有镜头都创建为项目的一部分.现在,我正在从Project()类中创建Shot()实例,将实例添加到镜头列表中,然后在Project()实例中进行维护.
即
class myParent( object ):
def __init__( self ):
self.parent_id = ''
self.children = []
def createChild( self, name ):
self.children.append( myChild( name ) )
def getChildren( self ):
return self.children
def setParentId( self, id ): …Run Code Online (Sandbox Code Playgroud) 我可以用这个获取存储库观星者计数。
curl https://api.github.com/repos/mottosso/be/stargazers
Run Code Online (Sandbox Code Playgroud)
但我怎样才能获得吉斯特的观星者呢?
例如
curl https://api.github.com/gists/mottosso/9b25f547d5364f050494/stargazers
Run Code Online (Sandbox Code Playgroud) 在PyQt中,您可以使用QtCore.pyqtSignal()创建自定义信号.
我尝试自己实现Observer模式来代替pyqtSignal它来规避它的一些限制(例如没有动态创建).
它在很大程度上起作用,至少有一个区别.
这是我到目前为止的实施
class Signal:
def __init__(self):
self.__subscribers = []
def emit(self, *args, **kwargs):
for subs in self.__subscribers:
subs(*args, **kwargs)
def connect(self, func):
self.__subscribers.append(func)
def disconnect(self, func):
try:
self.__subscribers.remove(func)
except ValueError:
print('Warning: function %s not removed from signal %s'%(func,self))
Run Code Online (Sandbox Code Playgroud)
注意到的一件事是工作方式的差异QObject.sender().
我通常会保持清醒sender(),但如果它的工作方式不同,那么其他事情也可能如此.
对于常规pyqtSignal信号,发送方始终是最接近信号链的小部件.
在底部的示例中,您将看到两个对象,ObjectA和ObjectB.ObjectA转发信号ObjectB并最终由Window接收.
有pyqtSignal,接收的对象sender()是ObjectA,即转发信号的对象ObjectB.
使用上面的Signal类,接收的对象是ObjectB链中的第一个对象.
为什么是这样?
完整的例子
# Using PyQt5 here …Run Code Online (Sandbox Code Playgroud) 该widgetAt函数直接在光标下给出了小部件,位于最高的z顺序.
pos = QtGui.QCursor.pos()
widget = QtGui.qApp.widgetAt(pos)
Run Code Online (Sandbox Code Playgroud)
但是如何在光标下获取所有小部件?包括最顶端的那些?就像是:
pos = QtGui.QCursor.pos()
widgets = QtGui.qApp.widgetsAt(pos)
Run Code Online (Sandbox Code Playgroud)
作为一个使用示例,想象一个叠加层,它可以添加动画图形,如水面上的涟漪,无论用户点击何处.当然,叠加层需要接收并响应点击,但必须这样做,而不会干扰传播到其下方小部件的点击.
另一个例子是使用跟踪; 为了截取和记录点击进行分析,可以使用相同的叠加,但这次没有绘制,只收集.
在这两种情况下,如果只有一个小部件获得了click事件,我需要一种方法来区分它下面的小部件,以便传递事件.
例如,当使用dirnameI 遍历层次结构的多个级别时,通常会执行此操作.
grandparent = os.path.dirname(__file__)
grandparent = os.path.dirname(grandparent)
Run Code Online (Sandbox Code Playgroud)
或者,如果有更多级别.
grandparent = = os.path.dirname(__file__)
for x in xrange(5):
grandparent = os.path.dirname(grandparent)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一个不那么冗长的方法呢?
如
grandparent = y(5, os.path.dirname, __file__)
Run Code Online (Sandbox Code Playgroud)
y我正在寻找的神秘功能在哪里?
如果没有,那么这个函数会被调用么?
如何绑定到 Javascript 资源?
我是 QML 的新手,可能会以错误的方式思考这个问题,但在下面的示例中,我希望按钮在按下时显示“世界”。
主文件
import QtQuick 2.0
import QtQuick.Controls 1.0
import "model.js" as Model
Button {
id: button
text: Model.text
onClicked: {
Model.text = "World";
print("Model.text is:", Model.text)
print("button.text is:", button.text)
// Model.text is "World"
// button.text is "Hello"
// They should both be "World"
}
}
Run Code Online (Sandbox Code Playgroud)
模型.js
var text = "Hello";
Run Code Online (Sandbox Code Playgroud)
我也尝试使用 a Qt.binding,但没有任何区别。
主文件
import QtQuick 2.0
import QtQuick.Controls 1.0
import "model.js" as Model
Button {
onClicked: {
Model.text = "World";
}
Component.onCompleted: { …Run Code Online (Sandbox Code Playgroud)