Python:用函数还是用复杂的表达式

  

要不要使用复杂表达式

  

Perl语言的原作者   曾经说过,伟大的程序员都有三个优点:懒惰,暴躁和自负。乍一看这三个词语没有一个是褒义词,但在程序员的世界里,这三个词有不同的意义。首先,懒惰会促使程序员去写一些省事儿的程序来辅助自己或别人更好的完成工作,这样我们就无需做那些重复和繁琐的劳动;同理能够用3行代码解决的事情,我们也绝不会写出10行代码来。其次,暴躁会让程序员主动的去完成一些你还没有提出的工作,去优化自己的代码让它更有效率,能够3秒钟完成的任务,我们绝不能容忍1分钟的等待。最后,自负会促使程序员写出可靠无误的代码,我们写代码不是为了接受批评和指责,而是为了让其他人来膜拜。

  

那么接下来就有一个很有意思的问题值得探讨一下,我们需要一个程序从输入的三个数中找出最大的那个数。这个程序对任何会编程的人来说都是小菜一碟,甚至不会编程的人经过10分钟的学习也能搞的定。下面是用来解决这个问题的Python代码。

  时间=<>以前a  int(输入(& # 39;a =, & # 39;))   b =, int(输入(& # 39;b =, & # 39;))   c =, int(输入(& # 39;c =, & # 39;))   if  a 祝辞,b:   the_max =,   其他:   时间=the_max  b   if  c 祝辞,the_max:   the_max =c   打印(& # 39;从而,max 是:& # 39;,,the_max)   

但是我们刚才说了,程序员都是懒惰的,很多程序员都会使用三元条件运算符来改写上面的代码。

  时间=<>以前a  int(输入(& # 39;a =, & # 39;))   b =, int(输入(& # 39;b =, & # 39;))   c =, int(输入(& # 39;c =, & # 39;))   时间=the_max  a  if  a 在b  else  b   时间=the_max  c  if  c 在the_max  else  the_max   打印(& # 39;从而,max 是:& # 39;,,the_max)       Python:用函数还是用复杂的表达式”>
  
  <p>需要说明的是,Python在2.5版本以前是没有上面代码第4行和第5行中使用的三元条件运算符的,究其原因是Guido van Rossum (Python之父)认为三元条件运算符并不能帮助Python变得更加简洁,于是那些习惯了在C/c++或Java中使用三元条件运算符(在这些语言中,三元条件运算符也称为“猫王运算符”,因为?:放在一起很像著名摇滚歌手猫王猫王的大背头)的程序员试着用,和或运算符的短路特性来模拟出三元操作符,于是在那个年代,上面的代码是这样写的。</p>
  时间=<>以前a  int(输入(& # 39;a&nbsp=, & # 39;))
  b =, int(输入(& # 39;b =, & # 39;))
  c =, int(输入(& # 39;c =, & # 39;))
  时间=the_max  a 祝辞,b 以及a 或是b
  时间=the_max  c 祝辞,the_max 以及c 一、the_max
  打印(& # 39;从而,max 是:& # 39;,,the_max) </pre>
  <p>但是这种做法在某些场景下是不能成立的,且看下面的代码。</p>
  <>以前a =0
  b =-100
  #,下面的代码本来预期输出一个的值,结果却得到了b的值
  #,因为一个的值0在进行逻辑运算时会被视为假的来处理
  打印(True 以及a 或是;b)
  #,print (a  if  True  else  b) </pre>
  <p>所以在Python 2.5以后引入了三元条件运算符来避免上面的风险(上面代码被注释掉的最后一句话)。那么,问题又来了,上面的代码还可以写得更简短吗?答案是肯定的。</p>
  时间=<>以前a  int(输入(& # 39;a&nbsp=, & # 39;))
  b =, int(输入(& # 39;b =, & # 39;))
  c =, int(输入(& # 39;c =, & # 39;))
  打印(& # 39;从而,max 是:& # 39;,,(a  if  a 祝辞,b  else  b), if  (a  if  a 祝辞,b  else  b),祝辞,c  else  c) </pre>
  <p>但是,这样做真的好吗?如此复杂的表达式是不是让代码变得晦涩了很多呢?我们发现,在实际开发中很多开发者都喜欢过度的使用某种语言的特性或语法糖,于是简单的多行代码变成了复杂的单行表达式,这样做真的好吗?这个问题我也不止一次的问过自己,现在我能给出的答案是下面的代码,使用辅助函数。</p>
  <>以前def  the_max (x, y):
  return  x  if  x 祝辞,y  else  y
  a =, int(输入(& # 39;a =, & # 39;))
  b =, int(输入(& # 39;b =, & # 39;))
  c =, int(输入(& # 39;c =, & # 39;))
  打印(& # 39;从而,max 是:& # 39;,,the_max (the_max (a, b), c)) <h2 class=Python:用函数还是用复杂的表达式