在上一节 数学运算 中,我们学会了在 Python 终端计算圆的面积,如下:
|
|
但是,这样的方式多用于临时计算,不够灵活。 那么,我们能否编写一个完整的程序,根据用户输入的圆半径,计算圆面积并输出到屏幕呢?
首先,我们来对程序进行分解:
- 获取用户输入内容,即圆的半径;
- 根据输入内容,计算圆的面积;
- 输出相应的计算结果;
在上一节 数学运算 中,我们学会了在 Python 终端计算圆的面积,如下:
|
|
但是,这样的方式多用于临时计算,不够灵活。 那么,我们能否编写一个完整的程序,根据用户输入的圆半径,计算圆面积并输出到屏幕呢?
首先,我们来对程序进行分解:
开始讨论弱引用( weakref )之前,我们先来看看什么是弱引用?它到底有什么作用?
假设我们有一个多线程程序,并发处理应用数据:
|
|
应用数据 Data 由一个 key 唯一标识,同一个数据可能被多个线程同时访问。由于 Data 需要占用很多系统资源,创建和消费的成本很高。我们希望 Data 在程序中只维护一个副本,就算被多个线程同时访问,也不想重复创建。
考试成绩出来了,同学们都考得怎么样呢?心里不禁忐忑起来。
老师说,成绩达到 60 分或以上的才及格,不及格的童鞋要完成额外布置的作业!!! 那么,怎么让 Python 帮我们判断成绩是不是及格呢?
我们可以用 if 语句来判断某个成绩是否及格,示例程序如下:
|
|
线程是计算机程序实现并发处理的重要手段,它共享进程地址空间等资源,却可独立调度。与进程相比,线程更加轻量级,线程间通讯也更为便捷。
线程使用方法因操作系统而异,操作系统原生多线程编程 API 也是五花八门。 Python 将线程编程 原语 进一步抽象,并提供一套简洁的通用 API ,复杂度已降到最低。
接下来,我们以一个最简单的例子,一览为快。
在前面的章节,我们学习了如何在屏幕上输出文本,例如 Hello world。 那么,如果要输出 3 次 Hello world ,该如何操作呢? 我们可以暴力解决,连写 3 行代码:
|
|
但是,如果要输出 1000 次?10000 次呢?显然,这种方式并不理想。
为了更好地执行重复性任务,循环 语句应运而生。 循环语句是程序控制结构中的一种,可以让计算机重复执行任务。 Python 中有两种不同的循环语句,我们分别介绍:
借助 for 循环结构,我们可以这样输出 3 次 Hello world :
|
|
进程是系统进行资源分配和调度的基本单位,拥有独立的地址空间。与线程相比,进程由于资源独立,运行更为稳定。另一方面,进程却不如线程轻量,创建开销更大。
合理应用多进程编程技巧,对提升程序多核处理能力意义重大。然而,进程使用方法因操作系统而异,操作系统原生多进程编程 API 也是五花八门。 Python 将进程编程 原语 进一步抽象,并提供一套简洁的通用 API ,复杂度已降到最低。
接下来,我们以一个最简单的例子,一览为快。
班里成立了一支篮球队,最初由 Tim 等 5 名同学组成。 如何对篮球队员进行管理呢? 学完本节的 列表对象 ,这个问题对你来说将是小菜一碟。
列表 ( list ) 是 Python 的基本数据类型之一,它是一种 有序集合 ,用 [] 将 元素 围起来,元素间以 逗号 分隔。 例如, [1, 2, 3, 4, 5] 就是一个 list :
|
|
该列表中保存了 5 个数字,像这种用于存储数据的对象,被称为 容器对象 。
那么,怎么用 list 来管理球队成员呢? 我们可以用一个 list 来存储这些同学的信息:
我们已经学习了 list 对象的内部结构,知道它底层是用动态数组实现的。在 list 头部进行插入或删除,都要挪动其后的所有数据,性能非常差!因此,我们不能将 list 对象作为队列使用。
好在 Python 标准库提供了另一种对象—— deque ,很好地补全了 list 的短板。deque 是一种类似 list 的线性表,但它在两端插入删除数据的时间复杂度都是 $O(1)$ ,因而可以作为队列来使用。
|
|
您可能会问了,deque 到底跟 list 有何不同?为何两端都能同时支持 $O(1)$ 的插入删除呢?
班级新来了一个女同学 Joe ,如果要记录她的名字、性别和年龄,可以选用 Python 的哪种数据类型来保存呢?
实际上, Python 提供了一种数据类型 —— 元组 ( tuple ) ,可以很好地保存此类数据。 元组是一种 有序集合,用括号 () 将元素包含在内,各个元素之间以 逗号 隔开。
例如,我们可以这样来存储 Joe 的信息,包括名字、性别和年龄:
|
|
现有一个水果篮,里面放了 3 个苹果、10 个橙子、8 个香蕉。大家想一想,如果要用 Python 来记录水果篮里面每种水果的数量,该怎么做呢?
通过 Python列表对象入门 一节,我们知道列表可以用来存储多个数据。因此,我们可以用两个列表 fruits 和 numbers ,来分别记录水果的种类和数量:
|
|