一、Python简介
Python是著名的“龟叔”Guido van Rossum(荷兰人)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。
Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。
使用Python我们可以做什么呢?
  • 首选是网络应用,包括网站、后台服务等等;
  • 其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等;
  • 另外就是把其他语言开发的程序再包装起来,方便使用。

二、Python安装

1、Mac上安装Python

Mac一般自带2.x版本的Python,可以通过Homebrew安装3.x版本的Python。命令为:
brew install python3

2、Linux上安装Python

(1)查看目前版本号

python --version

(2)上传并解压Python3.x

sudo rz
tar -zxf Python-3.6.3.tgz

(3)安装依赖模块

yum -y install zlib zlib-devel
yum -y install bzip2 bzip2-devel
yum -y install ncurses ncurses-devel
yum -y install readline readline-devel
yum -y install openssl openssl-devel
yum -y install openssl-static
yum -y install xz lzma xz-devel
yum -y install sqlite sqlite-devel
yum -y install gdbm gdbm-devel
yum -y install tk tk-devel
yum install gcc

(4)安装Python3.x

# 切换到Python目录
cd Python-3.6.3

# 进行configure操作,prefix指定python安装目录
./configure --with-ssl --prefix=/opt/modules/python3

# 进行make和make install操作

# ===================================================

# 此时查看python版本号,还是2.x,需要更换软链接
# 首先切换到root用户下
su -

# 旧版本的软链接可以不用删除,改个名字即可,然后创建新版本的软链接
mv /usr/bin/python /usr/bin/python_bak_2.x
ln -s /opt/modules/python3/bin/python3 /usr/bin/python

# 再次查看版本号,已切换到python3.x
python --version

三、Python基础
# 有序列表:list常用方法

# 列表元素个数
len(list)
# 随机访问,通过索引
list[index]
# 末尾增加元素
list.append(element)
# 指定位置增加元素
list.insert(index, element)
# 删除末尾元素
list.pop()
# 删除指定位置元素
list.pop(index)
# 列表排序
list.sort()
# ===========================
# 有序列表:元组tuple常用方法

# 字典dict常用方法

# 获得对应key的值
dict[key]
# 判断key是否在dict中,返回boolean;通过dict提供的get()方法,不给自定义值,不存在返回None
key in dict
dict.get(key, -1)
# 删除key
dict.pop(key)
# 增加元素,如下
a = {'age': 23, 'name': 'lala'}
a['school'] = 'nanhaizhongxue'
# =========================
# 无序列表set常用方法

# 创建set
s = set([1, 2, 3])
# 增加元素
s.add(key)
# 删除元素
s.remove(key)
# 交集和并集操作
s1 & s2
s1 | s2

四、函数

1、调用函数

# 绝对值函数,参数可以为整数、浮点数
abs(arg)
# 最大值函数,参数个数可以为多个
max(arg1, args2, ...)
# int函数,数据类型变换
int('123')
int(12.34)
# 同理float、str和bool函数
float('12.34') # 12.34
str(1.23)    # '1.23'
str(100)    # '100'
bool(1)    # True
bool('')    # False
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量。
a = abs # 变量a指向abs函数
a(-1) # 所以也可以通过a调用abs函数


2、定义函数

# 如下,简单的定义了一个绝对值函数
def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

# 定义空函数
def nop():
    pass
# 返回多个值
import math

def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

# 其实这只是一种假象,Python函数返回的仍然是单一值:tuple
# 但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,
# 按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

3、函数的参数

(1)位置函数

# 定义x的n次方
def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
此时,x、n为位置参数。调用函数时,传入的两个值按照位置顺序依次赋给参数x和n。

(2)默认参数

def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

# 此时调用power(5),不报错。因为,默认传入n=2,得到25。

# 一是必选参数在前,默认参数在后,否则Python的解释器会报错; # 二是如何设置默认参数。 

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)

# 按顺序提供默认参数:enroll('Bob', 'M', 7)
# 不按顺序提供部分默认参数:enroll('Adam', 'M', city='Tianjin')

# 默认参数有个大坑。因此,定义默认参数要牢记一点:默认参数必须指向不变对象!正确案例如下:
def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L

(3)可变参数

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

# 在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple
如果为可变对象,比如list,可以通过如下这样:
nums = [1, 2, 3]
calc(*nums)
# Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去

(4)关键字参数

# 关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

# person('Adam', 45, gender='M', job='Engineer')

# extra = {'city': 'Beijing', 'job': 'Engineer'}
# person('Jack', 24, city=extra['city'], job=extra['job'])

# extra = {'city': 'Beijing', 'job': 'Engineer'}
# person('Jack', 24, **extra)
# 注意:**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,
# kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。

(5)命令关键字参数

# 如果要限制关键字参数的名字,就可以用命名关键字参数,
# 例如,只接收city和job作为关键字参数。这种方式定义的函数如下:
def person(name, age, *, city, job):
    print(name, age, city, job)

# 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
    print(name, age, args, city, job)



(6)参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

比如定义一个函数,包含上述若干种参数:
def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

4、递归函数


五、高级特性


六、函数式编程


七、模块


八、面向对象编程


九、面向对象高级编程


十、错误、调试和测试


十一、IO编程


十二、进程和线程


十三、正则表达式


十四、常用内建模块


十五、常用第三方模块


十六、virtualenv


十七、图形界面


十八、网络编程


十九、电子邮件


二十、访问数据库


二十一、Web开发


二十二、异步IO


二十三、使用MicroPython


二十四、实战


二十五、FAQ