Python进阶教程001内置数据类型

发布时间:2019-05-26 22:36:39编辑:auto阅读(2060)

    关于Python的基础知识已经告一段落了,我们接下来深入的研究Python的使用方法,以及以后将要使用到的类库。

    格式化字符串


    Python是支持字符串的格式化输出的,在之前的学习中我们也遇到过和使用过,不过我们没有深入的研究和讨论,只是一笔带过,今天我们好好的研究一下字符串的格式化。可能会用到非常复杂的表达式,但是最基本的用法是将一个值插入到一个有字符串格式符%s的字符串中。

    字符串的格式化


    >>> k = "uid"
    >>> v = "sa"
    >>> "%s=%s" % (k,v)
    'uid = sa'

    我们可以看出整个表达式的结果是一个字符串。第一个%s被变量k的值替换;第二个%s的值被变量v的值替换。在字符串中的其它字符都按照原样打印输出。

    你可能在想:做一个字符串的拼接需要这么复杂吗?没有问题,的确很麻烦,只不过我们做的不仅仅是字符串的连接,在这个语句下,它不仅仅是格式化,同时也进行了强制类型转换。

    字符串格式化与字符串连接的比较


    >>> uid = "sa"
    >>> pwd = "secret"
    >>> print(pwd + "is not a good password for  " + uid)      1
    secretis not a good password for  sa
    >>> print("%s is not a good password for %s" % (pwd , uid))    2
    secret is not a good password for sa
    >>> userCount = 6
    >>> print("Users connected : %d" % (userCount,))          3 4
    Users connected : 6
    >>> print("Users connected : %d" % (userCount))            5
    Users connected : 6
    >>> print("Users connected : "+ userCount)
    Traceback (most recent call last):
      File "<pyshell#29>", line 1, in <module>
        print("Users connected : "+ userCount)
    TypeError: can only concatenate str (not "int") to str
    >>> 

    1.+是字符串的连接操作符。

    2.在这个简单的例子中,字符串格式化实现与连接的结果。

    3.(userCount, ) 是一个只包含一个元素的 tuple。是的, 语法有一点奇怪, 但是使用它的理由就是:显示地指出它是一个 tuple, 而不是其他。实际上, 当定义一个 list, tuple 或 dictionary 时, 您可以总是在最后一个元素后面跟上一个逗号, 但是当定义一个只包含一个元素的 tuple 时逗号是必须的。如果省略逗号, Python 不会知道 (userCount) 究竟是一个只包含一个元素的 tuple 还是变量 userCount 的值。

    4.字符串格式化通过将 %s 替换成 %d 即可处理整数。

    5.试图将一个字符串同一个非字符串连接会引发一个异常。与字符串格式化不同, 字符串连接只能在被连接的每一个都是字符串时起作用。

    数值的格式化


     

    >>> print("Today's stock price: %f" % 50.123)          1
    Today's stock price: 50.123000
    >>> print("Today's stock price: %.2f" % 50.123)               2
    Today's stock price: 50.12
    >>> print("Change since yesterday: %+.2f" % 1.333)            3
    Change since yesterday: +1.33
    >>> 

    1.%f 格式符选项被认为是一个十进制浮点数, 不指定精度时打印 6 位小数。

    2.使用包含 ".2" 精度修正符的 %f 格式符选项将只打印 2 位小数。

    3.您甚至可以混合使用各种修正符。 添加 + 修正符用于在数值之前显示一个正号或负号。 注意 ".2" 精度修正符仍旧在他原来的位置, 用于只打印 2 位小数。

    映射list


    Python的强大特性是其针对list的解析,它提供了一种紧凑的方法,可以通过对list中的每个元素应用一个函数,从而将list映射成另一个list。

    >>> li = [1,8,9,3]
    >>> [lis*2 for lis in li]       1
    [2, 16, 18, 6] 
    >>> li                 2
    [1, 8, 9, 3]
    >>> li = [lis*2 for lis in li]   3
    >>> li
    [2, 16, 18, 6]
    >>> 

    1.li是我们将要映射的list,Python将li中的每个元素都循环遍历,然后对每个元素做一个操作返回到list中形成一个新的list。

    2.这里我们知道为什么说是形成一个新的list,因为原来的li这个list没有发生改变。

    3.但是如果将新生成的list赋值给li就会改变原有的list。

    keys,value,和iteams函数


    >>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
    >>> params.keys()           1
    dict_keys(['server', 'database', 'uid', 'pwd'])
    >>> params.values()         2
    dict_values(['mpilgrim', 'master', 'sa', 'secret'])
    >>> params.items()          3
    dict_items([('server', 'mpilgrim'), ('database', 'master'), ('uid', 'sa'), ('pwd', 'secret')])
    >>> 

    1.keys方法返回一个所有键的list。

    2.values方法返回一个所有值的list。

    3.items 方法返回一个形如 (key, value) 的 tuple 的 list。这个 list 包括 dictionary 中所有的数据。

    连接list与分割字符串


    >>> ";".join(["%s=%s"%(k,v) for k,v in params.items()])
    'server=mpilgrim;database=master;uid=sa;pwd=secret'

    在我们继续之前有一个有趣的地方。我一直在重复函数是对象, 字符串是对象, 每个东西都是对象的概念。您也许认为我的意思是说字符串 是对象。但是不对, 仔细地看一下这个例子, 您将会看到字符串 ";" 本身就是一个对象, 您在调用它的 join 方法。

    总之, join 方法将 list 中的元素连接成单个字符串, 每个元素用一个分号隔开。分隔符不必是一个分号;它甚至不必是单个字符。它可以是任何字符串。

    注意:

    join 只能用于元素是字符串的 list; 它不进行任何的类型强制转换。连接一个存在一个或多个非字符串元素的 list 将引发一个异常。

    分割字符串


     

    >>> li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
    >>> s = ";".join(li)
    >>> s
    'server=mpilgrim;uid=sa;database=master;pwd=secret'
    >>> s.split(";")                 1
    ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
    >>> s.split(";",1)               2
    ['server=mpilgrim', 'uid=sa;database=master;pwd=secret']
    >>> 

    1.splitjoin 正好相反, 它将一个字符串分割成多元素 list。 注意, 分隔符 (“;”) 被完全去掉了, 它没有在返回的 list 中的任意元素中出现。

    2.split 接受一个可选的第二个参数, 它是要分割的次数。 (可选参数,我们之前讲过)

关键字