小编JAB*_*JAB的帖子

为什么Python 3中的切片仍然是副本而不是视图?

正如我在评论这个答案后才注意到的那样,Python 3中的切片返回了他们正在切片而不是视图的浅层副本.为什么仍然如此?即使撇开观点numpy的的使用,而不是切片的副本,事实证明dict.keys,dict.valuesdict.items在Python 3所有回报的意见,并有走向更大的使用迭代器面向Python 3中的其他许多方面,使它看起来将会有些切片变得相似的运动.itertools确实有一个islice函数可以进行迭代切片,但是它比普通切片更有限,并且不提供沿着dict.keys或者行的视图功能dict.values.

同样,你可以使用赋值给切片来修改原始列表,但切片本身就是副本而不是视图,这是语言的一个矛盾方面,似乎它违反了Python的Zen中所说明的几个原则.

也就是说,你可以做的事实

>>> a = [1, 2, 3, 4, 5]
>>> a[::2] = [0, 0, 0]
>>> a
[0, 2, 0, 4, 0]
Run Code Online (Sandbox Code Playgroud)

但不是

>>> a = [1, 2, 3, 4, 5]
>>> a[::2][0] = 0
>>> a
[0, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

或类似的东西

>>> a = [1, 2, 3, 4, 5]
>>> b = a[::2]
>>> b …
Run Code Online (Sandbox Code Playgroud)

python language-design slice python-3.x

50
推荐指数
2
解决办法
5685
查看次数

itertools.accumulate()与functools.reduce()

在Python 3.3中,itertools.accumulate()通常会对提供的iterable重复应用加法运算,现在可以将函数参数作为参数; 这意味着它现在重叠functools.reduce().粗略看一下,现在两者之间的主要区别似乎是:

  1. accumulate()默认为求和但不允许显式提供额外的初始条件,reduce()而不默认为任何方法但允许您提供初始条件以使用1/0元素序列,并且
  2. accumulate()首先采用迭代,然后先reduce()获取函数.

这两者之间还有其他差异吗?或者这仅仅是两个函数的行为问题,最初的不同用途开始随时间收敛?

python python-itertools python-3.3 functools

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

为什么在GCC和Clang中使用std :: thread需要使用-pthread?

为什么-std=c++11在编译直接或间接使用的程序时指定std::thread并不暗示-pthreadstd::thread使用pthreads 的实现细节暴露给程序员似乎很奇怪; 如果这是给用户选择posix兼容的线程库的问题,为什么不默认为pthreads并有一些--threading-model=<your_favorite_posix_threads_library>参数来覆盖它?

multithreading gcc clang c++11

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

只读内存映射寄存器在C中用`volatile const`定义,但在C++中只用`volatile`定义

在使用Atmel SAM3X8E处理嵌入式系统项目时,我注意到某些CMSIS头文件中的以下代码.

#ifndef __cplusplus
typedef volatile const uint32_t RoReg; /**< Read only 32-bit register (volatile const unsigned int) */
#else
typedef volatile       uint32_t RoReg; /**< Read only 32-bit register (volatile const unsigned int) */
#endif
Run Code Online (Sandbox Code Playgroud)

为什么C++的typedef不包含const?我在某处看到C++没有在运行时内存中存储整数const变量,如果为true则意味着const由于微控制器寄存器的内存映射方式需要删除它,但我似乎无法找到其他任何说法C++就是这样做的(尽管我的搜索非常简短).我没有太多的C++经验,我也认为可能是C++不允许使用conststruct成员,因为那些typedef主要用于struct typedef中的寄存器集合,但似乎也不是这样.

c c++ embedded cmsis

6
推荐指数
2
解决办法
2076
查看次数

如何将Python 2.x的旧C扩展更新为Python 3.x.

我想使用我在这里找到的Python扩展,但是我正在使用Python 3.1,当我尝试编译包中包含的C扩展(_wincon)时,由于所有语法错误,它都无法编译.不幸的是,它是为2.x版本的Python编写的,因此包括诸如PyMember_Get和的方法PyMember_Set,它们不再是Python的一部分.我的问题是我还没有学习C,因此无法弄清楚如何修改代码以使用在Python 3.1中仍然有效的语法.(还有一些像staticforward需要修复的宏,但我认为只需要改变它们static.)因此:我该如何解决这个问题呢?

(请注意,我确实已经研究过各种其他用于Python的Windows控制台界面,例如PyWin32中的win32con扩展),但它们都不符合我的需求,就像这个看起来那么多.)

c python windows console

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