欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python的高级特性

程序员文章站 2024-01-25 16:05:05
...

列表生成式

生成式:就是一个用来生成列表的特定语法形式的表达式。是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list
普通的语法格式:[exp for iter_var in iterable]
带过滤功能语法格式: [exp for iter_var in iterable if_exp]
循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]

集合生成式:result = { i for i in range(10) }
字典生成式:result = { str(i):i for i in range(10) }
1、需求:生成10个0-20的随机数
不用列表生成式
代码:

import random
d=[]
for i in range(10):
    add = random.randint(0,20)
    d.append(add)
print(d)

列表生成式

import random
d = [random.randint(1,20)for i in range(10)]
print(d)

2、生成0-20中能被4整除的数
代码:

d = [num for num  in range(1,21) if num%4==0]
print(d)

运行结果:python的高级特性
3、创建目录dir并生成15个文件hello{1…5}{jng.gif.jpg}
代码:

import os
dirname = 'dir'
for num in range(1,6):
    for name in ["jng","gif","jpg"]:
        file = "hello%s.%s"%(num,name)
        filename = os.path.join(dirname,file)
        with open("filename",'w') as f:
            print("正在创建%s:"%(filename))            

运行结果python的高级特性练习题:
1.求以r为半径的圆的面积和周长(1,10)
代码:

import math
result = [(float("%.2f"%(math.pi*r*r)),round(2*math.pi*r,2)) for r in range(1,11)]
print(result)

运行结果python的高级特性

2.将字典的key值和value值调换
代码:

d = {'a':'A','b':'B','c':'C'}
result = {value:key for key,value in d.items()}
print(result)

运行结果
python的高级特性

生成器Generator

1、什么叫生成器:
在Python中,一边循环一边计算的机制,称为生成器:Generator
2、什么时候需要使用生成器:
性能限制需要用到,比如读取一个10G的文件,如果一次性将10G的文件加载到内存处理的话(read方法),内存肯定会溢出;但使用生成器把读写交叉处理进行,比如使用(readline和readlines)就可以再循环读取的同时不断处理,这样就可以节省大量的内存空间
3、如何创建生成器:
第一种方法: 列表生成式的改写。 []改成()
python的高级特性
比较列表生成式和生成器生成速度:
代码:

start_time = time.time()
result = [i for i in range(1,10000000)]
end_time = time.time()
print('列表生成式生成时间',end_time-start_time)

start_time = time.time()
result = (i for i in range(1,10000000))
end_time = time.time()
print('生成器生成时间:',end_time-start_time)

运行结果:python的高级特性

第二种方法: yield关键字
代码:

def g():
    print('step1')
    print('step2')
    yield 'step3'
    print('step4')
    yield 'step5'
g = g()
result1 = next(g)
result2 = next(g)
print(result1)
print(result2)

运行结果:python的高级特性

4、如何打印生成器的每一个元素
通过for循环, 依次计算并生成每一个元素。
如果要一个一个打印出来,可以通过next()函数获得生成器的下一个返回值。

生成器的特点

  • 解耦. 爬虫与数据存储解耦
  • 减少内存占用. 随时生产, 即时消费, 不用堆积在内存当中
  • 可不终止调用. 写上循环, 即可循环接收数据, 对在循环之前定义的变量, 可重复使用
  • 生成器的循环, 在 yield 处中断,节省cpu

python中return关键字和yield关键字的区别:
return:在程序函数中返回某个值,返回之后函数不在继续执行,彻底结束
yield: 带有yield的函数是一个迭代器,函数返回某个值时,会停留在某个位置,返回函数值后,会在前面停留的位置继续执行,直到程序结束

生成器、迭代器与可迭代对象

迭代:是访问容器元素的一种方式。迭代器是一个可以记住遍历的位置的对象
迭代器对象:从集合的第一个元素开始访问,直到所有的元素被访问完结束
可迭代对象:可以直接作用于for循环的对象

  • 一类是集合数据类型,如list, tuple,dict, set,str等
  • 一类是generator,包括生成器和带yield的generator function

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator
把list、dict、str等Iterable变成Iterator可以使用iter()函数**
迭代器与生成器的区别

python的高级特性

闭包

闭包就是指有权访问另一个函数作用域中的变量的函数。
如何创建闭包:在函数内创建另一个函数
闭包的常见形式:

  • 内部函数使用外部函数的临时变量
  • 外部函数的返回值是内部函数的引用

装饰器

什么是装饰器:器指的是工具,而程序中的函数就是具备某一功能的工具,所以装饰器指的是为被装饰器对象添加额外功能的工具/函数
装饰器的实现必须遵循两大原则:
1、封闭: 对已经实现的功能代码块封闭。 不修改被装饰对象的源代码
2、开放: 对扩展开发
装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象
装饰器的通用模板

from functools import wraps
def timeit(fun):
    @wraps(fun)
    def wrapper(*args,**kwargs):
        result = fun(*args,**kwargs)
        return result
    return wrapper()

多个装饰器的执行顺序:自上而下
被装饰顺序:自下而上

内置高阶函数

函数式编程特点:允许把函数本身作为参数传入另一个函数,还允许返回一个函数!Python对函数式编程提供部分支持。
高阶函数:把函数作为参数传入

map函数

map():根据提供的函数对指定序列做映射
分别求出10的0-3次方的结果
代码:

result = map(lambda x:10**x,range(4))
print(list(result))
print(type(result))

运行结果:python的高级特性## reduce函数
reduce():会对参数序列中元素进行累积
求1到6的阶乘
代码:

from functools import reduce
result = reduce(lambda x,y:x*y,range(1,7))
print(result)
print(type(result))

运行结果:python的高级特性

filter函数

filter函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表
过滤掉小于等于四的数
代码:

def small(n):
    if n>4:
        return  n
result = filter(small,[1,2,3,4,5,6])
print(list(result))

运行结果:python的高级特性

sorted函数

sorted函数:对所有可迭代的对象进行排序操作。返回重新排序的列表sorted(iterable, key=None, reverse=False)