举个例子:
>>> 5+10
15
>>> a = 5 + 10
>>> a
15
如果没有显式的print语句,Python如何以及为什么这样做?
如果我在IPython单元中执行相同的操作,则实际上只有最后一个这样的值以这种方式打印在stdout上:
In[1]: 5+10
1
Out[1]: 1
为什么会这样?
当Python处于“交互式”模式时,它将启用非交互式模式中没有的某些行为。例如,sys.displayhook
最初在PEP
217中
指定。
如果value不为None,则此函数将其打印到sys.stdout,并将其保存在中
__builtin__._
。sys.displayhook是在评估在交互式Python会话中输入的表达式的结果时调用的。
您可以修改此行为:
>>> import sys
>>> def shook(expr):
... print(f'can haz {expr}?')
...
>>> sys.displayhook = shook
>>> 123
can haz 123?
>>> False
can haz False?
>>> None
can haz None?
并将其设置回正常状态:
>>> sys.displayhook = sys.__displayhook__
>>> 3
3
在默认的Python repl中,sys.displayhook
是
>>> import sys;
>>> sys.displayhook
<built-in function displayhook>
但是在IPython中
In [1]: import sys
In [2]: sys.displayhook
Out[2]: <IPython.terminal.prompts.RichPromptDisplayHook at 0x7f630717fa58>
这就是为什么您看到Python和IPython之间行为不同的原因。
上面的片段结果是x=1,y=10,z=3,请解释这段代码。提前致谢
问题内容: 我有以下代码 我知道根据JLS,只允许将常量表达式作为批注属性的值。但为什么?如果数据类型匹配,为什么还不够?如果要在运行时对表达式进行求值,是否有可能出错?每个规范背后都有逻辑推理吗? 问题答案: 注释就像类型扩展或有关该类型的元数据。 因为Java是一种静态类型的语言(意味着类型在编译时是已知的),所以在编译时也知道注释属性数据(元数据)似乎是合理的- 您正在定义/声明有关注释(扩
/* main.c */ extern void print_var_1(void); extern void print_var_2(void); int main(void) { print_var_1(); print_var_2(); return 0; } /* static-1.c */ #include <stdio.h> static int var = 1;
PEP 572引入了为Python 3.8实现的赋值表达式(俗称Walrus操作符)。这似乎是一个非常重要的新特性,因为它将允许在理解和lambda函数中进行这种形式的赋值。 赋值表达式的语法、语义学和语法规范到底是什么? 为什么在PEP 379中关于“添加赋值表达式”的类似想法之前遭到拒绝的情况下,引入了这个新的(似乎相当激进的概念)?
在以下代码中(在本地和Wandbox上测试): MSVC 15.8.5编译失败: (全部指包含的行) Clang 8(HEAD)报告: gcc 9(负责人)报告: 为什么? 首先,它们显然都认为enum-id是非常数,尽管它们显然实际上是众所周知的编译时常数值。 其次,MSVC抱怨读取超出生存期,但的生存期及其值应在中的整个使用过程中延长。 第三,gcc有一个奇怪的const-vs非const抱怨