• Python3基础


    一、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
  • 相关阅读:
    使用node.js搭建本地服务器
    使用Vue前端框架实现知乎日报app
    Echarts的使用
    [LeetCode] 642. Design Search Autocomplete System 设计搜索自动补全系统
    [LeetCode] 249. Group Shifted Strings 分组偏移字符串
    [LeetCode] 298. Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
    [LeetCode] 128. Longest Consecutive Sequence 求最长连续序列
    [LeetCode] 227. Basic Calculator II 基本计算器 II
    [LeetCode] 224. Basic Calculator 基本计算器
    [LeetCode] 117. Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
  • 原文地址:https://www.cnblogs.com/jxc321/p/7325405.html
Copyright © 2020-2023  润新知