如图,右边表达式加了小括号,为什么还是先执行左侧?
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 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?
- ¥15 c++头文件不能识别CDialog