一个同事给了我一个难题,我无法弄清楚这个C程序实际上是如何编译和运行的。这个>>>=运算符和奇怪的1P1字面值是什么?我在Clang和GCC中进行了测试。没有警告,输出为“??”

#include <stdio.h>

int main()
{
    int a[2]={ 10, 1 };

    while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )
        printf("?");

    return 0;
}
"foo" instanceof String //=> false
"foo" instanceof Object //=> false

true instanceof Boolean //=> false
true instanceof Object //=> false
false instanceof Boolean //=> false
false instanceof Object //=> false

12.21 instanceof Number //=> false
/foo/ instanceof RegExp //=> true

// the tests against Object really don't make sense

数组字面量和对象字面量匹配…

[0,1] instanceof Array //=> true
{0:1} instanceof Object //=> true

为什么不是所有人?或者,为什么不都不呢? 那么,它们是什么实例呢?

在FF3、IE7、Opera和Chrome中也是如此。至少它是一致的。

如何用Python文字将整数表示为二进制数?

我很容易就找到了hex的答案:

>>> 0x12AF
4783
>>> 0x100
256

和八进制:

>>> 01267
695
>>> 0100
64

在Python中如何使用文字来表示二进制?


回答摘要

Python 2.5及更早版本:可以使用int('01010101111',2)表示二进制,但不能使用字面量。 Python 2.5及更早版本:无法表示二进制字面值。 Python 2.6 beta:你可以这样做:0b1100111或0b1100111。 Python 2.6 beta:也将允许0o27或0o27(第二个字符是字母O)表示八进制。 Python 3.0 beta版:与2.6版相同,但不再允许八进制使用旧的027语法。

为了使用十进制数据类型,我必须对变量初始化这样做:

decimal aValue = 50.0M;

M部分代表什么?

在c#中的逐字字符串文字(@"foo")中,反斜杠不被视为转义,因此使用\"来获得双引号是行不通的。有没有办法在逐字串文字中获得双引号?

可以理解,这是行不通的:

string foo = @"this \"word\" is escaped";

[] =空列表

() =空元组

{} =空字典

空集合有类似的符号吗? 或者我必须写set()?

我最近比较了[]和list()的处理速度,惊讶地发现[]比list()快三倍多。我用{}和dict()进行了相同的测试,结果几乎相同:[]和{}都花了大约0.128秒/百万次循环,而list()和dict()分别花了大约0.428秒/百万次循环。

为什么会这样?[]和{}(和probably()和",太)立即传递回一些空股票文字的副本,而他们的显式命名对应(list(), dict(), tuple(), str())完全创建一个对象,无论他们是否实际上有元素?

我不知道这两种方法有什么不同,但我很想知道。 我在文档或SO上找不到答案,而且搜索空括号的问题比我想象的要多。

我通过调用timeit.timeit("[]")和timeit.timeit("list()"),以及timeit.timeit("{}")和timeit.timeit("dict()")来获得计时结果,分别比较列表和字典。我运行的是Python 2.7.9。

我最近发现了“为什么if True比if 1慢?”,它比较了if True和if 1的性能,似乎涉及到类似的字面与全局场景;也许这也值得考虑。