小编use*_*551的帖子

Python同时迭代两个列表

有没有办法在python中同时覆盖两个或多个列表?

就像是

a = [1,2,3]
b = [4,5,6]
for x,y in a,b:
    print x,y
Run Code Online (Sandbox Code Playgroud)

输出

1 4
2 5
3 6
Run Code Online (Sandbox Code Playgroud)

我知道我可以用元组这样做

l = [(1,4), (2,5), (3,6)]
for x,y in l:
    print x,y
Run Code Online (Sandbox Code Playgroud)

python iteration foreach list python-2.7

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

如何使用argparse返回选项字符串?

parser = argparse.ArgumentParser()
parser.add_argument("-p", "--pattern", help="Pattern file")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

现在是有可能得到回字符串"--pattern"args?我需要字符串,以便我可以构建一个cmd列表以传递给Popen Popen(['some_other_program', args.pattern.option_string, args.pattern], ...)而不重复它(并且必须在两个地方维护它)(Popen(['some_other_prog', '--pattern', args.pattern], ...)).

我需要为另一个程序创建一个包装器.一些args需要传递给包装程序(通过Popen),并且包装程序需要一些args.


有比下面的例子更好的方法吗?

pass_1 = '--to-be-passed'
parser = argparse.ArgumentParser()
parser.add_argument("-p", pass_1, help="Pass me on")
parser.add_argument("-k", "--arg-for-wrapper")
args = parser.parse_args()

...
process = Popen(['wrapped_program', pass_1, args.pass_1], ...)
... 
Run Code Online (Sandbox Code Playgroud)

这种将args保存在变量中的方法并不是很好:

  1. 保持短期期权和长期期权变得困难.
  2. Popen如果在另一个函数中调用,则需要将这些变量(或它们的dict)传递给函数.这似乎是多余的,因为args传递给它应该是足够的.

python popen argparse

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

如何防止包含C库析构函数和atexit()?

对于Cortex-M4(裸机应用程序)使用arm-none-eabi-gcc,malloc即使我从未malloc在我的代码中使用过,也会发出代码.

看到程序集输出arm-none-eabi-objdump -xS obj.elf,似乎malloc通过被__register_exitproc调用来atexit调用register_fini

004036a8 <register_fini>:
  4036a8:       4b02            ldr     r3, [pc, #8]    ; (4036b4 <register_fini+0xc>)
  4036aa:       b113            cbz     r3, 4036b2 <register_fini+0xa>
  4036ac:       4802            ldr     r0, [pc, #8]    ; (4036b8 <register_fini+0x10>)
  4036ae:       f000 b805       b.w     4036bc <atexit>
  4036b2:       4770            bx      lr
  4036b4:       00000000        .word   0x00000000
  4036b8:       004036c9        .word   0x004036c9
Run Code Online (Sandbox Code Playgroud)

但是,register_fini从未在代码中调用过.main()使用以下启动代码调用,因此即使主要退出,atexit()也不会调用析构函数(或注册的函数).

/**
 * \brief This is the code that gets called …
Run Code Online (Sandbox Code Playgroud)

c embedded gcc arm bare-metal

9
推荐指数
2
解决办法
870
查看次数

用于在位阵列中查找字节的高效算法

鉴于为bytearray uint8_t data[N]什么是要找到一个字节的有效方法,uint8_t search在其中,即使search是没有被字节对齐?即前三位search可以在data[i]和接下来的5位data[i+1].

我当前的方法涉及创建一个bool get_bit(const uint8_t* src, struct internal_state* state)函数(struct internal_state包含一个右移位的掩码,&用src编辑并返回,维护size_t src_index < size_t src_len),将返回的位移动到a uint8_t my_registersearch每次比较它,并使用state->src_indexstate->src_mask获取匹配字节的位置.

有更好的方法吗?

c algorithm search

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

再次执行 while 循环的标准习惯用法

C 中是否有一种模式可以再执行一次 while 循环。目前我正在使用

while(condition) {
    condition = process();
    // process() could be multiple lines instead of a function call
    // so while(process());process(); is not an option
}
process();
Run Code Online (Sandbox Code Playgroud)

如果进程是多行而不是单个函数调用,那就太可怕了。

替代方案是

bool run_once_more = 1;
while(condition || run_once_more) {
    if (!condition) {
        run_once_more = 0;
    }
    condition = process();
    condition = condition && run_once_more;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?


注意: do while 循环不是解决方案,因为它等效于

process();
while(condition){condition=process();}
Run Code Online (Sandbox Code Playgroud)

我想要

while(condition){condition=process();}
process();
Run Code Online (Sandbox Code Playgroud)

每个请求,更具体的代码。我想从 another_buffer 填充缓冲区并将 (indexof(next_set_bit) + 1) 放入 MSB,同时维护掩码和指针。

uint16t buffer;
...
while((buffer & (1 << …
Run Code Online (Sandbox Code Playgroud)

c idioms while-loop

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

如何在一个函数中绘制±sqrt(x)?

使用时,Gnuplot仅使用正平方根值sqrt(x).有没有办法在同一个函数中绘制正值和负值.

我知道一个黑客就是用的f(x) = sqrt(x)g(x) = -sqrt(x)与积在一起,然后调整这两种功能使用相同的线条颜色,但有没有更好的办法?

gnuplot

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

不同功能的样本数量不同

plot x+3 , x**2+5*x+12 
Run Code Online (Sandbox Code Playgroud)

是否可以在同一个图中设置x+3为只有 2 个样本并x**2+5*x+12有 1000 个样本?

gnuplot

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

快速添加以前的崇高文本2

在sublime text 2中是否有快速添加,如下面的快速添加(ctrl + d)?

键映射中的相关行

{ "keys": ["ctrl+d"], "command": "find_under_expand" },
{ "keys": ["ctrl+k", "ctrl+d"], "command": "find_under_expand_skip" },
Run Code Online (Sandbox Code Playgroud)

我尝试改变它find_under_expand,find_over_expand但它不起作用.

sublimetext2

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