如图,右边表达式加了小括号,为什么还是先执行左侧?
2条回答 默认 最新
- 家在田塍 2019-10-29 02:04关注
你提的这个问题非常好,可以清楚地反映出,你对python中“表达式评估顺序”和“运算符顺序”的概念混淆了,
关于两者的概念和区别,需要你很用心的查找资料。我在这里只能部分给你一些启发,通过运行这些与你问题类似的代码,
来帮你初步理解他们的作用和区别。希望你认真跑一下这个程序,阅读其中的注释,比较一下结果,祝你好运!希望对你
有所启发和帮助。def a(): print('a') return 10 def b(): print('b') return 10 def c(): print('c') return 10 def d(): print('d') return 10 #首先需要弄清楚python 中的表达式评估顺序和运算符顺序两者的概念以及他们的区别。 #python中,采用“先评估表达式,再运算表达式”的逻辑。 #python中,只有赋值语句比较特殊,它是先评估赋值符号“=”右边的表达式,除此以外,所有的表达式评估顺序都是从左向右的。 #不妨通过例子来说明,更容易理解他们的区别。 print('示例1:') value=a()-(b()+(c()*d())) print(value)#此例子中,先从左向右评估表达式,即分别执行a(),b(),c(),d();随后,用前面获得的评估值进行运算,此时运算符的优先级顺序才体现出来,即10-(10+(10*10))=-100;所以结果是,先打印a,b,c,d,而后才输出运算结果-100。 print('示例2:') value=a()+b()==(c()*d()) print(value)#再来看你这个例子,先从左向右评估表达式,所以依次执行a(),b(),c(),d();随后,将返回值带到表达式中运算,获得结果为false。 #不知道你看出来了没有,python一般是先从左向右评估表达式,获得他们的值之后,再进行运算,在运算阶段才考虑运算顺序。 #再来看几个有趣并且常常令人困惑的运算符,and ,or 以及 & ,|,你会对评估表达式的概念理解更进一步。 #and,从左到右评估,如果and前面的表达式为false,那么and后面的表达式将不会被评估,也就是不会被执行。 print('示例3:') value=0 and a() print(value)# 在评估阶段,发现0已经是false了,那么该and布尔表达式已经为0,因此and之后的a()将不会被评估。 print('示例4:') value=a() and (a()+(b()+(c()*d()))) print(value)# 从左向右评估,and 左面的值为10,即为True,那么接着评估右面,依次先获得值;而后运算,获得结果。 # or,从左向右评估,如果or的左面为True,那么or后面将不会评估;如果左面为False,再评估右面。 print('示例5:') value=0 or a()+b() print(value)#先从左向右评估,发现左面为0,继续评估,a(),b()先后运行得到10,10;随后运算,由于or优先级低于+,因此获得0 or 20的结果,最终输出20. print('示例6:') value=a() or a()+b()*c() print(value)# 从左向右评估,发现a()已经是10,为True,所以不再进行评估。输出结果10。 #将上述 and换为&,以及or换成|,看看运行结果,你发现了什么不同?思考一下他们的区别吧!好好查查资料。 print('示例7:') value=0 & a() print(value) print('示例8:') value=a() & (a()+(b()+(c()*d()))) print(value) print('示例9:') value=0 | a()+b() print(value) print('示例10:') value=a() | a()+b()*c() print(value)
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
- ¥15 nginx反向代理获取ip,java获取真实ip
- ¥15 eda:门禁系统设计
- ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
- ¥15 376.1电表主站通信协议下发指令全被否认问题
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
- ¥15 复杂网络,变滞后传递熵,FDA
- ¥20 csv格式数据集预处理及模型选择
- ¥15 部分网页页面无法显示!
- ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?