Python3基础

让人想犯罪 __ 提交于 2020-02-12 13:00:36

一、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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!