十二、三元运算规则以及应用场景?程序员
三元运算符的功能与“if...else”流程语句一致,它在一行中书写,代码很是精练、执行效率更高。在PHP程序中恰当地使用三元运算符可以令脚本更为简洁、高效。代码格式以下:编程
(expr1) ? (expr2) : (expr3);
解释:若是条件“expr1”成立,则执行语句“expr2”,不然执行“expr3”。
实现一样的功能,若使用条件流程语句,就须要书写多行代码:数组
if(expr1) { expr2; } else { expr3; }
可见,前面所说的三元运算符之好并不是夸张。但是,多数状况下咱们只在代码较为简单的时候使用三元运算符,即执行语句只为单句的时候。如:编程语言
$a>$b ? print "a大于b" : print "a小于b";
事实上,三元运算符能够扩展使用,当设置的条件成立或不成立,执行语句均可以不止一句,试看如下格式:函数
(expr1) ? (expr2).(expr3) : (expr4).(expr5);
咱们很是明显地看到,多个执行语句可使用用字符串运算符号(“.”)链接起来,各执行语句用小角括号包围起来以代表它是一个独立而完整的执行语句。这样扩展后它的功能更为逼近“if...else”流程语句。性能
同时三元运算符还能够嵌套使用。例如,a大于b成立时:若是a小于c,那么x=c-a不然x=a-c;不然a小于b成立时:若是b小于c,那么x=c-b不然x=b-c:编码
$a>$b ? $x=($a<$c ? $c-$a : $a-$c) : $x=($b<$c ? $c-$b : $b-$c);
嵌套使用的三元运算符可读性不太好,往后对代码的维护很可能存在问题,但比起“if...else”之类的流程语句,在上述情形之下,它的确太简练了,这是它的诱人之处。spa
对于喜欢偷懒和追求代码简洁的人来讲,用三元运算符取代if流程语句应该是绝佳的选择。即便不用考虑“三元”中条件句之外的任意某一“元”,使用三元运算符仍然比if语句简练。如下语句的语法是正确的,它们以小解引号的方式忽略了第二或第三“元”:code
$a>$b ? print "Yes" : ""; $a>$b ? '': print 'No';
应该注意的是:在使用三元运算符时,建议使用print语句替代echo语句。对象
1三、列举 Python2和Python3的区别?
(1)Print
在 Python 2 中, print 被视为一个语句而不是一个函数,这是一个典型的容易弄混的地方,由于在 Python 中的许多操做都须要括号内的参数来执行。若是在 Python 2 中你想要你的控制台输出 ”Sammy the Shark is my favorite sea creature”,你应该写下这样的 print 语句:
print "Sammy the Shark is my favorite sea creature"
在使用 Python 3 时,print()会被显式地视为一个函数,所以要输出上面相同的字符串,你可使用这种很是简单且易于使用的函数语法:
print("Sammy the Shark is my favorite sea creature")
这种改变使得 Python 的语法更加一致,而且在不一样的 print 函数之间进行切换更加容易。就方便性而言,print()语法也与 Python 2.7 向后兼容,所以您的 Python 3 print()函数能够在任一版本中运行。
(2)整数的除法
在 Python 2 中,您键入的任何不带小数的数字,将被视为整数的编程类型。虽然乍看起来这彷佛是一个简单的处理编程类型的方法,但有时候当你试图除以整数以指望得到一个带小数位的答案(称为浮点数),如:
5 / 2 = 2.5
然而,在 Python 2 中,整数是强类型的,而且不会变成带小数位的浮点数,即便这样作具备直观上的意义。
当除法/符号的任一侧的两个数字是整数时,Python 2进行底除法,使得对于商x,返回的数字是小于或等于x的最大整数。这意味着当你写下 5 / 2 来对这两个数字相除时,Python 2.7 将返回最大的小于或等于 2.5 的整数,在这种情形下:
a = 5 / 2 print a #a=2
为解决这个问题,你能够在 5.0 / 2.0 中添加小数位,以获得预期的答案 2.5。
在 Python 3 中,整数除法变得更直观,如
a = 5 / 2 print(a) #a=2.5
你也可使用 5.0 / 2.0 返回 2.5,可是若是你想作底层划分,你应该使用 “//” 这样的 Python 3 语法,像这样:
b = 5 // 2 print(b) #b=2
在 Python 3 中的这种修改使得整数除法更为直观,而且它的特色是不能向后兼容 Python 2.7。
(3)支持 Unicode
当编程语言处理字符串类型时,也就是一个字符序列,它们能够用几种不一样的方式来作,以便计算机将数字转换为字母和其余符号。
Python 2 默认使用 ASCII 字母表,所以当您输入“Hello,Sammy!”时, Python 2 将以 ASCII 格式处理字符串。被限定为在多种扩展形式上的数百个字符,用ASCII 进行字符编码并非一种很是灵活的方法,特别是使用非英语字符时。
要使用更通用和更强大的Unicode字符编码,这种编码支持超过128,000个跨越现今和历史的脚本和符号集的字符,你必须输入
u“Hello,Sammy!”
, 前缀 u 表明 Unicode。
Python 3 默认使用 Unicode,这节省了程序员多余的开发时间,而且您能够轻松地在程序中直接键入和显示更多的字符。由于 Unicode 支持更强大的语言字符多样性以及 emoji 的显示,因此将它做为默认字符编码来使用,能确保全球的移动设备在您的开发项目中都能获得支持。
若是你但愿你的 Python 3 代码向后兼容 Python 2,你能够经过在你的字符串的前面保留 “u” 来实现。
(4)后续发展
Python 3 和 Python 2 之间的最大区别不是语法上的,而是事实上 Python 2.7 将在 2020 年失去后续的支持,Python 3 将继续开发更多的功能和修复更多的错误。
最近的发展包括格式化的字符串,类建立的简单定制,和用一种更干净的句法方式来处理矩阵乘法。
Python 3 的后续开发意味着,开发人员能够对问题被及时解决抱有信心,而且随着时间的推移更多的功能将被添加进来,程序也会变得更加有效。
1四、用一行代码实现数值交换:
a = 1
b = 2
a,b=b,a print(a,b) #a=2,b=1
1五、Python3和Python2中 int 和 long的区别?
long整数类型被Python3废弃,统一使用int
1六、xrange和range的区别?
range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。
range示例:
>>> range(5) [0, 1, 2, 3, 4] >>> range(1,5) [1, 2, 3, 4] >>> range(0,6,2) [0, 2, 4]
xrange 函数说明:用法与range彻底相同,所不一样的是生成的不是一个数组,而是一个生成器。
xrange示例:
>>> xrange(5) xrange(5) >>> list(xrange(5)) [0, 1, 2, 3, 4] >>> xrange(1,5) xrange(1, 5) >>> list(xrange(1,5)) [1, 2, 3, 4] >>> xrange(0,6,2) xrange(0, 6, 2) >>> list(xrange(0,6,2)) [0, 2, 4]
由上面的示例能够知道:要生成很大的数字序列的时候,用xrange会比range性能优不少,由于不须要一上来就开辟一块很大的内存空间,这两个基本上都是在循环的时候用:
for i in range(0, 100): print i for i in xrange(0, 100): print i
这两个输出的结果都是同样的,实际上有不少不一样,range会直接生成一个list对象:
a = range(0,100) print type(a) print a print a[0], a[1]
输出结果:
<type 'list'> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 0 1
而xrange则不会直接生成一个list,而是每次调用返回其中的一个值:
a = xrange(0,100) print type(a) print a print a[0], a[1]
结果以下:
<type 'xrange'> xrange(100) 0
总结:
1.range和xrange都是在循环中使用,输出结果同样。
2.range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。
3.xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,于是性能很是好。
注意:Python 3.x已经去掉xrange,所有用range代替。