操作>>说明如下:
顺序组成两个动作,丢弃第一个产生的任何值,如命令式语言中的排序操作符(如分号).
这是让我困惑的例子:
> ([1] ++ [2]) >> ([2] ++ [3])
[2,3,2,3]
Run Code Online (Sandbox Code Playgroud)
我期待列表[2,3],它将是正确表达部分的结果.如何解释[2,3,2,3]的结果?
序言:我想静态检查C程序中struct成员的数量,所以我创建了两个宏,每个宏都将int常量存储__LINE__到变量中:
#include <stdio.h>
#include <string.h>
#define BEGIN(log) const int __##log##_begin = __LINE__;
#define END(log) const int __##log##_end = __LINE__;
BEGIN(TEST);
struct TEST {
int t1;
int t2;
float t3;
int t4;
int t5;
int t6;
};
END(TEST)
main()
{
static_assert(__TEST_end - __TEST_begin == 6 + 3, "not_equal");
}
Run Code Online (Sandbox Code Playgroud)
当我将C ++编译器与-std = c ++ 11选项一起使用时(c ++ test.cpp -std = c ++ 11),它可以正常工作,但是相同的代码(将static_assert替换为_Static_assert)在C语言中不起作用(gcc版本4.8.4),但有一个奇怪的错误,因为此表达式可以在编译时求值:
test.c:在函数“ main”中:test.c:18:17:错误:静态断言中的表达式不是常量_Static_assert(__ TEST_end-__TEST_begin == 6 + 4,“ not_equal”);
如何解决此错误或达到C语言的原始目标?
我在ARM Raspbian linux,Python 2.7.13和amd64 Gentoo linux,Python 2.7.14上运行代码
我有一个功能
import threading
def r() :
s = 1
while True:
s = s + 1
Run Code Online (Sandbox Code Playgroud)
然后我为这个函数创建线程
t = threading.Thread(target=r)
t.start()
Run Code Online (Sandbox Code Playgroud)
然后在htop中我可以看到另一个生成的进程(有自己的PID)!和处理.线程文档说:
CPython实现细节:在CPython中,由于Global Interpreter Lock,只有一个线程可以同时执行Python代码(即使某些面向性能的库可能会克服此限制).如果您希望应用程序更好地利用计算资源对于多核机器,建议您使用多处理.
为什么这种行为与文档不同?