小编det*_*tly的帖子

Python/C"defs"文件 - 它是什么?

在nautilus-python绑定中,有一个文件" nautilus.defs ".它包含类似的节

(define-interface MenuProvider
  (in-module "Nautilus")
  (c-name "NautilusMenuProvider")
  (gtype-id "NAUTILUS_TYPE_MENU_PROVIDER")
)
Run Code Online (Sandbox Code Playgroud)

要么

(define-method get_mime_type
  (of-object "NautilusFileInfo")
  (c-name "nautilus_file_info_get_mime_type")
  (return-type "char*")
)
Run Code Online (Sandbox Code Playgroud)

现在我可以看到其中大部分内容(例如,最后一个意味着我可以在"FileInfo"对象上调用方法"get_mime_type").但我想知道:这个文件是什么,确切地说(即我在网上搜索什么来查找更多信息)?在Python/C绑定中找到它是常见的吗?什么是格式,它在哪里记录?什么程序实际处理它?

(到目前为止,我已经设法收集到它被转换为C源文件,它看起来有点像lisp给我.)

c python

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

Python类和__init__方法

我正在通过深入python学习python.即使通过文档,也几乎没有问题也无法理解.

1)BaseClass

2)InheritClass

当我们将InheritClass实例分配给变量时,当InheritClass不包含__init__方法而BaseClass是什么时,会发生什么?

  • 是否自动调用BaseClass __init__方法
  • 另外,告诉我在引擎盖下发生的其他事情.

实际上fileInfo.py的例子让我很头疼,我只是无法理解事情是如何运作的.以下

python

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

让py2exe与zope.interface一起使用

我有一个基于Twisted和PyGTK的Python应用程序.扭曲本身取决于zope.interface,我不直接导入它.

不幸的是,当我尝试运行我的应用程序时,错误日志中会出现以下错误:

Traceback (most recent call last):
  File "tasks.py", line 4, in <module>
  File "ui\__init__.pyc", line 14, in <module>
  File "twisted\python\log.pyc", line 17, in <module>
ImportError: No module named zope.interface
Traceback (most recent call last):
  File "tasks.py", line 4, in <module>
  File "ui\__init__.pyc", line 14, in <module>
  File "twisted\python\log.pyc", line 17, in <module>
ImportError: No module named zope.interface
Traceback (most recent call last):
  File "tasks.py", line 4, in <module>
  File "ui\__init__.pyc", line 14, in <module>
  File "twisted\python\log.pyc", line 17, in …
Run Code Online (Sandbox Code Playgroud)

python pygtk twisted py2exe zope.interface

5
推荐指数
2
解决办法
8943
查看次数

最小化缓慢,嘈杂,没有明确定义的目标函数

我的问题是:是否存在最小化算法,最好用Python实现,可以在一个慢速(~1-10s)的函数上运行,并从实时系统中获取数据,这不需要花费几个小时才能完成?

我有一个FPGA,它运行一些传感器数据的过滤器,并使用该过滤器的输出来提高另一个设备的性能.我想找到最佳的过滤器.我对系统建模和使用各种信号处理技术的尝试没有产生足够的结果,所以现在我将尝试在实时系统本身上解决这个问题(如果有的话,只是为了证明这样的最佳滤波器是可能的).

可以通过串行线对滤波器进行编程,并且可以通过串行线测量其他器件的性能.

所以我可以构造一个函数:

  • 采用定义过滤器的参数
  • 通过串行线对过滤器进行编程
  • 通过串行线获取数据
  • 计算过滤器有多好(从某种意义上说越小越好)

这意味着我有一个可以用作最小化目标的函数.以下是问题:

这很慢

要对滤波器进行编程大约需要1.5秒,要获取数据来测量滤波器的良好性大约需要6s.总而言之,每个函数调用接近8秒.换句话说,只召唤500次就需要一个多小时.即使加速通信和计算也可能不会将其改变一个数量级.

它没有明确定义

(注意,x下面是我的目标函数的参数空间中的向量.)

简单地说,x1 == x2 并不意味着 f(x1) == f(x2).由于系统的噪声,f(x)在其参数空间中的同一点对目标函数进行采样可能由于系统的噪声而产生不同的结果.

我想到的第一件事就是让目标函数实际上平均几次测量,并增加我正在运行的任何最小化程序的容差值.但是在查看实际数字时,在最坏的情况下,我可以f(x)在整个参数范围内得到2.0 的(平均)变化值,但样本标准差为1.6.这意味着如果我想将标准误差(s/sqrt(n))减少到0.1,我需要测量相同的点250次,这使得每次测量需要30分钟.好极了.

我可以通过一些技巧来改善这一点,比如在参数范围内摆动~20,任何给定点的标准偏差为0.25.但这些技巧还有其他权衡因素.

让步

从好的方面来说,在整个优化空间(我已经确认确实存在全局最小值)上绘制函数(大大平均),表明事物实际上相当平滑,最小值不是太尖锐.另一个好的方面是,度量只需要优化为两个或三个有效数字.如果它不是那么慢,优化它将很容易.

我已经开始研究SciPy中的最小化例程,但由于许多参数都是未记录的或相互依赖的,所以它在黑暗中有点散步(每个步骤需要几个小时).

令我感到震惊的是,我真正需要的是一种已知在最少数量的函数调用中工作的优化算法; 虽然可能还有另一种我没有考虑过的方法.

python mathematical-optimization

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

是否已为VHDL numeric_std签名/未签名定义溢出

如果我有一个unsigned(MAX downto 0)包含该值2**MAX - 1,那么VHDL(87 | 93 | 200X)标准是否定义了当我将其递增1时会发生什么?(或者,类似地,当我从零减去一个?)

standards integer-overflow vhdl

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

ANSI C编译器可以删除延迟循环吗?

考虑ANSI C中的while循环,其唯一目的是延迟执行:

unsigned long counter = DELAY_COUNT;
while(counter--);
Run Code Online (Sandbox Code Playgroud)

我已经看到这很多用于强制执行嵌入式系统的延迟,例如.没有sleep功能,定时器或中断是有限的.

我对ANSI C标准的解读是,这可以通过符合标准的编译器完全删除.它没有5.1.2.3中描述的副作用:

访问易失性对象,修改对象,修改文件或调用执行任何这些操作的函数都是副作用,这些都是执行环境状态的变化.

......并且本节还说:

实际实现不需要评估表达式的一部分,如果它可以推断出它的值未被使用并且不产生所需的副作用(包括由调用函数或访问易失性对象引起的任何副作用).

这是否意味着可以优化循环?即使countervolatile

笔记:

  1. 这与编译器允许消除无限循环不完全相同,因为它指的是无限循环,并且出现关于何时允许程序终止的问题.在这种情况下,程序肯定会在某个时刻通过这条线,优化与否.
  2. 我知道GCC做了什么(删除循环-O1或更高,除非countervolatile),但我想知道标准规定了什么.

c optimization standards c89

5
推荐指数
2
解决办法
1047
查看次数

在 Google Test 中,我可以从构造函数中调用 GetParam() 吗?

Google Test C++ 单元测试框架提供了进行参数化测试的能力。要访问给定测试的参数,文档告诉我派生一个子类并调用GetParam()

class FooTest : public ::testing::TestWithParam<const char*> {
  // You can implement all the usual fixture class members here.
  // To access the test parameter, call GetParam() from class
  // TestWithParam<T>.
};
Run Code Online (Sandbox Code Playgroud)

我在文档或源代码中找不到比这更具体的内容(据我所知)。

我到底可以在哪里(或什么时候)打电话GetParam()?我知道我可以在宏体内调用它TEST_P(...) { ... },但是怎么样:

  • SetUp()方法中FooTest()?
  • FooTest()在?的构造函数中
  • 在初始化列表中FooTest()

c++ googletest

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

为什么运行"setup.py test"运行我的控制台脚本?

我非常简单的示例项目包含:

addtest/
  setup.py
  addtest/
    __init__.py
    __main__.py
    app.py
Run Code Online (Sandbox Code Playgroud)

app.py只是:

def main():
    raise SystemExit("Command line entry point called.")
Run Code Online (Sandbox Code Playgroud)

__main__.py只是:

from addtest.app import main
main()
Run Code Online (Sandbox Code Playgroud)

我的setup.py包含:

from setuptools import setup, find_packages

setup(
    name='AddTest',
    version='1.0',
    packages=find_packages(),

    entry_points={
        'console_scripts': ['addtest = addtest.app:main']
    },
)
Run Code Online (Sandbox Code Playgroud)

我希望运行python setup.py test什么都不会,因为没有编写单元测试.但是,在一个干净的virtualenv(Ubuntu 18.04.1上的Python 3.6.6)中运行它给了我:

$ python setup.py test
running test
running egg_info
writing AddTest.egg-info/PKG-INFO
writing dependency_links to AddTest.egg-info/dependency_links.txt
writing entry points to AddTest.egg-info/entry_points.txt
writing top-level names to AddTest.egg-info/top_level.txt
reading manifest file 'AddTest.egg-info/SOURCES.txt' …
Run Code Online (Sandbox Code Playgroud)

python setuptools

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

Python:如何传递对函数的引用

IMO python 如果参数是基本类型(如数字、布尔值),则按值传递

func_a(bool_value):
    bool_value = True
Run Code Online (Sandbox Code Playgroud)

不会改变外面bool_value吧?

所以我的问题是如何使更改bool_value在外部生效(通过引用传递?

python

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

为什么不立即取消分配匿名(C)Python对象?

我注意到有关CPython的对象释放的一些事情引起了我的好奇心.假设我定义了一个从其tp_dealloc函数中打印消息的类型:

static void pyfoo_Bar_dealloc(pyfoo_Bar* self)
{    
    PySys_WriteStdout("Bar freed\n");   
    self->ob_type->tp_free((PyObject*)self);
}
Run Code Online (Sandbox Code Playgroud)

我也用分配器做了正确的事情:

PyMODINIT_FUNC initpyfoo(void) 
{
    PyObject* m;

    pyfoo_BarType.tp_new = PyType_GenericNew;
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

我编译它并在目录中运行Python 2.6解释器pyfoo.so:

>>> import pyfoo
>>> a = pyfoo.Bar()
>>> a = None
Bar freed
>>> quit()
Run Code Online (Sandbox Code Playgroud)

这就是我所期望的......引用计数降为零并Bar收集对象.但现在如果我这样做:

>>> import pyfoo
>>> pyfoo.Bar()
<pyfoo.Bar object at 0x7f7c6d8f2080>
>>> quit()
Bar freed
Run Code Online (Sandbox Code Playgroud)

...在Bar解释器退出之前,不会收集对象.但是,Bar匿名创建的对象的引用计数肯定是零,就像显式分配的那样.那么为什么它在创作后不会立即解除分配?

(我在Debian Squeeze上用Python 2.6.6编译了GCC 4.4.5.我知道这不是一个"bug",我知道Python-the-language并没有对Python解释器施加任何特殊限制.我只是想知道引擎盖下发生了什么,使它忽略了这样的匿名对象.)

python garbage-collection

4
推荐指数
1
解决办法
307
查看次数