我希望编写一个宏,在任何引用方法选择器的方法中使用.我不希望传递方法的文字名称.例如:
#define RERUN [self performSelector:{something} withObject:nil afterDelay: 0.0]
Run Code Online (Sandbox Code Playgroud)
上面的"{something}"将解析为使用宏的方法的选择器.
有办法做到这一点吗?
作为Matt R问题的后续跟进 ,由于Scala 2.10已经出现了相当长的一段时间,因此提取案例类的字段和值的最佳方法是什么.举一个类似的例子:
case class Colour(red: Int, green: Int, blue: String) {
val other: Int = 42
}
val RBG = Colour(1,3,"isBlue")
Run Code Online (Sandbox Code Playgroud)
我想得到一个列表(或数组或任何迭代器),它将构造函数中声明的字段作为这样的元组值:
[(red, 1),(green, 3),(blue, "isBlue")]
Run Code Online (Sandbox Code Playgroud)
我知道网上有很多关于同一问题的例子,但正如我所说,我想知道什么是提取所需信息的最理想方式
假设我已经创建了一个lambda实例,我想稍后查询这个对象以查看它是proc还是lambda.怎么做到这一点?.class()方法不起作用.
irb(main):001:0> k = lambda{ |x| x.to_i() +1 }
=> #<Proc:0x00002b931948e590@(irb):1>
irb(main):002:0> k.class()
=> Proc
Run Code Online (Sandbox Code Playgroud) 许多语言都具有内省和反思的能力。然而,有些显然比其他更好。关于哪些语言在这方面“更好”以及为什么的任何建议。
我有一个设备,它记录光谱数据并由第 3 方应用程序控制。出于自动化目的,我想使用应用程序的 COM 接口来检索 Python 中的数据。由于没有使用 Python 的 API 的适当文档,我从不同的网络资源中收集了以下代码,成功获得了第一帧:
comtypes.client.GetModule(('{1A762221-D8BA-11CF-AFC2-508201C10000}', 3, 11))
import comtypes.gen.WINX32Lib as WinSpecLib
win32com.client.pythoncom.CoInitialize()
doc = win32com.client.Dispatch("WinX32.DocFile")
buffer = ctypes.c_float()
frame = 1
spectrum = doc.GetFrame(frame, buffer)
Run Code Online (Sandbox Code Playgroud)
但是,对 的调用GetFrame与它在 Visual Basic 中的定义不一致,由制造商提供:
Run Code Online (Sandbox Code Playgroud)Sub GetFrame(frame As Integer, buffer As Variant)
GetFrame将文档中的数据复制到 Visual Basic 数组中。如果buffer是空 Variant,则GetFrame创建一个具有适当大小和数据类型的数组,并在复制数据之前将缓冲区设置为指向它。
这意味着在 Visual Basic 中,变量buffer填充了数据,而函数GetFrame没有返回值,而在 Python 中buffer保持不变,但函数GetFrame确实返回了实际数据。
如果我没有观察到我的程序随机崩溃抛出 aMemoryError并因此在代码的这一点指示内存泄漏,我就不会关心这些微妙之处。所以我的怀疑是,每次调用GetFrame某些内存时都会为缓冲区分配但从未释放过,因为win32com不知何故弄乱了 API 包装。 …
像往常一样,我创建了深度嵌套的小部件框架,这些框架有时可以创建其他顶层。 帧。
当我创建一个新的 Toplevel 框架, 我想存储原始 Toplevel 框架 通过它创建了新的 Toplevel 但由于创建它的按钮深深嵌套在它自己的框架中并且不知道它在它的 Toplevel 层次结构中的位置,它如何发现它的 Toplevel 容器将它传递到其他地方?
我是否必须预先将它存储在某种全局属性中,还是有办法通过使用一些内省来找到它?
调用any_widget._root()将根容器(tkinter.Tk 实例)还给我......是否有一个令人惊讶的未记录的widget._toplevel方法?
编辑:删除(以供将来参考)使用错误和混淆的词框。
如何使用 Python 动态指向 MongoDB 中的特定集合名称?
我从网络中的几十个传感器中的任意一个接收数据,并且我想将原始数据存储到以传感器命名的数据库集合中。
# Server Parameters
host = '1.2.3.4'
port = 27017
client = MongoClient(host, port)
db = client.myDB # use database myDB
# receive data from sensors
# {"sensorName":"...", "x":"...", "y":"...", "z":"...", "time":"..."}
db.SensorA.insert_one({...}) # record raw data in the collection for SensorA
db.SensorB.insert_one({...})
db.SensorC.insert_one({...})
Run Code Online (Sandbox Code Playgroud)
我不想明确地写db.SensorName.insert_one({...}),而是想以某种方式引用给定的传感器/集合名称。
谢谢
该__qualname__属性对我很有用,因为它使函数具有上下文关系;但是,我很难将其用于我的用例,因为:
__qualname__返回一个字符串。对于我的用例,我需要引用父对象。
__qualname__有时返回super类而不是引用的类。例如:
class Parent():
def __init__(self):
pass
class Child(Parent):
pass
print(Child.__init__.__qualname__) # Prints: "Parent.__init__"
Run Code Online (Sandbox Code Playgroud)
我正在开发的包需要足够强大,据我所知,边缘情况__qualname__没有记录。
除了使用 解析Python 文件之外ast,还可以__qualname__通过检查在Python3 中重新实现吗?Python是如何实现的__qualname__?在重新实现核心功能时,我认为我将能够根据我的用例进行调整。
先前的研究:
qualname实现:https://github.com/wbolster/qualname/blob/master/qualname.py__qualname__获取引用:获取Python 3中未绑定方法对象的定义类__qualname__stackoverflow:在早期 Python 中重现 Python 3.3 __qualname__ 的效果我无法在 Python 源代码中找到 qualname 实现。
如何动态地找出从类的实例定义了哪些函数?
例如:
class A(object):
def methodA(self, intA=1):
pass
def methodB(self, strB):
pass
a = A()
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想找出实例'a'有methodA和methodB,以及它们采用哪些参数?
检查模块的文档说:
当以下函数返回"帧记录"时,每个记录都是一个命名元组
FrameInfo(frame, filename, lineno, function, code_context, index).元组包含框架对象,文件名,当前行的行号,函数名称,源代码中的上下文行列表以及该列表中当前行的索引.
什么是"框架对象"?我希望使用这个框架对象从调用者的角度获取变量的值globals():
import my_util
a=3
my_util.get_var('a')
Run Code Online (Sandbox Code Playgroud)
和my_util.py
import inspect
def get_var(name):
print(inspect.stack()[1][0])
Run Code Online (Sandbox Code Playgroud) introspection ×10
python ×5
reflection ×3
collections ×1
lambda ×1
methods ×1
mongodb ×1
objective-c ×1
proc ×1
python-3.5 ×1
python-3.x ×1
ruby ×1
scala ×1
scala-2.10 ×1
selector ×1
tkinter ×1
win32com ×1