Python中的不确定行为
Undefined Behaviour in Python
in c 或 c 我知道有东西叫做
当某些表达式具有副作用时,未定义的行为
在表达评估中。假设我想计算以下内容:
c = 10
f() + g() + c
,但在某个时候G使C =5。(C是Glob变量(
python的行为是什么?它会不确定为 c ?
python文档的6.15
Python评估从左到右的表达式。请注意,在评估作业时,右侧在左侧进行评估。
在以下几行中,表达式将以后缀的算术顺序进行评估:
expr1, expr2, expr3, expr4
(expr1, expr2, expr3, expr4)
{expr1: expr2, expr3: expr4}
expr1 + expr2 * (expr3 - expr4) <----- This is of importance to us.
expr1(expr2, expr3, *expr4, **expr5)
expr3, expr4 = expr1, expr2
因此,此处将按从左到右按顺序调用功能。因此,您将看到的任何更改都是由于从左到右所调用的功能。
python函数呼叫中的是表达式。
c代码:
#include <stdio.h>
int c;
int f (void)
{
return 1;
}
int g (void)
{
return ++c;
}
int main()
{
c = 3;
printf("%d", f() + g() + c);
return 0;
}
do 不是调用未定义的行为。但是,它确实调用了未指定的行为。这些是不同的,正式的术语:未定义,未指定和实施定义的行为
首先请注意,f() + g() + c
为为 (f() + g()) + c
,但这对术语本身实际上是评估的顺序没有告诉您。。
此代码的结果可以是1 + (3+1) + 3 = 8
或1 + (3+1) + 4 = 9
,具体取决于操作数g()
是否在操作数c
之前或之后评估。+
运算符操作数的评估顺序是未指定的,因此我们不知道首先评估的操作数,也不应该编写依赖于某个顺序的代码。
代码只会给出两个提到的结果中的任何一个,它不会做任何完全疯狂的事情,例如崩溃或给出垃圾结果,哪些包含不确定行为的代码可以做到。不确定行为的一个例子是c++ + c++
。
示例之间的差异是副作用发生的位置。请参阅未定义的行为和序列点
如果c
是global
变量,并且g()
将相同的c
成为5
的值,这意味着这是unspecified behaviour
。
请注意,Python口译员从左到右评估表达式,这意味着c
将其添加到f() + g()
。
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 不确定如何装饰我的C++库代码以在 C 中使用
- C++功能泄漏内存,我是C++新手,不确定如何解决
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 代码在 CodeSignal 中工作不正确。不确定这是否是我的代码缺陷
- 为什么以下代码是不确定的?
- 编译错误:"lvalue required as left operand of assignment" 不确定原因
- 误用指针会产生分段错误。我仍然不确定如何纠正它
- 我不确定为什么代码没有运行,它在编译时抛出错误,说它无法找到 PrintArray()
- 不确定出了什么问题(字符串输入)
- C++睡眠时间不确定
- 在C++中做一个场景问题,我不确定如何处理布尔和if循环
- 代码输出随机符号,我不确定出了什么问题
- 可变值变化,不确定原因
- 有没有办法让C++从 cin 中接收不确定数量的字符串?
- Qt Designer使用Python 3.5而不是Python 3.7
- 尝试一次将单个字符读取到大小不确定的数组中
- 我不确定如何引用此神经网络训练方法中的权重
- 函数参数:不确定排序还是未排序?
- Python中的不确定行为