字符串
由单引号或者双引号来指定字符串(二者没有区别)
字符串是不可改变的。这意味着一旦你创造了一串字符串,你就不能再改变它。尽管这看起来像是一件坏事,但实际上并非如此。我们将会在稍后展现的多个程序中看到为何这一点不是一个限制。
基本数据类型是数字和字符串
函数
函数参数,实参和形参
局部参数和全局变量(global)
默认参数
关键字参数:我们使用命名(关键字)而非位置(一直以来我们所使用的方式)来指定函数中的参数。这样可以:其一,我们不再需要考虑参数的顺序,函数的使用将更加容易。其二,我们可以只对那些我们希望赋予的参数以赋值,只要其它的参数都具有默认参数值。
可变参数:有时你可能想定义的函数里面能够有任意数量的变量,也就是参数数量是可变的,这可以通过使用星号来实现
DocSting:DocStrings 是一款你应当使用的重要工具,它能够帮助你更好地记录程序并让其更加易于理解。令人惊叹的是,当程序实际运行时,我们甚至可以通过一个函数来获取文档!
我们可以通过使用函数的
__doc__
(注意其中的双下划綫)属性(属于函数的名称)来获取函数print_max
的文档字符串属性。只消记住 Python 将所有东西都视为一个对象,这其中自然包括函数。我们将在后面的类(Class)章节讨论有关对象的更多细节。如果你曾使用过 Python 的
help()
函数,那么你应该已经了解了文档字符串的用途了。它所做的便是获取函数的__doc__
属性并以一种整洁的方式将其呈现给你。你可以在上方的函数中尝试一下——只需在程序中包含help(print_max)
就行了。要记住你可以通过按下q
键来退出help
。自动化工具可以以这种方式检索你的程序中的文档。因此,我强烈推荐你为你编写的所有重要的函数配以文档字符串。你的 Python 发行版中附带的
pydoc
命令与help()
使用文档字符串的方式类似。
模块
from...import语句
模块的__name__
每个模块都有一个名称,而模块中的语句可以找到它们所处的模块的名称。这对于确定模块是独立运行的还是被导入进来运行的这一特定目的来说大为有用。正如先前所提到的,当模块第一次被导入时,它所包含的代码将被执行。我们可以通过这一特性来使模块以不同的方式运行,这取决于它是为自己所用还是从其它从的模块中导入而来。这可以通过使用模块的 __name__
属性来实现。
dir()函数
内置的 dir()
函数能够返回由对象所定义的名称列表。 如果这一对象是一个模块,则该列表会包括函数内所定义的函数、类与变量。
包
变量通常位于函数内部,函数与全局变量通常位于模块内部。如果希望组织起这些模块的话,就要用到包(Package)
包是指一个包含模块与一个特殊的__init__.py文件的文件夹,后者向Python表明这一文件夹是特殊的,包含了Python模块
让我们这样设想:你想创建一个名为“world”的包,其中还包含着 “asia”、“africa”等其它子包,同时这些子包都包含了诸如“india”、 “madagascar”等模块。
- <some folder present in the sys.path>/ - world/ - __init__.py - asia/ - __init__.py - india/ - __init__.py - foo.py - africa/ - __init__.py - madagascar/ - __init__.py - bar.py
数据结构
Python中有四种内置的数据结构——列表(list),元组(Tuple),字典(Dictionary)和集合(Set)
列表
列表:一种用于保存一系列有序项目的集合
#项目的列表应该用方括号括起来。一旦创建了一张列表,可以添加,删除或者搜索列表中的项目。
#列表是以一种可变的(mutable)数据类型
元组
元组(Tuple) 将多个对象保存到一起,近似地看作列表。 元组的一大特征类似于字符串,是不可变的,不能编辑或者更改元组。
#元组是通过特别指定项目来定义的,在指定项目时,给它们加上括号,并在括号内部用逗号进行分隔。
#元组通常用于保证某一语句或某一用户定义的函数可以安全地采用一组数值
注:包含 0 或 1 个项目的元组
一个空的元组由一对圆括号构成,就像 myempty = ()
这样。然而,一个只拥有一个项目的元组并不像这样简单。你必须在第一个(也是唯一一个)项目的后面加上一个逗号来指定它,如此一来 Python 才可以识别出在这个表达式想表达的究竟是一个元组还是只是一个被括号所环绕的对象,也就是说,如果你想指定一个包含项目 2
的元组,你必须指定 singleton = (2, )
。
字典
将key键值和value值联立到一起。注意键值必须是唯一的,键值使用不可变的对象(如字符串)
#成对的键值与值使用冒号分隔,每一对键值与值使用逗号区分,他们由一对花括号括起。
#字典中的成对的键值—值配对不会以任何方式进行排序。如果希望为它们安排一个特别的次序,只能在使用它们之前自行进行排序。
序列
#list,tuple,dictionary可以看作序列(sequence)的某种表现形式
#序列的主要功能是测试资格(Membership Test)(也就是in与not in表达式)和索引操作(Indexing Operations),
#他们能够允许我们直接获取序列中的特定项目
#序列同时拥有一种切片(Slicing)运算符,能够允许我们序列中的某段切片
集合(set)
简单对象的无序集合(collection)。当集合中的项目存在与否比起次序或其出现次数更加重要时,我们就会使用集合。
#通过使用集合,可以测试某些对象的资格或情况,检查他们是否是其他集合的子集,找到两个集合的交集,等
#引用
记住如果希望建立一份诸如序列等复杂对象的副本(而非整数这种简单的对象(Object)),必须使用切片来制作副本