好文档 - 专业文书写作范文服务资料分享网站

Python项目开发实战 - 图文

天下 分享 时间: 加入收藏 我要投稿 点赞

第1章 Python核心知识回顾 可比较的,sorted()函数会返回一个已排序的键列表。如果键不可比较(就像前面示例那样),sorted()方法会抛出一个TypeError异常。 collections模块也提供了一个defaultdict类。这个类能帮助你指定一个默认值。在任何情况下使用一个不存在的键时,它都会为这个给定的键用默认值创建一个新元素。这与之前描述的setdefault方法很相似。这可能是个喜忧参半的事情,因为它可能会因为糟糕拼写的键产生虚假的条目。 在布尔表达式中,空字典被看成是False。所有其他字典都被看作是True。 表1-3 字典操作 操 作 keys,values,items 描 述 这些方法返回类似列表的对象(称为字典视图),分别包含键、值和键值元组。这些视图是动态的,所以任何针对字典的改动(删除操作等)在它们创建之后还是会反映在视图中 get,pop 这些方法接受一个键和一个可选的默认值作为参数。如果键存在,那么get方法从字典中返回键对应的值。如果键不在字典中,则返回这个默认值。pop方法以同样的方式工作,但是如果键存在,则会把它从字典中删除。get有一个默认值None。但是如果没有给出默认值,pop会抛出一个KeyError异常 setdefault fromkeys 该操作的表现很像get。但是,如果键不在字典中,它会用给定的键和默认值在字典中创建一个新的键值对 该操作使用一个序列来提供键和一个给定的默认值(如果没有给定值,则默认值是None)来初始化一个字典。该操作通常会直接调用dict.fromkeys(),而不是在一个现有的字典上调用它 1.2.10 集 集(Set)体现了一个在编程中常用的数学概念:一个集中的元素必须是唯一的。在Python中,集和有键但无对应值的字典有很多相似的地方。 集在Python的类型是set。对于字典键的基本规则同样也适用于集。也就是说,集里的值必须是不可变的并且是唯一的(的确这也是集的精髓)。set()函数的默认返回值是空集。这也是唯一能表达一个空集的方式,因为{}已经被用来表示一个空字典。set()函数接受任意类型的集合(collection)作为参数,并且把它转换为一个集(字典的值会丢失)。 在Python中还有一种集类型,称为frozenset。它是不可变的,并且基本上是一个只读集。它的构造函数和set()一样工作,但是它只支持一部分集操作。因为frozenset是不可变的,所以可以使用frozenset作为一个普通集的元素。 集的字面值表示为用花括号将逗号分隔的元素括起来: myset = {1,2,3,4,5} 13 Python项目开发实战 集不支持索引或分片操作。和字典一样,集没有任何固有的顺序。sorted()函数返回一个有序的值序列。集有一系列数学风格的集操作。这些操作是其他集合所没有的。表1-4列出了set类型和frozenset类型都支持的操作。 表1-4 集操作 操 作 in 描 述 该操作检查单一元素是否在集中。注意:如果被测试的元素本身是一个集,S1,当且仅当S1作为一个集是目标集的元素时,结果才是真。它与subset()测试是不同的 issubset,<=,< 这些测试检查一个集是不是目标集的子集。被测试集的所有元素是否都是目标集的元素。如果两个集是完全相同的,前两个测试的结果会返回True,而< 操作符的测试会返回False issuperset,>=,> 这些测试检查一个集是否是另一集的超集。目标集的所有元素是否都是源集的元素。如果两个集是完全相等的,那么前两个测试的结果会返回True,而最后一个操作会返回False union,| intersection,& difference,- symmetric_difference,^ 这些操作返回两个(或更多)集的并集。union方法接受一个逗号分隔的集列表作为参数,但是|操作符的用法是将它插在集之间 这些操作返回两个(或更多)集的交集。这个用法与union()相似 这些操作会返回那些在源集中但不在目标集中的元素 返回不在两个集的交集中的所有元素。这个方法只能应用于两个集。但^操作符可以通过中缀风格被应用在多个集上 需要注意的是,表1-4中的方法衍生形式可以接受任意容器类型作为参数,但是中缀操作只能作用在集上。 表1-5列出了只支持集的修饰符操作。尽管frozenset可以作为其中几个操作的参数,但这些操作不能被用在frozenset上。注意:这些操作会修改源集本身,它们并不返回一个集,而是返回Python的默认值None。这里面的中缀操作只作用于两个集(不像表1-4中的操作),并且只支持真正的集,不支持其他容器类型。可以在多个集上使用这些方法。在需要时,其他容器类型会被转换成集。 在布尔表达式中,空集被看作是False。其他集都被看作是True。 在下一节中,当探索Python提供的不同的控制结构时,你会在代码中用到数据类型。 表1-5 集修饰符操作 操 作 update,|= intersection_update,&= 描 述 这些操作会把目标集(或多个集)的元素添加到源集中 除了在源集和目标集的交集中的元素,这些操作会移除其他所有元素。如果涉及多于两个集,该操作的结果是所有涉及的集的交集 14 第1章 Python核心知识回顾 (续表) 操 作 difference_update,-= 描 述 这些操作会移除所有在集交集中的元素。如果涉及多个集,被移除的元素就是在源集与其他任意集的交集中的元素 symmetric_difference_update,^= add remove discard pop clear 这些操作返回除了在交集中的两个集的值。注意,该操作一次只能作用于两个集 该操作把给定的元素添加到集中 该操作把指定元素从集中移除。如果没有发现这个元素,它会抛出一个KeyError异常 如果给定的元素存在,该操作会把它从集中移除。如果元素不存在,该操作不会抛出KeyError异常 该操作会随机地移除一个元素,并返回这个元素。如果集为空,它会抛出一个KeyError异常 该操作会清空集中的所有元素 1.3 使用Python控制结构 在这一节,你会首先看到一个Python程序的整体结构,然后了解到每个基础的控制结构,包括顺序、选择和迭代。最后,你会看到Python如何处理错误,回顾上下文管理器,以及学习如何与外部世界交换数据。 1.3.1 结构化你的程序 Python程序并没有任何必需的预定义入口(比如一个main()函数)。它们的表现形式就是一个文本文件中的源代码。程序从文件的顶端开始被顺序地读入和执行(定义,比如函数,被执行的方式是函数被创建然后把它赋值给一个名称。但函数内部的代码在函数被调用之前并不执行)。 Python并没有任何特别的语义来表明一个源文件是一个程序还是一个模块。而且可以看到,一个给定的文件既可以作为程序也可以作为模块使用。一个经典的可执行程序文件包括一系列重要的用于导入任何需要的代码模块的语句,一些函数和类的定义,以及一些可以直接执行的代码。 在实际中,对于一个重要的程序来说,大部分函数和类定义都会放在模块文件中,然后被包含在导入中。这在启动应用程序时添加了一个很短的驱动代码。通常这个代码会放在一个函数中,而这个函数常被命名为main()。但这纯粹只是为了遵循编程惯例,并非是Python要求的。 最后,这个main函数需要被调用。通常在主脚本的末端会放置一个特殊的if语句来 15 Python项目开发实战 调用这个main函数。如下所示: if __name__ == \main() 当Python检测到一个程序文件正在被解释器执行而不是作为一个被导入的模块,它会把特殊变量__name__(注意两边都是双下划线)设置为\。这意味着任何在if代码块内的代码只有在这种情况下才会被执行:脚本被作为主程序运行而不是作为被另一个程序导入的文件。如果这个文件本来只是想被用作模块的话,main()函数可能会被test()函数替换。test()函数会执行一些列的单元测试。再次强调下,实际使用的函数名对Python来说是无关紧要的。 1.3.2 使用序列、块和注释 最基础的编程结构就是一个语句序列。通常,Python语句会单独占据一行,所以一个序列也仅仅是一系列的行。 x = 2 y = 7 z = 9 在这个示例中,所有语句都是赋值操作。其他有效的语句包括函数调用、模块导入或定义。定义包括函数定义和类定义。下面讨论的各种各样的控制结构也是有效的语句。 Python是一个块结构语言,并且程序块是通过缩进级别指示的。缩进的数量是非常灵活的。尽管大多数Python程序员坚持使用三个或四个空格来最优化可读性,但Python本身不介意这个。不同的集成开发环境(IDE)和文本编辑器对如何使用缩进有它们自己的理解。如果使用多种编程工具,你可能发现你会因为编程工具使用了不同的制表符和空格组合而得到缩进错误报告。如果可能的话,设置你的编辑器来使用空格而不是制表符。 缩进原则在注释上是个例外。一个Python注释以一个#符号开始一直到这行的结束。不管当前的缩进级别,Python接受在一行中的任何位置开始注释。但是根据惯例,即使是注释,程序员也倾向于同样保持缩进的级别。 注意:Python允许你在一行中包含多个语句,但是这些语句之间要用分号分隔。因此,下面这行代码包含了三个语句: x = 2; y = 7; z = 9 Python社区不推荐使用这种风格,更倾向于一个语句单独一行。 16 第1章 Python核心知识回顾 1.3.3 选择一个执行路径 Python支持有限选项的选择。最基础的结构是if/elif/else构造。elif和else部分是可选的。它看起来如下所示: if pages < 9: print(\elif pages > 99: print(\else: print(\注意在每个测试表达式末端的冒号。这是Python中的指示器,它用来指示一个新的代码块即将来临。它没有开始和结束标记(比如{}),冒号是唯一的标示。如果它包含的代码块只有一行,那么可以把它放在与冒号相同的行中,否则,它必须作为一个缩进的代码块。即使是只包含一行代码,许多Python程序员也更喜欢使用缩进的代码块风格。 同样需要注意的是,可以有任意多个elif测试表达式,但是至多只可以有一个else子句,没有也可以。 另一个在Python中的你能发现的选择结构是条件表达式选择器。它根据给定的测试条件从多个值中产生一个。它看起来如下所示: if else 一个示例是一个屏幕坐标一直被加1直到某一极限(可能是屏幕的最大分辨率),然后被重置为0。这可以被写为: coord = coord + increment if coord < limit else 0 与之相对等的更传统的写法是: if coord < limit coord += increment else: coord = 0 你应该非常小心地使用条件表达式选择器,因为它非常容易产生晦涩的代码。如果不确定的话,则应该使用扩展的if/else形式。 最终,还有一点值得注意的是Python的比较表达式。在许多编程语言中,如果想要测试一个值是否在两个限定值之间,则需要两个单独的测试,如下所示: if aValue < upperLimit and aValue > lowerLimit: # do something here Python会非常乐意看到这样的代码,但是它也提供了一个有用的捷径。可以把两个比较表达式按如下方式联合起来: if lowerLimit < avalue < upperLimit: # do something here 17

Python项目开发实战 - 图文

第1章Python核心知识回顾可比较的,sorted()函数会返回一个已排序的键列表。如果键不可比较(就像前面示例那样),sorted()方法会抛出一个TypeError异常。collections模块也提供了一个defaultdict类。这个类能帮助你指定一个默认值。在任何情况下使用一个不存在的键时,它都会为这个给定的键用默认值创建一个新元素。这与之前描述的setdefault方
推荐度:
点击下载文档文档为doc格式
3ewa54p63e9y6yn8bcwn
领取福利

微信扫码领取福利

微信扫码分享