Python 工具
Pylint
Pylint
是一个 Python
代码分析工具,它分析 Python
代码中的错误,查找不符合代码风格标准(Pylint
默认使用的代码风格是 PEP 8
,具体信息,请参阅参考资料)和有潜在问题的代码。
pip
pip
是一个现代的,通用的 Python
包管理工具。提供了对 Python
包的查找、下载、安装、卸载的功能。
Python 基本数据类型
Python3中有六个标准的数据类型:
- Number(数字)
- int
- float
- bool
- complex
- String (字符串)
- List (列表)
- Tuple(元组)
- Sets(集合)
- Dictionary(字典)
其中不可变数据类型有四个:Number、String、Tuple、Sets
不可变数据(两个):List、Dictionary
Number
//
向下取整
1 | intDivide = 1 // 2 |
**
操作来进行幂运算
1 | powerInt = 5 ** 2 |
在交互模式中,最后被输出的表达式结果被赋值给变量 _
1 | 12.5 / 100 tax = |
数字相关函数
1 | # 函数 |
String
List
Tuple
list和tuple是Python内置的有序集合,一个可变,一个不可变。
Dictionary
函数
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”
定义函数时,需要确定函数名和参数个数;
如果有必要,可以先对参数的数据类型做检查;
函数体内部可以用return随时返回函数结果;
函数执行完毕也没有return语句时,自动return None。
函数可以同时返回多个值,但其实就是一个tuple。
1 | a = abs |
pass
语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass
,让代码能运行起来。
1 | if age >= 18: |
位置参数
默认参数
可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。比如调用enroll(‘Adam’, ‘M’, city=’Tianjin’),意思是,city参数用传进去的值,其他默认参数继续使用默认值。
1 | def enroll(name,gender,age=6,city='Beijing'): |
注意:
定义默认参数要牢记一点:默认参数必须指向不变对象!
可变参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
1 | #可变参数 |
关键字参数
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数
1 |
|
命名关键字参数
如果要限制关键字参数的名字,就可以用命名关键字参数
例如,只接收city和job作为关键字参数。这种方式定义的函数如下:
1 | def nameKeyword(name,age,*,city,job): |
命名关键字参数需要一个特殊分隔符*
,*
后面的参数被视为命名关键字参数。
命名关键字参数必须传入参数名,这和位置参数不同
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
1 | #如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了: |
参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的
高级特性
切片
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2
只写[:]
就可以原样复制一个list
前10个数,每2个取一个:1
2
310:2] L[:
[0, 2, 4, 6, 8]
所有数,每5个取一个:
1 | 5] L[:: |
迭代
只要是可迭代对象,无论有无下标,都可以迭代
1 | dic = {'name':'leoliu','age':18} |
列表生成式
1 | import os |
generator
如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator
要创建一个generator
,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]
改成()
,就创建了一个generator:
1 | g = (x*x for x in range(10)) |
斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:
1 | def fib(max): |
fib函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator。
也就是说,上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield
b就可以了:
1 | def fib(max): |
1 | 杨辉三角 |
1 | def triangles(): |
Iterator
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
生成器都是Iterator
对象,但list
、dict
、str
虽然是Iterable
,却不是Iterator
。
把list
、dict
、str
等Iterable
变成Iterator
可以使用iter()
函数:
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()
函数的对象都是Iterator
类型,它们表示一个惰性计算的序列;
集合数据类型如list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象。
Python的for循环本质上就是通过不断调用next()
函数实现的。
1 | from collections import Iterable,Iterator |