小编Rob*_*ean的帖子

如何Python计算列表长度

我想知道len()是如何工作的.

每次调用len()时,它是否从列表的开头到结尾计数,或者,因为list也是一个类,len()只返回列表对象中记录列表长度的变量吗?

另外,我希望有人可以告诉我在哪里可以找到那些内置函数的源代码,如'len()','map()'等.

python python-2.7

12
推荐指数
1
解决办法
5264
查看次数

左关联运算符与右关联运算符

如果我们有一个表达式:

a $ b @ c
Run Code Online (Sandbox Code Playgroud)

$是一个左关联运算符,@是右关联运算符.它们具有相同的优先权.

这个表达式是如何解析的?作为(a $ b) @ c或作为a $ (b @ c)

parsing operators operator-precedence associativity

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

Python Tkinter Canvas无法绑定键盘

我一直在运行这样的小脚本

from Tkinter import *
root = Tk()
def callback(event):
    print "callback"
w = Canvas(root, width=300, height=300)
w.bind("<Key>", callback)
w.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

但是,在我的情况下不处理键盘事件(我在窗口7上使用python 2.7)

如果我使用

w.bind("<Button-1>", callback)
Run Code Online (Sandbox Code Playgroud)

事情很好.

所以,这真让我困惑.请有人告诉我为什么会这样,提前谢谢.

python tkinter

9
推荐指数
1
解决办法
8925
查看次数

Python处理二进制文件是危险的吗?

我在Python教程上阅读了这篇文章:(http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files)

Windows上的Python区分了文本和二进制文件; 读取或写入数据时,文本文件中的行尾字符会自动稍微改变.这种对文件数据的幕后修改适用于ASCII文本文件,但它会破坏像JPEG或EXE文件中的二进制数据.在读取和写入此类文件时要非常小心地使用二进制模式.

我不太明白文本文件中的行尾字符是如何被"改变"将"破坏二进制数据".因为我觉得二进制数据没有像行尾这样的东西.

有人可以为我解释这段话的更多内容吗?这让我觉得Python不欢迎二进制文件.

python binaryfiles file

8
推荐指数
1
解决办法
1015
查看次数

为什么eigs('lm')比eigs('sm')快得多

我用eigs来计算稀疏平方矩阵的特征向量,这些矩阵是大的(数万).我想要的是最小的特征向量集.但

eigs(A, 10, 'sm')      % Note: A is the matrix
Run Code Online (Sandbox Code Playgroud)

跑得很慢.

然而,使用eigs(A,10,'lm')给我的答案相对更快.正如我所尝试的那样,在eigs(A,10,'lm')中用A_width替换10,这样就包含了所有的特征向量,并没有解决这个问题,因为这使得它与使用'sm'一样慢.

所以,我想知道为什么计算最小的向量(使用'sm')比计算最大的向量慢得多?

顺便说一句,如果您对如何使用'sm'和'lm'一样快地使用eigs有任何想法,请告诉我.

matlab matrix

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

使用多个处理器加速程序

我发现有时将一个循环划分为两个或更多循环会更快

for (i=0; i<AMT; i++) {
    a[i] += c[i];
    b[i] += d[i];
}
     ||
     \/
for (i=0; i<AMT; i++) {
    //a[i] += c[i];
    b[i] += d[i];
}
for (i=0; i<AMT; i++) {
    a[i] += c[i];
    //b[i] += d[i];
}
Run Code Online (Sandbox Code Playgroud)

在我的桌面上,win7,AMD Phenom(tm)x6 1055T,双循环版本运行速度更快,时间缩短了约1/3.

但如果我正在处理任务,

for (i=0; i<AMT; i++) {
    b[i] = rand()%100;
    c[i] = rand()%100;
}
Run Code Online (Sandbox Code Playgroud)

将b和c的赋值分成两个循环并不比一个循环快.

我认为操作系统使用一些规则来确定某些代码是否可以由多个处理器运行.

我想问一下我的猜测是否正确,如果我是对的,那么多个处理器将自动(没有线程编程)用于加速我的程序的规则或场合是什么?

c c++ parallel-processing performance

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

何时创建python类属性

class Foo:
   bar = 1
   ......etc.
Run Code Online (Sandbox Code Playgroud)

我知道在创建实例时,之前创建了bar __init__,我想知道在为Foo创建实例时是否首先创建bar属性.此外,在创建任何实例之前,条形图是否已存在于内存中?

python

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

编译器如何处理外部变量

这可能很小,但我很好奇这个原因.

这来自我朋友的练习代码:

#include <iostream>

using namespace std ;
extern int* PPPP;

void main(){
    cout<<"*PPPP"<<*PPPP<<endl;
}
Run Code Online (Sandbox Code Playgroud)

错误地,PPPP实际上是无处宣布的.但奇怪的是我们可以将其编译成静态库.但是,我们不能把它变成一个dll,有链接错误(未解析的外部sysmbol pppp)

我们猜测是因为在创建一个静态库时,PPPP(虽然extern)这个名字在内存中确实有一个空间,所以,这没有问题.

我们根本不确定这一点.我们希望能够听到更多更准确的信息.

提前致谢.

c++ dll extern

2
推荐指数
1
解决办法
92
查看次数

std :: list pop和erase方法无法销毁已删除的项目

http://www.cplusplus.com/reference/list/list/erase/上的描述中,我得到了

   This effectively reduces the container size by the number of elements removed,
which are destroyed.
Run Code Online (Sandbox Code Playgroud)

pop方法的类似描述.

但是在我对VS2012的测试中,删除的项目没有被破坏.我对此感到困惑.

这是我的测试代码.我仍然可以从std :: list删除的内存中输出,在我看来,这是错误的.

#include <stdio.h> 
#include <list>
using namespace std;
class test
{
public:
   int a;
   test() {a = 111;}
};
int main(void)
{
   list<test*> l;
   test* t = new test;
   l.push_back(t);
   l.erase(l.begin());
   printf("%d\n", t->a);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ list std

2
推荐指数
1
解决办法
552
查看次数

一个奇怪的使用新的c ++关键字

我遇到了一些代码如下.

char *buffer = new char[sizeof(PoolThread) * numThreads];
m_threads = reinterpret_cast<PoolThread*>(buffer);
for (int i = 0; i < numThreads; i++)
{
    new (buffer)PoolThread(*this);
    buffer += sizeof(PoolThread);
}
Run Code Online (Sandbox Code Playgroud)

我想new这里是用于初始化指向m_threads真实对象(PoolThread类)的空内存空间

我用谷歌搜索,但只找到这样的用法信息new:

pointer = new somthing[number]; 
Run Code Online (Sandbox Code Playgroud)

我希望new在我的上层代码示例中使用更多信息.这种用法是否来自c ++标准?

c++ memory keyword

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

类复制构造不能有类类型的参数

class test{
     test(test);
     //test(test*);
};
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么 C++ 禁止在构造函数中使用类类型的参数。编译器很难处理吗?

c++ class

0
推荐指数
1
解决办法
1252
查看次数