关于网站建设的话术网站建设万禾
文章目录
- 一、Python基础
 - 1. 数据类型和变量
 - 2. 字符串和编码
 - 字符编码
 - Python的字符串
 - 格式化
 
- 3. list和tuple
 - list
 - tuple
 
- 4.条件判断
 - 5. 模式匹配
 - 6. 循环
 - 7. dict 和 set
 - dict
 - set
 
- 二、函数
 - 1. 调用函数
 - 2. 定义函数
 - 3. 函数的参数
 - 4. 递归函数
 
- 三、高级特性
 - 四、函数式编程
 - 1. 高阶函数
 - 2. 返回函数
 - 3. 匿名函数
 - 4. 装饰器
 - 5. 偏函数
 
- 五、模块
 - 模块定义
 - 使用模块
 - 安装第三方模块
 - 安装常用模块
 - 模块搜索路径
 
一、Python基础
1. 数据类型和变量
数据类型:整数、浮点数、字符串、布尔值、空值(None)
 变量:变量名必须是大小写英文、数字和_的组合,且不能用数字开头
 常量:常量就是不能变的变量,在Python中,通常用全部大写的变量名表示常量
2. 字符串和编码
字符编码
ASCII编码:127位最早
 GB2312编码:中文编入
 Unicode:统一的一套编码
 UTF-8编码:把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
Python的字符串
Python字符串是以Unicode编码的
 Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符
在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
格式化
%s永远起作用,它会把任何数据类型转换为字符串
3. list和tuple
list
list是一种有序的集合,可以随时添加和删除其中的元素。
tuple
元组,tuple和list非常类似,但是tuple一旦初始化就不能修改
4.条件判断
if <条件判断1>:<执行1>
elif <条件判断2>:<执行2>
elif <条件判断3>:<执行3>
else:<执行4>
 
5. 模式匹配
如果要针对某个变量匹配若干种情况,可以使用match语句
score = 'B'match score:case 'A':print('score is A.')case 'B':print('score is B.')case 'C':print('score is C.')case _: # _表示匹配到其他任何情况print('score is ???.')
 
6. 循环
for…in循环
names = ['Michael', 'Bob', 'Tracy']
for name in names:print(name)
 
while循环
sum = 0
n = 99
while n > 0:sum = sum + nn = n - 2
print(sum)
 
break
 在循环中,break语句可以提前退出循环
 continue
 在循环过程中,也可以通过continue语句,跳过当前的这次循环,直接开始下一次循环。
7. dict 和 set
dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
 和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
 - 需要占用大量的内存,内存浪费多。
 
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
二、函数
1. 调用函数
Python内置了很多有用的函数,我们可以直接调用。
比如求绝对值的函数abs
>>> abs(100)
100
 
数据类型转换
Python内置的常用函数还包括数据类型转换函数,比如int()函数可以把其他数据类型转换为整数:
>>> int('123')
123
 
2. 定义函数
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
def my_abs(x):if x >= 0:return xelse:return -x
 
参数检查
调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError:
3. 函数的参数
- 位置参数: 对于power(x)函数,参数x就是一个位置参数
 - 默认参数:
 
def power(x, n=2):s = 1while n > 0:n = n - 1s = s * xreturn s
 
设置默认参数时,有几点要注意:
一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);
二是如何设置默认参数。
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
- 可变参数: 传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个
 - 关键字参数: 允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
 - 命名关键字参数: 如果要限制关键字参数的名字,就可以用命名关键字参数.
例如,只接收city和job作为关键字参数。这种方式定义的函数如下: 
def person(name, age, *, city, job):print(name, age, city, job)
 
- 参数组合:
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。 
4. 递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
def fact(n):if n==1:return 1return n * fact(n - 1)
 
三、高级特性
-  
- 切片
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3 
 - 切片
 -  
- 迭代
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。 
 - 迭代
 -  
- 列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)): 
 - 列表生成式
 -  
- 生成器
在Python中,一边循环一边计算的机制,称为生成器:generator。 
 - 生成器
 -  
- 迭代器
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。 
 - 迭代器
 
四、函数式编程
1. 高阶函数
- map/reduce
 - filter
 - sorted 排序
 
2. 返回函数
- 函数作为返回值
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 - 闭包
注意到返回的函数在其定义内部引用了局部变量args,所以,当一个函数返回了一个函数后,其内部的局部变量还被新函数引用,所以,闭包用起来简单,实现起来可不容易。 - nonlocal
 
def inc():x = 0def fn():nonlocal xx = x + 1return xreturn fnf = inc()
print(f()) # 1
print(f()) # 2
 
x作为局部变量并没有初始化,直接计算x+1是不行的。但我们其实是想引用inc()函数内部的x,所以需要在fn()函数内部加一个nonlocal x的声明。加上这个声明后,解释器把fn()的x看作外层函数的局部变量,它已经被初始化了,可以正确计算x+1。
3. 匿名函数
当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
 匿名函数lambda x: x * x实际上就是:
def f(x):return x * x
 
关键字lambda表示匿名函数,冒号前面的x表示函数参数。
4. 装饰器
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
5. 偏函数
通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。
 functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:
>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85
 
五、模块
模块定义
在Python中,一个.py文件就称之为一个模块(Module)。
 为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。
 举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。
现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放:
mycompany
 ├─ init.py
 ├─ abc.py
 └─ xyz.py
 引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz。
请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompan。
使用模块
-  
- 使用
import xx导入模块 
 - 使用
 -  
- 作用域
 
- 正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等;
 - 类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名;
 - 类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等;
 
 
安装第三方模块
在Python中,安装第三方模块,是通过包管理工具pip完成的。
pip install Pillow
 
安装常用模块
可以从Anaconda官网下载GUI安装包,下载后直接安装,Anaconda会把系统Path中的python指向自己自带的Python,并且,Anaconda安装的第三方模块会安装在Anaconda自己的路径下,不影响系统已安装的Python目录。
模块搜索路径
- 直接修改sys.path,添加要搜索的目录:
 
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')
 
这种方法是在运行时修改,运行结束后失效。
- 设置环境变量
PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。
设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。 
参考资料:
 廖雪峰官网
