在Python中,通过生成器表达式创建生成器对象与使用yield语句之间有什么区别吗?
使用产量:
def Generator(x, y):
for i in xrange(x):
for j in xrange(y):
yield(i, j)
Run Code Online (Sandbox Code Playgroud)
使用生成器表达:
def Generator(x, y):
return ((i, j) for i in xrange(x) for j in xrange(y))
Run Code Online (Sandbox Code Playgroud)
这两个函数都返回生成元组的生成器对象,例如(0,0),(0,1)等.
一个或另一个的任何优点?思考?
谢谢大家!这些答案中有很多很棒的信息和进一步的参考资料!
我想从Python代码访问一些用C#编写的.NET程序集.
一点研究表明我有两个选择:
两种解决方案之间的权衡取舍是什么?
在Python中,一旦我在解释器会话中导入模块X import X,并且模块在外部更改,我可以重新加载模块reload(X).然后,在我的翻译会话中可以使用这些更改.
我想知道当我从模块X导入组件Y时是否也可以这样做from X import Y.
该语句reload Y不起作用,因为Y本身不是模块,而只是模块内部的一个组件(在本例中是一个类).
是否可以在不离开解释器会话(或导入整个模块)的情况下重新加载模块的各个组件?
编辑:
为了澄清,问题是从模块X导入类或函数Y并重新加载更改,而不是从包X中重新模块Y.
我写一个小程序下载文件通过HTTP(如,例如,描述在这里).
我还想包含一个小的下载进度指示器,显示下载进度的百分比.
这是我想出的:
sys.stdout.write(rem_file + "...")
urllib.urlretrieve(rem_file, loc_file, reporthook=dlProgress)
def dlProgress(count, blockSize, totalSize):
percent = int(count*blockSize*100/totalSize)
sys.stdout.write("%2d%%" % percent)
sys.stdout.write("\b\b\b")
sys.stdout.flush()
输出:MyFileName ... 9%
还有其他想法或建议吗?
有点烦人的是在百分比的第一位数字中终端闪烁的光标.有办法防止这种情况吗?有没有办法隐藏光标?
编辑:
这里有一个更好的替代方法,在dlProgress和'\ r'代码中使用全局变量作为文件名:
global rem_file # global variable to be used in dlProgress
urllib.urlretrieve(rem_file, loc_file, reporthook=dlProgress)
def dlProgress(count, blockSize, totalSize):
percent = int(count*blockSize*100/totalSize)
sys.stdout.write("\r" + rem_file + "...%d%%" % percent)
sys.stdout.flush()
输出:MyFileName ... 9%
并且光标显示在行的END处.好多了.
如何通过带有ack的 RegEx忽略特定目录?
我可以使用该--ignore-dir选项,但这不允许我指定RegEx.我希望能够忽略任何目录,里面有句话test或tests在其名称或更复杂的图案.
我也试过了一个负面的lookbehind via
ack -G '(?<!test)' pattern
Run Code Online (Sandbox Code Playgroud)
但这不起作用.它不排除test目录.
是否有任何插件可以让emacs自动更新我的C项目中的TAGS文件(例如缓冲区保存或访问)或者如果没有TAGS文件存在则创建一个新插件?
我在Windows上运行(没有Cygwin),所以所有花哨的shell脚本都无济于事.我希望本机emacs解决方案不使用任何外部脚本.
我已经尝试过build-tags.el和etags-table.el,但这些都没有用(我想要的方式).
还有其他想法吗?
我试图通过示例显示前缀增量比后缀增量更有效.
理论上这是有道理的:i ++需要能够返回未增加的原始值并因此存储它,而++我可以返回增量值而不存储先前的值.
但是有一个很好的例子可以在实践中证明这一点吗?
我尝试了以下代码:
int array[100];
int main()
{
for(int i = 0; i < sizeof(array)/sizeof(*array); i++)
array[i] = 1;
}
Run Code Online (Sandbox Code Playgroud)
我使用gcc 4.4.0编译它,如下所示:
gcc -Wa,-adhls -O0 myfile.cpp
Run Code Online (Sandbox Code Playgroud)
我再次这样做,后缀增量更改为前缀增量:
for(int i = 0; i < sizeof(array)/sizeof(*array); ++i)
Run Code Online (Sandbox Code Playgroud)
在两种情况下,结果都是相同的汇编代码.
这有些出乎意料.似乎通过关闭优化(使用-O0)我应该看到显示概念的差异.我错过了什么?有更好的例子来展示这个吗?
Guido van Rossum关于Python 3000的演讲最后提到了从Python 2到Python 3过渡的几个方面.他特别谈到文本处理,因为转向Unicode是因为Python 3中字符串的唯一表示是主要变化之一.
就文本处理而言,一张幻灯片(#14)说:
我使用的是Python 2.6.4.这究竟对我意味着什么?
在Python的世界中,数据和文本之间有什么区别?
python ×6
.net ×1
ack ×1
c++ ×1
cpython ×1
ctags ×1
editor ×1
emacs ×1
generator ×1
html ×1
http ×1
ironpython ×1
optimization ×1
prefix ×1
python-3.x ×1
python.net ×1
regex ×1
unicode ×1
vim ×1
yield ×1