python3 入门必学内容
一、函数
1. 函数可以通过 关键字参数 的形式来调用,形如 keyword = value
2. *args 可变个数的参数。这些参数被包装进一个元组。在这些可变个数的参数之前,可以有零到多个普通的参数。通常,这些 可变 参数是参数列表中的最后一个, 因为它们将把所有的剩余输入参数传递给函数。任何出现在*args 后的参数是关键字参数,这意味着,他们只能被用作关键字,而不是位置参数。
3. 当你要传递的参数已经是一个列表,但要调用的函数却接受分开一个个的参数值,可以在调用函数时加一个 * 操作符来自动把参数列表拆开。
4. 通过 lambda 关键字, 可以创建短小的匿名函数。Lambda 形式可以用于任何需要的函数对象。出于语法限制,它们只能有一个单独的表达式。语义上讲,它们只是普通函数定义中的一个语法技巧。类似于嵌套函数定义,lambda 形式可以从外部作用域引用变量。
二、编码风格
对于 Python, PEP 8 引入了大多数项目遵循的风格指导。它给出了一个高度可读,视觉友好的编码风格。每个 Python 开发者都应该读一下,大多数要点都会对你有帮助:
使用 4 空格缩进,而非 TAB。
在小缩进(可以嵌套更深)和大缩进(更易读)之间,4 空格是一个很好的折中。TAB 引发了一些混乱,最好弃用。
折行以确保其不会超过 79 个字符。这有助于小显示器用户阅读,也可以让大显示器能并排显示几个代码文件。
使用空行分隔函数和类,以及函数中的大块代码。
可能的话,注释独占一行
使用文档字符串
把空格放到操作符两边, 以及逗号后面, 但是括号里侧不加空格: a = f(1, 2) + g(3, 4) 。
统一函数和类命名。推荐类名用 驼峰命名, 函数和方法名用 小写_和_下划线。总是用 self 作为方法的第一个参数(关于类和方法的知识详见 初识类 )。
不要使用花哨的编码,如果你的代码的目的是要在国际化 环境。 Python 的默认情况下,UTF-8,甚至普通的ASCII 总是工作的最好。
同样,也不要使用非ASCII 字符的标识符,除非是不同语种的会阅读或者维护代码。
三、数据结构
(一)列表
1. 列表推导式为从序列中创建列表提供了一个简单的方法。 普通的应用程式通过将一些操作应用于序列的每个成员并通过返回的元素创建列表,或者通过满足特定条件的元素创建子序列。
2. 列表推导式由包含一个表达式的括号组成,表达式后面跟随一个 for 子句,之后可以有零或多个 for 或 if 子句。 结果是一个列表,由表达式依据其后面的 for 和 if 子句上下文计算而来的结果构成。
3. 列表推导式可以嵌套。
4. 有个方法可以从列表中按给定的索引而不是值来删除一个子项: del 语句。它不同于有返回值的 pop() 方法。语句 del 还可以从列表中删除切片或清空整个列表(我们以前介绍过一个方法是将空列表赋值给列表的切片)。
5. 循环: 在列表中循环时,索引位置和对应值可以使用 enumerate() 函数同时得到。同时循环两个或更多的列表,可以使用 zip() 整体打包。需要逆向循环列表的话,先正向定位列表,然后调用 reversed() 函数。要按排序后的顺序循环列表的话,使用 sorted() 函数,它不改动原列表,而是生成一个新的已排序的列表。
(二)集合
1. set (集合)是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和sysmmetric difference(对称差集)等数学运算。
2. 大括号或 set() 函数可以用来创建集合。 注意:想要创建空集合,你必须使用 set() 而不是 {} 。
3. 类似 for lists ,也有一种集合推导式语法。
(三)字典
1. 理解字典的最佳方式是把它看做无序的键: 值对 (key:value pairs)集合,键必须是互不相同的(在同一个字典之内)。一对大括号创建一个空的字典: {} 。初始化链表时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。
2. 对一个字典执行 list(d.keys()) 将返回一个字典中所有关键字组成的无序列表(如果你想要排序,只需使用sorted(d.keys()) )。
3. 使用 in 关键字(指Python 语法)可以检查字典中是否存在某个关键字(指字典)。
4. 在字典中循环时,关键字和对应的值可以使用 items() 方法同时解读出来。
(四)迭代器,生成器
1. 大多数容器对象都可以用 for 遍历:这种形式的访问清晰、简洁、方便。迭代器的用法在 Python 中普遍而且统一。在后台, for 语句在容器对象中调用 iter() 。 该函数返回一个定义了 next() 方法的迭代器对象,它在容器中逐一访问元素。没有后续的元素时, next() 抛出一个 StopIteration 异常通知 for 语句循环结束。
2. Generators 是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,需要返回数据的时候使用yield 语句。每次 next() 被调用时,生成器回复它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)
四、编程点
1. 为了让Python 将目录当做内容包,目录中必须包含 __init__.py 文件。 这是为了避免一个含有烂俗名字的目录无意中隐藏了稍后在模块搜索路径中出现的有效模块,比如 string 。 最简单的情况下,只需要一个空的__init__.py 文件即可。 当然它也可以执行包的初始化代码,或者定 __all__ 变量。
2. import 语句按如下条件进行转换: 执行from package import * 时, 如果包中的 __init__.py 代码定义了一个名为 __all__ 的列表,就会按照列表中给出的模块名进行导入。如果没有定义 __all__ , from Sound.Effects import * 语句 不会 从 sound.effects 包中导入所有的子模块。无论包中定义多少命名,只能确定的是导入了 sound.effects 包(可能会运行 __init__.py 中的初始化代码)以及包中定义的所有命名会随之导入。这样就从 __init__.py 中导入了每一个命名(以及明确导入的子模块)。
五、输入和输出
1. 如何将值转化为字符串?很幸运,Python 有办法将任意值转为字符串:将它传入 repr()或 str() 函数。
函数 str() 用于将值转化为适于人阅读的形式,而 repr() 转化为供解释器读取的形式(如果没有等价的语法,则会发生 SyntaxError 异常)。
某对象没有适于人阅读的解释形式的话, str() 会返回与 repr() 等同的值。
2. str.rjust() 方法,它把字符串输出到一列,并通过向左侧填充空格来使其右对齐。类似的方法还有 str.ljust() 和 str.center() 。
str.zfill() 它用于向数值的字符串表达左侧填充 0。
str.format() 的基本用法如下: 大括号和其中的字符会被替换成传入 str.format() 的参数。大括号中的数值指明使用传入 str.format() 方法的对象中的哪一个。如果在 str.format() 调用时使用关键字参数,可以通过参数名来引用值。定位和关键字参数可以组合使用。'!a' (应用 ascii()), '!s' (应用 str() ) 和 '!r' (应用 repr() ) 可以在格式化之前转换值。字段名后允许可选的 ':' 和格式指令。这允许对值的格式化加以更深入的控制。在字段后的 ':' 后面加一个整数会限定该字段的最小宽度,这在美化表格时很有用。
3. 操作符 % 也可以用于字符串格式化。它以类似 sprintf()-style 的方式解析左参数,将右参数应用于此,得到格式化操作生成的字符串,因为 str.format() 还很新,大量 Python 代码还在使用 % 操作符。然而,因为旧式的格式化方法最终将从语言中去掉,应该尽量使用 str.format() 。
4. 要读取文件内容,需要调用 f.read(size) ,该方法读取若干数量的数据并以字符串形式返回其内容, size 是可选的数值,指定字符串长度。如果没有指定 size 或者指定为负数,就会读取并返回整个文件。当文件大小为当前机器内存两倍时,就会产生问题。反之,会尽可能按比较大的 size 读取和返回数据。如果到了文件末尾,f.read() 会返回一个空字符串(”“)。
5. 用关键字 with 处理文件对象是个好习惯。它的先进之处在于文件用完后会自动关闭,就算发生异常也没关系。
6. Python 提供了一个名为 pickle 的标准模块。这是一个令人赞叹的模块,几乎可以把任何 Python 对象 (甚至是一些Python 代码段!)表达为为字符串,这一过程称之为封装 ( pickling )。从字符串表达出重新构造对象称之为拆封( unpickling )。封装状态中的对象可以存储在文件或对象中,也可以通过网络在远程的机器之间传输。pickle 是存储 Python 对象以供其它程序或其本身以后调用的标准方法。
7. try ... except 语句可以带有一个 else 子句 ,该子句只能出现在所有except 子句之后。当try 语句没有抛出异常时,需要执行一些代码,可以使用这个子句。使用 else 子句比在 try 子句中附加代码要好,因为这样可以避免 try ... except 意外的截获本来不属于它们保护的那些代码抛出的异常。不管有没有发生异常, finally 子句 在程序离开 try 后都一定会被执行。当 try 语句中发生了未被 except 捕获的异常(或者它发生在 except 或 else 子句中),在 finally 子句执行完后它会被重新抛出。 try 语句经由 break ,continue 或 return 语句退 出也一样会执行 finally 子句。
六、类class
1. 大多数 Python 代码:以一个下划线开头的命名(例如 _spam )会被处理为 API 的非公开部分(无论它是一个函数、方法或数据成员)。它会被视为一个实现细节,无需公开。
2. 有时类似于Pascal 中“记录(record)”或C 中“结构(struct)”的数据类型很有用,它将一组已命名的数据项绑定在一起。一个空的类定义可以很好的实现这它。
上一篇: 笑霸冤家学生冷段子