我想传递一个指向函数的指针.我希望这个指针指向数组中间的某个位置.假设我有这样的数组unsigned char BufferData[5000];,下面的语句在语法上是否正确?
writeSECTOR( destAddress, (char *)( BufferData + (int)(i * 512 )) );
// destAddress is of type unsigned long
// writeSECTOR prototype: int writeSECTOR ( unsigned long a, char * p );
// i is an int
Run Code Online (Sandbox Code Playgroud) 在VIM中编写Python时有没有办法查看函数的doc字符串?
例如:
def MyFunction(spam):
"""A function that foobars the spam
returns eggs"""
return foobar(spam).eggs()
Run Code Online (Sandbox Code Playgroud)
我希望能够键入MyFunction(spam0)并查看文档字符串,作为工具提示或状态栏或VIM允许的任何其他方式.
我在Python中有以下代码:
def point_to_index(point):
if point not in points:
points.append(point)
return points.index(point)
Run Code Online (Sandbox Code Playgroud)
这段代码非常低效,特别是因为我希望points增长到拥有几百万个元素.
如果该点不在列表中,我将遍历列表3次:
如果是在列表中,我穿越了两遍:1.寻找它,并决定它是有2去几乎到了列表的末尾,直到我找到指数
有没有更有效的方法来做到这一点?例如,我知道:
所以,如果我有这条线:
if point not in points:
Run Code Online (Sandbox Code Playgroud)
从结尾到开头搜索列表,当点已经在列表中时,它将提高性能.
但是,我不想这样做:
if point not in reversed(points):
Run Code Online (Sandbox Code Playgroud)
因为我认为这reversed(points)本身会带来巨大的代价.
我也不想在列表的开头添加新的点(假设我知道如何在Python中这样做)因为这会改变索引,索引必须保持不变才能使算法工作.
我能想到的唯一改进是只使用一次传递来实现该功能,如果可能的话,从最后到开始.底线是:
编辑:我已经得到了只用一次通过实现这个的建议.index()从最后到开始有什么办法吗?
编辑:人们已经问过为什么索引是关键的.我正在尝试使用OFF文件格式描述3D表面.此格式使用其顶点和面来描述曲面.首先列出顶点,然后使用顶点索引列表描述面.这就是为什么一旦我向列表中添加一个漩涡,它的索引就不能改变.
编辑:有一些建议(如igor)使用dict.这是扫描列表的好方法.但是,当我完成后,我需要按照创建的顺序打印出列表.如果我使用dict,我需要打印出按值排序的键.有没有一个好方法呢?
编辑:我实施了www.brool.com的建议.这是最简单,最快速的.它本质上是一个有序的Dict,但没有开销.表现很棒!
我在Python中有一个列表,我作为程序的一部分生成.我有一个强烈的假设,即这些都是不同的,我用断言来检查.
这就是我现在这样做的方式:
如果有两个要素:
try:
assert(x[0] != x[1])
except:
print debug_info
raise Exception("throw to caller")
Run Code Online (Sandbox Code Playgroud)
如果有三个:
try:
assert(x[0] != x[1])
assert(x[0] != x[2])
assert(x[1] != x[2])
except:
print debug_info
raise Exception("throw to caller")
Run Code Online (Sandbox Code Playgroud)
如果我必须用四个元素来做这件事,我会发疯的.
有没有更好的方法来确保列表中的所有元素都是唯一的?
过去十年中的所有英特尔CPU(至少)都包括一组可以计算各种事件的性能监视器.最新的Intel CPU,Core i3,i5和i7(又名Nehalem)是否提供计算每时钟指令(IPC)的机制?如果是这样,他们是如何使用的?
如果这是可能的,我可能会在汇编中为此编写代码,但Windows或Linux系统调用也可能有用.
我试图理解为什么以下代码是非法的:
int main ()
{
char *c = "hello";
c[3] = 'g'; // segmentation fault here
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器遇到什么时会做什么char *c = "hello";?
我理解它的方式,它是一个自动的char数组,并且c是指向第一个char的指针.如果是这样,c[3]就像*(c + 3)我应该能够完成作业.
只是想了解编译器的工作方式.
跟进此有关SV紧缩和非紧缩向量之间的差异问题,为什么我会永远想用解压载体?
打包向量具有以下优点:解压缩的向量不具有:
解包载体有多大优势?
按照这个问题(并回答)如何读取使用Scipy在Matlab中创建的.mat文件,我想知道如何访问导入结构中的字段.
我在Matlab中有一个文件,我可以从中导入一个结构:
>> load bla % imports a struct called G
>> G
G =
Inp: [40x40x2016 uint8]
Tgt: [8x2016 double]
Ltr: [1x2016 double]
Relevant: [1 2 3 4 5 6 7 8]
Run Code Online (Sandbox Code Playgroud)
现在我想在Python中做同样的事情:
x = scipy.io.loadmat('bla.mat')
>>> x
{'__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Jun 07 21:17:24 2006', 'G': array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object), '__globals__': []}
>>> x['G']
array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object)
>>> G = x['G']
>>> G
array([[<scipy.io.matlab.mio5.mat_struct object at …Run Code Online (Sandbox Code Playgroud) 在Perl中是否有任何标准方法可以使用任意长度的整数?我正在研究为测试生成x64程序集的代码,我厌倦了一次操作32位.
我正在使用Perl 5.10.0,因为它的价值.
我想知道如何将一个段落变成vim中的子弹句.
之前:
sentence1. sentence2. sentence3. sentence4. sentence5. sentence6.
sentence7.
Run Code Online (Sandbox Code Playgroud)
后:
SENTENCE1.
SENTENCE2.
sentence3
sentence4.
sentence5.