python入门手册--笔记

python入门手册 非正式介绍语言及体系相关基本知识和概念。
目的:能够阅读和编写模块或程序。
参考(https://www.runoob.com/manual/pythontutorial/docs/html/)

1

2 传递模式

参数传递 。import sys 来获取这个列表,调用解释器时,脚本名和附加参数传入一个名为 sys.argv 的字符串列表。
交互模式。这种模式下它根据 主提示符 来执行,主提示符通常标识为三个大于号 (>>>);继续的部分被称为 从属提示符,由三个点标识 (...),需要在最后多输入一个空行,表示多行命令结束。

3 注释

注释 :以 # 字符起始,直至实际的行尾。注释可以从行首开始,也可以在空白或代码之后,但是不出现在字符串中。
计算:+-*/% int() float()
编码:
Latin-1 ,ASCII ,UTF-8 和 UTF-16 之类的编码可以互相转换(译者:Latin-1 表示一个很小的拉丁语言符号集,与 ASCII 基本一致,其实不能用来表示庞大的东方语言字符集)。后两个是变长编码,将每一个 Unicode 字符存储为一到多个字节。通常默认编码为 ASCII,此编码接受 0 到 127 这个范围的编码,否则报错。
转移符:\

4 函数

函数定义:
[def]https://docs.python.org/2.7/reference/compound_stmts.html#def) 引入了一个函数 定义 。在其后必须跟有函数名和包括形式参数的圆括号。函数体语句从下一行开始,必须是缩进的。

函数体的第一行语句可以是可选的字符串文本,这个字符串是函数的文档字符串,或者称为 docstring(文档字符串)。
这一行应该以大写字母开头,以句号结尾。
如果文档字符串有多行,第二行应该空出来,与接下来的详细描述明确分隔。接下来的文档应该有一或多段描述对象的调用约定、边界效应等。

编码风格:
[PEP 8]引入了大多数项目遵循的风格指导(https://www.python.org/dev/peps/pep-0008) ,主要着重点如下:

  • 使用 4 空格缩进,而非 TAB。

    在小缩进(可以嵌套更深)和大缩进(更易读)之间,4 空格是一个很好的折中。TAB 引发了一些混乱,最好弃用。

  • 折行以确保其不会超过 79 个字符。

    这有助于小显示器用户阅读,也可以让大显示器能并排显示几个代码文件。

  • 使用空行分隔函数和类,以及函数中的大块代码。

  • 可能的话,注释独占一行

  • 使用文档字符串

  • 把空格放到操作符两边,以及逗号后面,但是括号里侧不加空格:a = f(1, 2) + g(3, 4)

  • 统一函数和类命名。

    推荐类名用 驼峰命名,函数和方法名用 小写_和_下划线。总是用 self 作为方法的第一个参数(关于类和方法的知识详见 初识类)。

  • 不要使用花哨的编码,如果你的代码的目的是要在国际化 环境。Python 的默认情况下,UTF-8,甚至普通的 ASCII 总是工作的最好。

  • 同样,也不要使用非 ASCII 字符的标识符,除非是不同语种的会阅读或者维护代码。

5 数据结构

列表对象:
insert(n,x) 把元素x插入到指定的n+1位置
append(x) 把元素x追加到列表尾部
remove(x) 把链表中的第一个元素x删除
reverse() 把链表倒置
sort() 把链表排序
pop() 把链表最后一个元素删除

把链表当堆栈使用
堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。
append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。

把链表当列队使用
队列作为特定的数据结构,最先进入的元素最先释放(先进先出)。

函数编译
内置函数非常有用:
filter()
map()
reduce()

map() 函数的功能是对可迭代对象中的每个元素,都调用指定的函数,并返回一个 map 对象。
注意,该函数返回的是一个 map 对象,不能直接输出,可以通过 for 循环或者 list() 函数来显示。

map() 函数的基本语法格式如下:
map(function, iterable)
其中,function 参数表示要传入一个函数,其可以是内置函数、自定义函数或者 lambda 匿名函数;iterable 表示一个或多个可迭代对象,可以是列表、字符串等。

还是对列表中的每个元素乘以 2。

listDemo = [1, 2, 3, 4, 5]
new_list = map(lambda x: x * 2, listDemo)
print(list(new_list))
运行结果为:
[2, 4, 6, 8, 10]
由于 map() 函数是直接由用 C 语言写的,运行时不需要通过 Python 解释器间接调用,并且内部做了诸多优化,所以相比其他方法,此方法的运行效率最高。

filter()函数的基本语法格式如下:
filter(function, iterable)
此格式中,funcition 参数表示要传入一个函数,iterable 表示一个可迭代对象。

filter() 函数的功能是对 iterable 中的每个元素,都使用 function 函数判断,并返回 True 或者 False,最后将返回 True 的元素组成一个新的可遍历的集合。

返回一个列表中的所有偶数。

listDemo = [1, 2, 3, 4, 5]
new_list = filter(lambda x: x % 2 == 0, listDemo)
print(list(new_list))
运行结果为:
[2, 4]

reduce() 函数通常用来对一个集合做一些累积操作,其基本语法格式为:
reduce(function, iterable)
其中,function 规定必须是一个包含 2 个参数的函数;iterable 表示可迭代对象。

注意,由于 reduce() 函数在 Python 3.x 中已经被移除,放入了 functools 模块,因此在使用该函数之前,需先导入 functools 模块。

计算某个列表元素的乘积。

import functools
listDemo = [1, 2, 3, 4, 5]
product = functools.reduce(lambda x, y: x * y, listDemo)
print(product)
运行结果为:
120

del也可以删除整个变量。

循环技巧
在序列中循环时,索引位置和对应值可以使用enumerate()函数同时得到。
同时循环两个或更多的序列,可以使用zip()整体打包。
需要逆向循环序列的话,先正向定位序列,然后调用reversed()函数。
要按排序后的顺序循环序列的话,使用 sorted()函数,它不改动原序列,而是生成一个新的已排序的序列。
遍历字典时,使用iteritems()方法可以同时得到键和对应的值。
若要在循环内部修改正在遍历的序列(例如复制某些元素),建议您首先制作副本。在序列上循环不会隐式地创建副本。切片表示法使这尤其方便。

6 模块

import导入模块中的所有函数
如果打算频繁使用一个函数,你可以将它赋予一个本地变量。
一个好的习惯是将所有的import语句放在模块的开始(或者是脚本),这并非强制。
from fibo import *
可以导入所有除了以下划线( _ )开头的命名。需要注意的是在实践中往往不鼓励从一个模块或包中使用 * 导入所有,因为这样会让代码变得很难读。

解释器由 sys.path 变量指定的路径目录搜索模块,该变量初始化时默认包含了输入脚本(或者当前目录),PYTHONPATH 和安装目录。这样就允许 Python 程序了解如何修改或替换模块搜索目录。需要注意的是由于这些目录中包含有搜索路径中运行的脚本,所以这些脚本不应该和标准模块重名,否则在导入模块时 Python 会尝试把这些脚本当作模块来加载。

sapm.pyc被视为模块spam的预编译二进制文件,用于修改时间记录,一旦spam.py成功编译,就会产生对应版本的spam.pyc。

如果没有设定 PYTHONPATH ,就由内置的默认值初始化。你可以用标准的列表操作修改它:
import sys
sys.path.append('/ufs/guido/lib/python')

内置函数dir用于按模块名搜索模块定义,它返回一个排好序的字符串类型的存储列表:
dir()不会列出内置函数和变量名。如果你想列出这些内容,它们在标准模块 builtin 中定义:


包通常是使用用“圆点模块名”的结构化模块命名空间。例如,名为 A.B 的模块表示了名为 A 的包中名为 B 的子模块。

7.输入和输出

输出:
print
str() str.zfill()左侧填充;str.format()填充
repr()
write()

输入:
open()返回文件对象
read()
readline()
seek()

8.错误和异常

Python 中(至少)有两种错误:语法错误和异常( syntax errors 和 exceptions )。
8.1 语法错误
小箭头的位置标记错误出现的位置;
8.2 异常
try 。。。except。。。 中间可以添加else。。。
raise语句抛出指定异常。
不管有没有发生异常,finally子句 在程序离开 try后都一定会被执行。

9 类

class
继承,迭代,生成

10 标准库

  1. os 模块提供很多与操作系统交互的函数;内置dir()和help()函数;针对日常的文件和目录管理任务,shutil模块提供了一个易于使用的高级接口:
    2)glob模块提供了一个函数用于从目录通配符搜素中生成列表:
    3-4)sys模块
    5)re模块未高级字符串处理提供了正则表达式工具。
    6)math模块位浮点运算提供了对底层C函数库的访问;random提供了生成随机数的工具;
    7)urllib模块用于处理urls接受的数据;smtplib用于发送电子邮件;
    8)datetime模块为日期和时间处理提供方法;
    9)以下模块支持通用的数据打包和压缩格式:zlib/gzip/bz2/zipflie/tarfile;
    10)timeit时间量度工具。
    11)doctest模块提供扫描模块并根据程序中内嵌的文档字符串执行测试,测试构造如同简单的将它的输出结果剪切并粘贴到文档字符串中。
    unittest模块可以在一个独立的文件里提供一个更加全面的测试集。
    12)csv模块支持通用数据库格式中直接读写。

13)repr模块为大型或深度嵌套的容器缩写显示提供了repr()函数。
14)pprint模块提供了一种解释器可读的方式深入控制内置和用户自定义对象的打印。当输出超过一行的时候,“美化打印(pretty printer)”添加断行和标识符,使得数据结构显示的更清晰。
15)textwrap模块格式化文本段落以适应设定的屏宽。
16)locale模块按访问设定好的国家信息数据库。
17)string模块提供了一个模块类Template,使用它最终用户可以简单地进行编辑。
18)struct模块为使用变长的二进制记录格式提供了pack()和unpack()函数。
19)logging模块提供了完整灵活的日志系统。它最简单的用法就是记录信息并发送信息到一个文件或sys.stderr。
20 )Python 自动进行内存管理(对大多数的对象进行引用计数和垃圾回收 garbage collection 以循环利用)在最后一个引用消失后,内存会很快释放。weakref 模块提供了不用创建引用的跟踪对象工具,一旦对象不再存在,它自动从弱引用表上删除并触发回调。
21 )array模块提供了一个类似列表的 array()对象,它仅仅是存储数据,更为紧凑。
22)collections 模块提供了类似列表的 deque()对象,它从左边添加(append)和弹出(pop)更快,但是在内部查询更慢。
22)bisect模块以操作存储链表。
23)heapq提供了基于正规链表的堆实现。最小的值总是保持在 0 点。

24)decimal 模块提供了一个Decimal数据类型用于浮点数计算,相比较内置的二进制浮点数实现float,这个类型有助于:

  • 金融应用和其它需要精确十进制表达的场合,
  • 控制精度,
  • 控制舍入以适应法律或者规定要求,
  • 确保十进制数位精度,
    或者
  • 用户希望计算结果与手算相符的场合。

11. python文档辅助文档

python入门指南:。python入门指南
python标准库:(针对读取 Unix 邮箱、接收 HTTP 文档、生成随机数、解析命令行选项、写 CGI 程序、压缩数据以及很多其它任务的模块)。Python 标准库
python模块安装:展示了如何安装其他 Python 用户编写的附加模块。安装 Python 模块
python语言参考:详细说明了python语法和语义。读起来有点累,不过对于语言本身,有份完整的手册和有用。

其它 Python 资源:

  • http://www.python.org: Python 官方网站。它包含代码、文档和 Web 上与 Python 有关的页面链接。
    该网站镜像于世界各地,类似欧洲、日本和澳大利亚。镜像可能会比主站快,这取决于你的地理位置。

  • http://docs.python.org: 快速访问 Python 的文档。

  • http://pypi.python.org: Python 包索引,以前昵称为奶酪店,索引了可供下载的,用户创建的 Python 模块。

    如果你发布了代码,可以注册到这里,这样别人可以找到它。

  • http://aspn.activestate.com/ASPN/Python/Cookbook/: Python 食谱是大量的示例代码、大型的集合,和有用的脚本。

    值得关注的是这次资源已经结集成书,名为《Python 食谱》(O’Reilly & Associates, ISBN 0-596-00797-3)

12. 交互式输入行编辑

行编辑:
C-A (Control-A)将光标移动到行首,
C-E 移动到行尾,
C-B 向左移一个字符,
C-F 向右移一位。
Backspace退格向左删除一个符串,
C-D 向右删除一个字符。
C-K 删掉光标右边直到行尾的所有字符,
C-Y 将最后一次删除的字符串粘贴到光标位置。
C-underscore (underscores 即下划线,译注)撤销最后一次修改,它可以因积累作用重复。

历史回溯:
C-P 在历史缓存中上溯一行,
C-N 向下移一行。
Return 键时将当前行传入解释器。
C-R 开始一个增量向前搜索;
C-S 开始一个向后搜索。

快捷键绑定:
Readline 库的快捷键绑定和其它一些参数可以通过名为 ~/.inputrc 的初始化文件的替换命名来定制。

中断
Control-C 或者 DEL

13. 浮点数

13.1 浮点数计算

浮点数在计算机中表达为二进制(binary)小数。
在运算过程中会产生奇怪的现象,如,

对 10 个 0.1 的值求和不能精确的得到 1.0:

>>> sum = 0.0
>>> for i in range(10):
... sum += 0.1
...
>>> sum
0.9999999999999999

不能精确表达结果:

>>> 0.1 + 0.2
0.30000000000000004

这些问题是一直存在的,在运行中出现并不能说明代码错误,而是有可能存在系统偏差。

13.2 二进制与十进制

十进制转二进制
整数取二进制(采用"除2取余,逆序排列"法)

具体做法:

1.首先用2整除一个十进制整数,得到一个商和余数
2.然后再用2去除得到的商,又会得到一个商和余数
3.重复操作,一直到商为小于1时为止
4.然后将得到的所有余数全部排列起来,再将它反过来(逆序排列),切记一定要反过来!

如: 42转为二进制后为101010(结果取反)
42/2=21.......0
21/2=10.......1
10/2=5......0
5/2=2......1
2/2=1......0
1/2=0......1

十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。

具体做法如下:

用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的整数部分为零,或者整数部分为1,此时0或1为二进制的最后一位。或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

如:0.625=(0.101)B
  0.6252=1.25======取出整数部分1
  0.25
2=0.5========取出整数部分0
  0.5*2=1==========取出整数部分1

再如:0.7=(0.1 0110 0110...)B
  0.72=1.4========取出整数部分1
  0.4
2=0.8========取出整数部分0
  0.82=1.6========取出整数部分1
  0.6
2=1.2========取出整数部分1
  0.22=0.4========取出整数部分0 
  0.4
2=0.8========取出整数部分0
  0.82=1.6========取出整数部分1
  0.6
2=1.2========取出整数部分1
  0.2*2=0.4========取出整数部分0

二进制转换为十进制

二进制转为十进制要从右到左用二进制的每个数去乘以2的相应次方,小数点后则是从左往右。

如果首位是0就表示正整数,如果首位是1则表示负整数,正整数可以直接换算,负整数则需要先取反再换算。

因为计算机内部表示数的字节单位是定长的。如8位、16位、32位。所以位数不够时,高位补零。

如要想二进制00101010转为十进制,因为以0开头,所以这是正整数,计算如下所示:

(0 * 2的零次方) + (1* 2的一次方)+ (0 * 2 的二次方)+(1 * 2的三次方) +(0 * 2的四次方) +(1* 2的五次方) + (0 * 2的六次方) + (0 * 2的7次方) = 0 + 2 + 0 + 8 + 0 + 32 + 0 + 0 = 42

14.其他

14.1 处理错误

有错误发生时,解释器会打印一个错误信息和栈跟踪器。
在交互模式下,它返回主提示符,如果从文件输入执行,它在打印栈跟踪器后以非零状态退出。

14.2 执行python脚本

在Unix 系统中,Python 脚本可以像 Shell 脚本那样直接执行。只要在脚本文件开头写一行命令,指定文件和模式:

#! /usr/bin/env python

首先要确认 Python 解释器在用户的 PATH 中。 #! 必须是文件的前两个字符,在某些平台上,第一行必须以 Unix 风格的行结束符 ('\n')结束,不能用 Windows ('\r\n') 的结束符。注意,'#' 是 Python 中是行注释的起始符。

脚本可以通过 chmod 命令指定执行模式和权限:

$ chmod +x myscript.py

Windows 系统上没有“执行模式”。Python 安装程序自动将 .py 文件关联到 python.exe ,所以在 Python 文件图标上双击,它就会作为脚本执行。同样 .pyw 也做了这样的关联,通常它执行时不会显示控制台窗口。

14.3 交互执行文件

使用 Python 解释器的时候,我们可能需要在每次解释器启动时执行一些命令。你可以在一个文件中包含你想要执行的命令,设定一个名为 PYTHONSTARTUP 的环境变量来指定这个文件。这类似于 Unix shell 的 .profile 文件。

这个文件在交互会话期是只读的,当 Python 从脚本中解读文件或以终端 /dev/tty 做为外部命令源时则不会如此 (尽管它们的行为很像是处在交互会话期) 它与解释器执行的命令处在同一个命名空间,所以由它定义或引用的一切可以在解释器中不受限制地使用。你也可以在这个文件中改变 sys.ps1sys.ps2 指令。

如果你想要在当前目录中执行附加的启动文件,可以在全局启动文件中加入类似以下的代码:if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')。如果你想要在某个脚本中使用启动文件,必须要在脚本中写入这样的语句:

import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
  with open(filename) as fobj:
       startup_file = fobj.read()
    exec(startup_file)

14.4 定制模块

Python 提供了两个钩子 (方法) 来本地化: sitecustomizeusercustomize。为了见识它们,你首先需要找到你的 site-packages 的目录。启动 python 执行下面的代码:

>>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python2.7/site-packages'

现在你可以在 site-packages 的目录下创建 usercustomize.py 文件,这个文件将会影响 python 的每次调用,除非启动的时候加入 -s选项禁止自动导入。

sitecustomize 的工作方式一样,但是是由电脑的管理账户创建以及在 usercustomize 之前导入。

-------------------------------------------------------------------------------------------------------------------------------------------------------------I'm a line ! Thanks for your attention !----------------------------------------------------------------------------------------------------------------

你可能感兴趣的:(python入门手册--笔记)