小编non*_*gon的帖子

C++ 11基于范围的循环,没有循环变量

在C++中我需要迭代一定次数,但我不需要迭代变量.例如:

for( int x=0; x<10; ++x ) {
    /* code goes here, i do not reference "x" in this code */
}
Run Code Online (Sandbox Code Playgroud)

我意识到我可以通过用lambda或命名函数替换"code goes here"来做到这一点,但这个问题特别针对for循环.

我希望C++ 11的基于范围的for循环有助于:

for( auto x : boost::irange(0,10) ) {
    /* code goes here, i do not reference "x" in this code */
}
Run Code Online (Sandbox Code Playgroud)

但是上面给出了一个"未引用的局部变量",因为我从未明确引用x.

我想知道是否有一种更优雅的方式来编写上面的for循环,以便代码不会生成"未引用的局部变量"警告.

c++ c++11

55
推荐指数
6
解决办法
1万
查看次数

python pdb自动漂亮打印

我发现自己经常在pdb中这样做:

import pprint
pprint.PrettyPrinter().pprint(variable_of_interest)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法从pdb中打印变量?我正在寻找一些更容易输入的东西,理想情况下它总是在pdb中可用,所以我可以在我调试的任何时候使用它.

python pdb

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

C++ 11 lambdas作为默认函数参数

我正在编写一个C + 11函数,它将可调用作为参数,我希望将该参数默认为无操作函数.到目前为止,这是我最好的尝试:

const std::function<void()> noop= [](){};
void f( int x, int y, std::function<void()> fn= noop ) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

我想知道标准库是否为我提供了"noop"std函数,还是我需要像上面那样编写自己的函数?我也想知道是否有办法避免明确命名"noop"功能.例如:

void f( int x, int y, std::function<void()> fn= [](){} ) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

将不会编译(在Visual Studio 2012 Update 3中),也不会:

void f( int x, int y, std::function<void()> fn= std::function<void()>([](){}) ) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

在循环中引入python变量的好方法

我有一个C++背景,我正在学习Python.我正在编写需要从for循环中提取特定值的代码:

seventh_value = None   # ** my question is about this line
for index in range(1, 10):
    value = f(index)
    # we have a special interest in the seventh value
    if index == 7:
        seventh_value = value
    # (do other things with value here)

# make use of seventh_value here
Run Code Online (Sandbox Code Playgroud)

在C++中,我需要在for循环之前声明seven_value,以确保其范围不限于for循环.在Python中我不需要这样做.我的问题是省略初始赋值给seven_value是否是好的风格.

我知道如果循环没有迭代至少7次,那么我可以通过在循环之前分配到seventh_value来避免NameError.让我们假设很明显它会迭代至少7次(如上面我硬编码10次迭代的例子).

我也明白,可能还有其他方法可以从迭代中提取特定值.我真的只是想知道在循环之前引入变量是否是好的风格,如果它们将在循环之后使用.

我上面写的代码对我来说很清楚,但我认为我只是用C++眼睛看到它.

python

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

C++ 11非阻塞生产者/消费者

我有一个C++ 11应用程序,它具有生成数据的高优先级线程,以及一个消耗它的低优先级线程(在我的情况下,将其写入磁盘).我想确保高优先级的生产者线程永远不会被阻止,即它只使用无锁算法.

使用无锁队列,我可以从生产者线程将数据推送到队列,并从消费者线程中轮询它,从而实现上述目标.我想修改我的程序,以便消费者线程在非活动状态而不是轮询时阻塞.

似乎C++ 11条件变量可能对阻塞使用者线程很有用.有人能告诉我一个如何使用它的例子,同时避免消费者睡觉时数据仍在队列中吗?更具体地说,我想确保在生产者将最后一个项目推入队列后,消费者总是在某个有限的时间内被唤醒.生产者保持非阻塞也很重要.

multithreading producer-consumer c++11

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

用于访问下载文件内容的 chrome 扩展

我正在开发 Chrome 扩展程序,我想拥有该扩展程序:

  1. 单击链接以启动文件下载
  2. 下载完成后,打开并阅读下载文件的内容
  3. 用 JavaScript 处理文件的内容

我看到chrome.downloads API 允许我启动下载并打开文件,但是我是否可以读取文件的内容(不编写本机代码)?

google-chrome-extension

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

如何在Sublime 2中清除SublimeREPL窗口

我在OS X下的Sublime 2(v2.0.2)中使用SublimeREPL.我将Python文件发送到SublimeREPL窗口进行评估,我想不时清除SublimeREPL窗口.该窗口似乎是只读的,因此cmd-a,delete不起作用.

sublimetext2 sublimerepl

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

用于布尔运算符的python扩充赋值

Python是否具有与其布尔运算符对应的扩充赋值语句?

例如,我可以这样写:

x = x + 1
Run Code Online (Sandbox Code Playgroud)

或这个:

x += 1
Run Code Online (Sandbox Code Playgroud)

有什么我可以写的代替这个:

x = x and y
Run Code Online (Sandbox Code Playgroud)

为避免两次写"x"?

请注意,我知道使用&=的语句,但我正在寻找一个当y是任何类型时都能工作的语句,而不仅仅是当y是布尔值时.

python augmented-assignment

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

如何在 pdb.set_trace() 之后停止 python 程序

在 Python(2.7,在 Linux 上运行)中调试脚本时,我偶尔会注入 pdb.set_trace()(注意我实际上使用的是 ipdb),例如:

import ipdb as pdb
try:
    do_something()
    # I'd like to look at some local variables before running do_something_dangerous()
    pdb.set_trace()
except:
    pass
do_something_dangerous()
Run Code Online (Sandbox Code Playgroud)

我通常从 shell 运行我的脚本,例如

python my_script.py
Run Code Online (Sandbox Code Playgroud)

有时在我的调试会话期间,我意识到我不想运行 do_something_dangerous()。停止程序执行以便 do_something_dangerous() 不运行并且我可以退出到 shell 的最简单方法是什么?

据我了解,按 ctrl-d (或发出调试器的退出命令)将简单地退出 ipdb 并且程序将继续运行(在我上面的示例中)。按 ctrl-c 似乎会引发 KeyboardInterrupt,但我从未理解引发它的上下文。

我希望像 ctrl-q 这样的东西可以简单地取消整个过程,但我找不到任何东西。

我知道我的示例是人为设计的,但我的问题是当正在调试的代码设置为捕获异常时如何从 pdb 中止执行。这不是关于如何重组上面的代码使其工作!

python pdb ipdb

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

在Python中过滤列表,然后对其进行过滤

我有一个Python项目列表(v2.7但v2/v3兼容解决方案会很好),例如:

a = [1,6,5,None,5,None,None,1]
Run Code Online (Sandbox Code Playgroud)

我想过滤掉None值,然后对结果列表做一些事情,例如:

b = [x for x in a if x is not None]
c = f(b)
Run Code Online (Sandbox Code Playgroud)

然后我想将None值放回原始索引中:

d = # ??? should give me [c[0],c[1],c[2],None,c[3],None,None,c[4]]
Run Code Online (Sandbox Code Playgroud)

我需要立即将整个过滤列表传递给函数f().我想知道是否有一种优雅的方式来做到这一点,因为到目前为止我所有的解决方案都很混乱.这是我迄今为止最干净的一个:

d = c
for i in range(len(a)):
    if not a[i]:
        d.insert(i, None)
Run Code Online (Sandbox Code Playgroud)

编辑:修复列表理解中的拼写错误.

python

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