• 基础题(三)


    12、三元运算规则以及应用场景?


    三元运算符的功能与“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”之类的流程语句,在上述情形之下,它的确太简练了,这是它的诱人之处。

    对于喜欢偷懒和追求代码简洁的人来说,用三元运算符取代if流程语句应该是绝佳的选择。即使不用考虑“三元”中条件句以外的任意某一“元”,使用三元运算符仍然比if语句简练。以下语句的语法是正确的,它们以小解引号的方式忽略了第二或第三“元”:

    $a>$b ? print "Yes" : "";
    $a>$b ? '': print 'No';

    应该注意的是:在使用三元运算符时,建议使用print语句替代echo语句。

     13、列举 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 的后续开发意味着,开发人员可以对问题被及时解决抱有信心,并且随着时间的推移更多的功能将被添加进来,程序也会变得更加有效。

     14、用一行代码实现数值交换:

         a = 1
     
     b = 2

    a,b=b,a
    print(a,b)  #a=2,b=1

    15、Python3和Python2中 int 和 long的区别?

    long整数类型被Python3废弃,统一使用int

    16、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代替。

  • 相关阅读:
    LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
    洛谷 P1969 积木大赛 —— 水题
    洛谷 P1965 转圈游戏 —— 快速幂
    洛谷 P1970 花匠 —— DP
    洛谷 P1966 火柴排队 —— 思路
    51Nod 1450 闯关游戏 —— 期望DP
    洛谷 P2312 & bzoj 3751 解方程 —— 取模
    洛谷 P1351 联合权值 —— 树形DP
    NOIP2007 树网的核
    平面最近点对(加强版)
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9164351.html
Copyright © 2020-2023  润新知