我刚刚编写了一些测试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),我会得到大量的语法错误.
我正在编写一个导出类似于send和的接口的模块recv.
由于这些函数应该分别返回发送和接收字节的数量,因此我无法正常进行错误管理(即使用枚举和返回助记符值).
在这样的情况下,我应该设置errno为标准库吗?如果是这样,因为errno是特定于线程的,是否有特定的写入方式,或者我可以简单地为其赋值?
编辑:试验它我发现errno通过作业进行设置是有效的.仍然:这对任何系统都是安全和便携的吗?
对于我的应用程序,我需要同时(在同一图表上)表示两个关系:一个是simmetric,另一个不是.
目标:
有没有办法用点做这个?
具体的例子是我有很多specfiles Source0:或其他Source包含宏的行.如何在不实际启动specfile构建或编写自己的解析器的情况下扩展这些宏?
我将在ARM体系结构上测试一些低级代码.通常实验板上的实验非常复杂,所以我在想QEMU.
我想得到的是某种调试信息,如printfs或gdb.我知道这对于linux很简单,因为它实现了QEMU Integrator的设备驱动程序和gdb功能,但我不使用Linux.我还怀疑从Linux内核源代码中提取这种功能会很复杂.
我正在从一些已经实现其中一个功能的简单操作系统中搜索.你有什么建议吗?
是否有统一的方法来了解迭代是否会使用可迭代对象?
假设您有一个特定的函数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) 我在这里看一些C源代码,我发现了这个:
fprintf(stderr, _("Try `%s --help' for more information.\n"), command);
Run Code Online (Sandbox Code Playgroud)
当我看到wxWidget时,我已经看到了下划线,我读到它用于国际化.我发现它真的很可怕(有史以来最不直观的名字),但我认为它只是另一种奇怪的wxWidget惯例.
现在我在一些Alsa源中再次找到它.有谁知道它来自哪里?
我需要将实验数据加载到scicoslab中,这是一个(设计很糟糕的)scilab克隆,它恰好支持图形建模.网络上的文档相当差,但它与scilab和octave相似.
我需要处理的数据包含到一定数量的文本文件: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,它允许我通过字符串访问内部符号表.
你知道是否存在类似的功能吗?
笔记:
所以我有一个看起来像这样的目录:
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正确构建它?
假设您要编写一个产生对象列表的函数,并且事先知道此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)吗?