Python 有两个版本,一个是 2.x
版,一个是 3.x
版,这两个版本是不兼容的. 直接学习最新的 Python 3.6.4
.
Python 是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,但是慢到用户感觉不出来
安装
- 去官网下载安装包
- 如果已经安装
Homebrew
直接执行brew install Python3
安装
查看
1 | bogon:~ syc$ python -V |
解释器
- 官方版本的解释器 CPython (用 C 开发的)
- Jython 是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
简单使用
终端输入 Python3
出现 >>>
即可编写 Python 代码, 输入 exit()
或者按 Ctrl+d
退出
输入 Python3 filename.py
运行文件
1 | bogon:~ syc$ python3 |
基本语法
Python 大小写敏感, 采用缩进式语法, #
表示注释, 当语句以冒号 :
结尾时,缩进的语句视为代码块.
按照约定俗成的管理,应该始终坚持使用4个空格的缩进.
转意
1 | >>> print('\\') |
除法
除法 /
结果为浮点型, //
地板除法的结果为整形, 既 只取结果的整数部分
1 | >>> 9/3 |
字符
计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。
最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。
最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为 ASCII编码
Unicode
把所有语言都统一到一套编码里, 如 GB2312
Python的字符串类型是str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str
变为以字节为单位的bytes
(对bytes
类型的数据用带b
前缀的单引号或双引号表示)'ABC'
和b'ABC'
,前者是str一个字符对应若干个字节,后者是bytes每个字符都只占用一个字节。
1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符
以Unicode表示的 str
通过 encode()
方法可以编码为指定的 bytes
, bytes
通过 decode()
变为 str
1 | #!/usr/bin/env python3 |
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
确保文本编辑器正在使用 UTF-8 without BOM
编码
占位符
1 | >>> 'int=%d float=%f string=%s 16=%x' % (1,2.3,'str',0x1a) |
list 列表
list是一种有序的集合,可以随时添加和删除其中的元素。
list里面的元素的数据类型也可以不同
1 | >>> arr = [0,1,2,'3a'] |
arr[-1]
表示倒数第一个arr.append(4)
添加arr.insert(1,5)
添加到指定位置arr.pop()
默认删除最后一个, arr.pop(1)
根据索引删除
set
1 | #!/usr/bin/env python3 |
tuple 元组
元组不可变(swift 元组可变)
只有1个元素的tuple定义时必须加一个逗号 ,
来消除歧义 t = (123,)
diction 字典(map)
1 | #!/usr/bin/env python3 |
切片(类似 range)
1 | #!/usr/bin/env python3 |
if
只要 x
是非零数值、非空字符串、非空list等,就判断为True,否则为False。
1 | if x: |
for / while
1 | #!/usr/bin/env python3 |
迭代
凡是可作用于for循环的对象都是Iterable类型.
凡是可作用于next()函数的对象都是Iterator类型
1 | #!/usr/bin/env python3 |
列表生成式 生成器
1 | #!/usr/bin/env python3 |
一边循环一边计算的机制,称为生成器:generator
- 列表生成式的[]改成(),就创建了一个generator
- 函数定义中包含yield关键字,就是一个generator
generator 遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行.
函数是顺序执行,遇到return语句或者最后一行函数语句就返回.
1 | #!/usr/bin/env python3 |
函数
定义一个函数要使用 def
语句,依次写出函数名
、括号
、括号中的参数
和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。
空函数
1 | def nonFunc(): |
单个返回值函数
函数执行完毕也没有return
语句时,自动return None
1 | def myFunc(a,b): |
多个返回值函数
返回一个tuple可以省略括号
默认参数必须指向不变对象
1 | #!/usr/bin/env python3 |
可变参数
参数前加
*
可变参数在函数调用时自动组装为一个tuple1
2
3
4
5
6
7
8#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def printParams(*pars):
for par in pars:
print(par)
printParams(1,'a',3.5)参数前加
**
关键字参数在函数调用时自动组装为一个dict1
2
3
4
5
6
7
8
9
10#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def printParams(**pars):
print(pars)
printParams(a=1,b='a',c=3.5)
d = {'a':1, 'b': 'a', 'c':3.5}
printParams(**d)*,
后面的参数被视为命名关键字参数, 限制关键字参数的名字1
2
3
4
5
6
7
8#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 只接收 b,c
def printParams(a, *, b, c):
print(a,b,c)
printParams(1, b='a', c=0.3)混合使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def printParams(a, b='b' , *c, **d):
print(a,b,c,d)
printParams(1, 2, 0.3,0.4, d1=1,d2='d2')
# list or tuple
arr = (1,2,3)
dic = {'d1':1,'d2':2}
printParams(1, 2, *arr, **dic)
def printParams2(a, b='b' , *,c, **d):
print(a,b,c,d)
printParams2(1, 2, c=0.4, d1=1,d2='d2')
高阶函数
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数
1 | #!/usr/bin/env python3 |
闭包
TODO: 思想和 swift 一致
匿名函数
关键字 lambda
表示匿名函数,冒号前面的x
表示函数参数
用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数
1 | f = lambda x: x * x |
装饰器
我的理解类似触发器/过滤器/aop(面向切面)
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
1 | #!/usr/bin/env python3 |
functools.partial
functools.partial可以创建一个新的函数(偏函数),这个新函数可以固定住原函数的部分参数,从而在调用时更简单。
1 | #!/usr/bin/env python3 |
OOP
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想
封装、继承和多态
类(Class)和实例(Instance)
_xx
以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问__xx
双下划线的表示的是私有类型的变量。只能允许这个类本身进行访问__xx__
是特殊变量,特殊变量是可以直接访问的
1 | #!/usr/bin/env python3 |
包
每一个包目录下面都会有一个 __init__.py
文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py
可以是空文件,也可以有Python代码
1 | #!/usr/bin/env python3 |
第三方库都会在Python官方的 pypi.python.org 网站注册,要安装一个第三方库,必须先知道该库的名称,使用 pip3 install 库名称
安装
Anaconda 是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,装上Anaconda,就相当于把数十个第三方模块自动安装好了
Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中 sys.path
未完待续
参考