一、Requests模块:用于发送网络请求
import requests Res = requests.get("http://www.baidu.com")
使用requests方法后,会返回一个response对象,其存储了服务器响应的内容:
Res.status_code #响应状态码 Res.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取 Res.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩 Res.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码 Res.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None Res.enxoding #返回编码方式 #*特殊方法*# Res.json() #Requests中内置的JSON解码器 Res.raise_for_status() #失败请求(非200响应)抛出异常
1.传递参数:
Requests允许你使用params关键字参数,以一个字符串字典来提供参数以手工构建URL
payload = {'key1':value1','key2':'value2'} r = requests.get("http://httpbin.org/get','params = payload)
2.定制请求头:
如果你想为请求添加HTTP头部,只要简单的传递一个dict给headers参数就可以了
url = 'http://ww.baidu.com' headers = {'user-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} r = requests.get(url,headers = headers )
注意:Requests不会基于定制的header的具体情况改变自己的欣慰,只不过在最后的请求中,所有的header信息都会被传递进去。
3.
二、os模块:处理文件和目录
方法 | 描述 |
---|---|
os.getcwd() | 返回当前工作目录 |
os.mkdir(path) | 创建一个名为path的文件夹 |
os.chdir(path) | 改变当前工作目录 |
三、列表推导
一般情况下列表推导可以替代常见的循环,列表推导式的书写形式为:
[ 表达式 for 变量 in 列表 ] 或 [ 表达式 for 变量 in 列表 if 条件]
它使用编排好的特性对循环语法中的一部分进行了自动化处理
>>>[ i for i in range(10) if i % 2 == 0] [0,2,4,6,8]
四、迭代器和生成器
在Python中生成器(generator)可以一遍循环一遍计算,生成器保存的是算法,不像列表一样一开始便列出所有的元素。要创建一个生成器有很多的方法,一种简单的方法就是把列表推导的[]改成(),就创建了一个generator。
g = ( x * x for x in range( 10 ) )
定义generator的另一种方法是使用yield关键字,如果一个函数中包含yield,那么这个函数就不再是一个普通的函数,而是一个generator
def fib( max_number ): n,a,b = 0,0,1 while n < max_number: yield b a,b = b,a+b n = n + 1 return 'done'
注:generator和函数的执行流程有点不一样。函数是顺序执行,遇到return语句或者最后一行函数语句返回。而生成器的函数,每次调用next()的时候执行,遇到yield语句返回,再次执行的时候从上次返回的yield语句处继续执行。
迭代器:
可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等
一类是generator,包括生成器和带yield的生成器函数。
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。可以被next()函数调用并不断返回下一个值得对象称为迭代器:Iterator。使用isinstance()可以判断一个对象是否是Iterable对象或Iterator对象。
from collections import Iterable print( isinstance( [ ], Iterable ) ) print( isinstance( [ ], Iterator ) )
五、map( )和reduce( )函数的使用
map( )函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用于序列的每个元素,并把结果作为新的Iterable返回。
reduce( )也接收两个参数,也是函数和Iterable,不过reduce是利用函数把序列的前一个和后一个元素做累积计算
利用这两个函数,我们可以自己编写把字符串转化为数字的函数:
from functools import reduce def Str2int( s ): def fn( x, y ): return x * 10 + y def char2num( s ): return { '0' : 0, '1' : 1, '2' : 2, '3' : 3, '4' : 4, '5' : 5, '6' : 7, '8' : 8, '9' : 9}[s] return reduce( fn, map( char2num, s ) )
六、用于过滤序列的filter( )函数
filter( )函数也接收一个函数和一个序列,不过filter是把传入的函数以此作用于每个元素,然后根据返回值是True还是False决定保留还是舍弃该元素。
下面使用filter函数求素数:
#构造一个从3开始的奇数序列,注意这是一个生成器,并且是一个无限序列。 def _odd_iter( ): n = 1 while True: n = n + 2 yield n #定义一个筛选函数 def _not_dicisible( n ): return lambda x: x % n > 0 #定义一个生成器,不断返回下一个素数 def primes( ): yield 2 it = _odd_iter( ) #初始序列 while True: n = next( it ) #返回序列的第一个元素 yield n it = filter( _not_dicisible( n ), it ) #构建新的序列 #由于primes也是一个无限序列,要设置一个退出循环的条件 for n in primes( ): if n < 1000: print( n ) else: break
七、排序算法:sorted( )函数的使用
python内置的sorted( )可以对list进行排序
A = sorted( [ 36, 5, -12, 9, -21 ] )
此外,sorted( )函数也是一个高阶函数,可以接受一个key函数来实现自定义的排序。key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。
B = sorted( [ 36, 5, -12, 9, -21 ], key = abs )
八、闭包:
当一个函数返回了另一个函数后,其内部的局部变量还被新函数引用,相关的参数和变量都保存在返回的函数中,这种程序结构被称为闭包。并且,返回的函数并没有立刻执行,而是直到被调用时才执行。
注意:返回的函数不要引用任何循环变量,或者后续会发生变化的变量。如果一定要引用循环变量,可以再创建一个函数,用该函数绑定循环变量的当前值。
def count(): def f(j): def g(): return j*j return g fs = [] for i in range(1, 4): fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f() return fs