暂无个人介绍
到目前为止,您可能已经注意到大多数容器对象都可以使用 for 语句: print(element) for element in (1, 2, 3): print(element) for key in {'one':1, 'two':2}: print(key) for char in "123": print(char) for line in open("myfile.txt"): print(line, end='') 这种访问风格清晰、简洁又方便。
当然,如果不支持python继承,语言特性就不值得称为“类”。派生类定义的语法如下所示: <statement-1> . . . <statement-N> 名称 BaseClassName 必须定义于包含派生类定义的作用域中。
通常,方法在绑定后立即被调用: 在 MyClass 示例中,这将返回字符串 'hello world'。 但是,立即调用一个方法并不是必须的: x.f 是一个方法对象,它可以被保存起来以后再调用。 例如: while True: print(xf()) 将继续打印 hello world,直到结束。
类对象支持两种操作:属性引用和实例化。 属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name。 有效的属性名称是类对象被创建时存在于类命名空间中的所有名称。 因此,如果类定义是这样的: """A simple example class""" i = 12345 def f(self): return 'hello world' 那么 MyClass.i 和 MyClass.f 就是有效的属性引用,将分别返回一个整数和一个函数对象。
当一个名为 spam 的模块被导入的时候,解释器首先寻找具有该名称的内置模块。如果没有找到,然后解释器从 sys.path 变量给出的目录列表里寻找名为 spam.py 的文件。sys.path 初始有这些目录地址: 包含输入脚本的目录(或者未指定文件时的当前目录)。
Python附带了一个标准模块库,在单独的文档Python库参考(以下称为“库参考”)中进行了描述。一些模块内置于解释器中;它们提供对不属于语言核心但仍然内置的操作的访问,以提高效率或提供对系统调用等操作系统原语的访问。
包是一种通过用“带点号的模块名”来构造 Python 模块命名空间的方法。 例如,模块名 A.B 表示 A 包中名为 B 的子模块。正如模块的使用使得不同模块的作者不必担心彼此的全局变量名称一样,使用加点的模块名可以使得 NumPy 或 Pillow 等多模块软件包的作者不必担心彼此的模块名称一样。
Python也包含有 集合 类型。集合是由不重复元素组成的无序的集。它的基本用法包括成员检测和消除重复元素。python集合对象也支持像 联合,交集,差集,对称差分等数学运算。 花括号或 set() 函数可以用来创建集合。
我们看到列表和字符串有很多共同特性,例如索引和切片操作。他们是 序列 数据类型(参见 序列类型 --- list, tuple, range)中的两种。随着 Python 语言的发展,其他的序列类型也会被加入其中。
有一种方式可以从列表按照给定的索引而不是值来移除一个元素: 那就是 del 语句。 它不同于会返回一个值的 pop() 方法。 del 语句也可以用来从列表中移除切片或者清空整个python列表(我们之前用过的方式是将一个空列表赋值给指定的切片)。
列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列。 例如,假设我们想创建一个平方列表,像这样 squares = []for x in range(10):... squares.append(x**2) ... squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]注意这里创建(或被重写)的名为 x 的变量在for循环后仍然存在。
Python有一个 'with' 语句,它封装了块的执行,在块的入口和出口调用代码。有些语言的结构是这样的: a = 1 # equivalent to obj.a = 1 total = total + 1 # obj.total = obj.total + 1 在Python中,这样的结构是不明确的。
用户经常对这样的结果感到惊讶: >>> 1.2 - 1.0 0.19999999999999996 并且认为这是 Python中的一个 bug。其实不是这样。这与 Python 关系不大,而与底层平台如何处理浮点数字关系更大。
关键字参数 如果你有一些具有许多参数的函数,而你又希望只对其中的一些进行指定,那么你可以通过命名它们来给这些参数赋值——这就是关键字参数(Keyword Arguments)——我们使用命名(关键字)而非位置(一直以来我们所使用的方式)来指定函数中的参数。
默认参数值 Python 默认参数值,对于一些函数来说,你可能为希望使一些参数可选并使用默认的值,以避免用户不想为他们提供值的情况。默认参数值可以有效帮助解决这一情况。你可以通过在函数定义时附加一个赋值运算符(=)来为参数指定默认参数值。
如果你想给一个在程序顶层的变量赋值(也就是说它不存在于任何作用域中,无论是函数还是类),那么你必须告诉 Python 这一变量并非局部的,而是全局(Global)的。我们需要通过 global 语句来完成这件事。
定义在函数内部的变量只在函数内部可见,也就是说,它是函数的局部变量。 当你在一个函数的定义中声明变量时,它们不会以任何方式与身处函数之外但具有相同名称的变量产生关系,也就是说,这些变量名只存在于函数这一局部(Local)。
函数参数 函数可以获取参数,这个参数的值由你所提供,借此,函数便可以利用这些值来做一些事情。这些参数与变量类似,这些变量的值在我们调用函数时已被定义,且在函数运行时均已赋值完成。函数中的参数通过将其放置在用以定义函数的一对圆括号中指定,并通过逗号予以分隔。
安装 我们在本书中提及“Python 3”时,我们指的是任何大于等于 3.5.1 的 Python 发行版。1
简单 Python 是一门简单且简约的语言。阅读一份优秀的 Python 程序代码就如同在阅读英语文章一样,尽管这门英语要求十分严格!Python 这种伪代码式的特质正是它的一大优势。它能够让你专注于解决问题的方案,而不是语言本身。
Python 是一种极少数能声言兼具 简单 与 功能强大 的编程语言。你将惊异于发现你正在使用的这门编程语言是如此简单,它专注于如何解决问题,而非拘泥于语法与结构。 官方对 Python 的介绍如下: Python 是一款易于学习且功能强大的编程语言。
一种比较常见的操作是对一个变量进行一项数学运算并将运算得出的结果返回给这个变量,因此对于这类运算通常有如下的快捷表达方式: a = 2 a = a * 3 同样也可写作: a = 2 a *= 3 要注意到 变量 = 变量 运算 表达式 会演变成 变量 运算 = 表达式。
你所编写的大多数语句(逻辑行)都包含了表达式(Expressions)。一个表达式的简单例子便是 2+3。表达式可以拆分成运算符(Operators)与操作数(Operands)。运算符(Operators)是进行某些操作,并且可以用诸如 + 等符号或特殊关键词加以表达的功能。
数据结构 数据结构(Data Structures)基本上人如其名——它们只是一种结构,能够将一些数据聚合在一起。换句话说,它们是用来存储一系列相关数据的集合。 Python 中有四种内置的数据结构——列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)。
函数(Functions)是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是所谓的调用(Calling)函数。我们已经使用过了许多内置的函数,例如 len 和 range。
刚学Python的时候,特别是看一些库的源码时,经常会看到func(args, kwargs)这样的函数定义,这个和让人有点费解。 有时你可能想定义的函数里面能够有任意数量的变量,也就是参数数量是可变的,这可以通过使用星号来实现(将下方案例保存为 function_varargs.
return 语句用于从函数中返回,也就是中断函数。我们也可以选择在中断函数时从函数中返回一个值。案例(保存为 function_return.
Python 有一个甚是优美的功能称作文档字符串(Documentation Strings),在称呼它时通常会使用另一个短一些的名字docstrings。DocStrings 是一款你应当使用的重要工具,它能够帮助你更好地记录程序并让其更加易于理解。