小编Dac*_*cav的帖子

使用Perl执行Python脚本时,为什么不会出现语法错误?

我刚刚编写了一些测试python代码test.py,我将按如下方式启动它:

perl test.py
Run Code Online (Sandbox Code Playgroud)

过了一会儿,我意识到自己的错误.我说"过了一会儿",因为Python代码实际上是正确执行的,就好像在Python解释器中一样!

为什么我的Perl会解释我的Python?test.py看起来像这样:

#!/usr/bin/python

...Python code here...
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我做相反的事情(即调用python something.pl),我会得到大量的语法错误.

python perl

84
推荐指数
1
解决办法
3616
查看次数

我应该设置errno吗?

我正在编写一个导出类似于send和的接口的模块recv.

由于这些函数应该分别返回发送和接收字节的数量,因此我无法正常进行错误管理(即使用枚举和返回助记符值).

在这样的情况下,我应该设置errno为标准库吗?如果是这样,因为errno是特定于线程的,是否有特定的写入方式,或者我可以简单地为其赋值?

编辑:试验它我发现errno通过作业进行设置是有效的.仍然:这对任何系统都是安全和便携的吗?

c errno

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

Graphviz Dot,混合定向和无向

对于我的应用程序,我需要同时(在同一图表上)表示两个关系:一个是simmetric,另一个不是.

目标:

  • 理想情况下,这两种关系应该导致边缘具有不同的颜色;
  • 对于对称关系,我不希望有双边;

有没有办法用做这个?

graph graphviz relation symmetry

34
推荐指数
2
解决办法
8300
查看次数

我可以使用rpm扩展specfile中的宏吗?

具体的例子是我有很多specfiles Source0:或其他Source包含宏的行.如何在不实际启动specfile构建或编写自己的解析器的情况下扩展这些宏?

rpm rpm-spec

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

基于qemu的低级调试

我将在ARM体系结构上测试一些低级代码.通常实验板上的实验非常复杂,所以我在想QEMU.

我想得到的是某种调试信息,如printfs或gdb.我知道这对于linux很简单,因为它实现了QEMU Integrator的设备驱动程序和gdb功能,但我不使用Linux.我还怀疑从Linux内核源代码中提取这种功能会很复杂.

我正在从一些已经实现其中一个功能的简单操作系统中搜索.你有什么建议吗?

embedded debugging gdb arm qemu

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

检测是否将使用迭代器

是否有统一的方法来了解迭代是否会使用可迭代对象?

假设您有一个特定的函数crunch,它要求参数的可迭代对象,并多次使用它.就像是:

def crunch (vals):

    for v in vals:
        chomp(v)

    for v in vals:
        yum(v)
Run Code Online (Sandbox Code Playgroud)

(注意:将两个for循环合并在一起不是一个选项).

如果使用不是列表的iterable调用函数,则会出现问题.在以下调用中,yum函数永远不会执行:

crunch(iter(range(4))
Run Code Online (Sandbox Code Playgroud)

我们原则上可以通过重新定义crunch函数来解决这个问题,如下所示:

def crunch (vals):
    vals = list(vals)

    for v in vals:
        chomp(v)

    for v in vals:
        yum(v)
Run Code Online (Sandbox Code Playgroud)

但如果调用的话,这将导致使用两倍的内存crunch:

hugeList = list(longDataStream)
crunch(hugeList)
Run Code Online (Sandbox Code Playgroud)

我们可以通过这样定义来解决这个crunch问题:

def crunch (vals):
    if type(vals) is not list:
        vals = list(vals)

    for v in vals:
        chomp(v)

    for v in vals:
        yum(v)
Run Code Online (Sandbox Code Playgroud)

但仍然存在colud,其中调用代码将数据存储在某些内容中

  • 不能消费
  • 不是一个清单

例如:

from collections …
Run Code Online (Sandbox Code Playgroud)

python

13
推荐指数
2
解决办法
495
查看次数

下划线功能

我在这里看一些C源代码,我发现了这个:

fprintf(stderr, _("Try `%s --help' for more information.\n"), command);
Run Code Online (Sandbox Code Playgroud)

当我看到wxWidget时,我已经看到了下划线,我读到它用于国际化.我发现它真的很可怕(有史以来最不直观的名字),但我认为它只是另一种奇怪的wxWidget惯例.

现在我在一些Alsa源中再次找到它.有谁知道它来自哪里?

c internationalization

12
推荐指数
3
解决办法
2537
查看次数

按字符串名称访问变量

我需要将实验数据加载到scicoslab中,这是一个(设计很糟糕的)scilab克隆,它恰好支持图形建模.网络上的文档相当差,但它与scilaboctave相似.

我需要处理的数据包含到一定数量的文本文件:Data_005,Data_010,..., Data_100.可以使用命令的-ascii标志加载它们中的每一个loadmatfile.

问题来自loadmatfile("foo", "-ascii")将文件加载foo.mat到名为的变量的事实foo.为了循环数据文件,我需要做类似的事情:

for i = [5:5:100]
    name = sprintf("Data_%02d", i);
    loadmatfile(name, "-ascii");
    x = read_var_from_name(name);
    do_something(x);
end
Run Code Online (Sandbox Code Playgroud)

我搜索的是内置的read_var_from_name,它允许我通过字符串访问内部符号表.

你知道是否存在类似的功能吗?

笔记:

  1. 如果您的文件是ascii格式,则无法覆盖此行为;
  2. 在这个阶段,我也可以使用八度音阶(不涉及图形建模),尽管它的行为方式相同.

matlab octave scilab

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

Python安装脚本扩展,你如何包含.h文件?

所以我有一个看起来像这样的目录:

 home\
     setup.py
     some_python_file.py
     ext\
         __init__.py
         c_file1.c
         c_file2.c
         ext_header.h
Run Code Online (Sandbox Code Playgroud)

显然,头文件是编译c文件所必需的,但问题是我无法让安装脚本包含头文件.

我的扩展对象是这样的:

Extension('ext.the_extension', ['ext/c_file1.c', 'ext/c_file2.c'])
Run Code Online (Sandbox Code Playgroud)

哪个有效,但不包括头文件.如果我将其更改为:

Extension('ext.the_extension', ['ext/c_file1.c', 'ext/c_file2.c', 'ext_header.h'])
Run Code Online (Sandbox Code Playgroud)

它包含'.h'文件,但在运行install时不会构建.相反,它给出了错误error: unknown file type '.h' (from 'ext/ext_header.h')

如果我将头文件包含为这样的数据文件:

data_files=[('ext', ['ext/ext_header.h'])]
Run Code Online (Sandbox Code Playgroud)

它根本不起作用,.h文件甚至没有进入MANIFEST文件.

所以我的问题是,你如何将这个扩展包含在头文件中以便python setup.py install正确构建它?

c python installation setup.py

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

预分配无列表

假设您要编写一个产生对象列表的函数,并且事先知道此n列表的长度.

在python中,列表支持O(1)中的索引访问,因此可以预先分配列表并使用索引访问它而不是分配空列表并使用该append()方法.这是因为如果空间不足,我们可以避免扩展整个列表的负担.

如果我正在使用python,那么在任何情况下表演都不是那么相关,但是预先分配列表的更好方法是什么?

我知道这些可能的候选人:

  • [None] * n →分配两个列表
  • [None for x in range(n)]- 或者xrange在python2中→构建另一个对象

一个明显优于另一个?

如果我们是这样的话n = len(input)怎么办?既然input已经存在,[None for x in input]会有更好的表现[None] * len(input)吗?

python performance design-patterns list python-3.x

9
推荐指数
2
解决办法
7668
查看次数