*************************************************************************闭包函数***************************************************************************
一、闭包函数
闭:定义在函数内部的函数
包:内部函数引用了外部函数作用域的名字
给函数体传值的两种方式:
1.通过函数括号里面的参数 传值
2.函数的第二种方式 闭包
补充:爬虫,正常思路下代码重复率高。怎么来减少代码冗余
包:requests
安装requests包 pip3 install requests
爬虫的本质就是爬取页面的html代码,从中获取到你想要的数据(utl链接地址)
有了链接地址,你就可以顺着这个链接地址将所有的页面紫园全部爬写下来。
*************************************************************************装饰器***************************************************************************
二、装饰器
器:是一种工具
装饰:给一个被装饰的对象添加新的功能
为什么会用到装饰器?
装饰器具有开放封闭原则:
装饰器遵循的两个原则:
1.不改变被装饰器的源代码
2.不改变装饰器调用时的调用方式
两个知识点:
Callable:可调用,即当遇到()时,立即执行调用
Time这个模块:
time.time() 获得的时间戳 从1970.1.1. 00.00开始到现在的秒数
time.sleep(seconds) 让程序暂停几秒钟
装饰器语法糖:@+函数调用名
将紧挨着它的可调用对象的名字作为@后面跟着函数名里面的参数。
装饰器在装饰的时候是从上往下装饰,
装饰器在执行的时候是从下往上执行
有参装饰器和无参装饰器:
无参装饰器 装饰器就两层,最外层函数里面的参数只能用来传调用的函数名,当要在调用函数里面添加参数,只能在装饰器函数外部在装一层函数,函数里面的参数可以就是你想传的参数。
下图为有参函数,无参函数只要把最外层的去除就可
**这里需要注意:虽然这样可以实现我们想要的结果,但是当我们打印index值,返回的其实是inner指向的一个内容地址,不是真正index的地址,同时查看函数注释时,返回的也是inner里面的注释,查看函数名字符串形式(index._name_)
怎样来做到本来一家当真的现象真的是真的呢,这个就用到一个包 wraps
From functools import wraps
*************************************************************************函数的递归***************************************************************************
函数的递归
函数在调用阶段,直接或间接的又调用了自己
**首先先明确函数不能无限的递归下去
Python 解释器可以递归次数在998左右
怎么查看python解释器的递归次数呢?
1.自己编辑一个递归函数
2.通过一个模块 sys 可以查看python解释器的递归次数,同时也可以设置python解释器的递归次数
递归分为两个阶段
1.回溯:就是就是一次一次重复的过程,且每次重复过程的复杂度都应该下降,直到有一个最终的结束条件
2.递推:一次一次往回推的过程
递归函数不要考虑循环的次数,只要把握结束的条件即可
**例题:年龄递归为题,后面的人都比前面一个人大2岁,第五个人年龄20,求第一个人多少岁?用递归函数表示
Age(1) = agr(2) + 2
Age(2) = arg(3) + 2
Age(3) = arg(4) + 2
Arg(4) = arg(5) + 2
Arg(5) = 20
**函数体代码顶替方式:
************************************************************************算法***************************************************************************
算法
用来高效率的解决问题
怎样查找一个数字在一个有序无重复的列表里面?
怎样快速检查一个数据在不在一个有序且没有重复数据列表里面?(二分法)
*************************************************************************三元表达式***************************************************************************
三元表达式
格式:值1 if 条件 else 值2
条件成立 值1,条件不成立 值2
三元表达式的应用场景:只推荐只有两种的情况的可能下
res = [name for name in l if name.endswith(‘_sb‘)] # 后面不支持再加else的情况
# 先for循环依次取出列表里面的每一个元素
# 然后交由if判断 条件成立才会交给for前面的代码
# 如果条件不成立 当前的元素 直接舍
*************************************************************************字典生成式***************************************************************************
*************************************************************************常用的匿名函数***************************************************************************
匿名函数:没有名字的函数
关键字:lambda 如果将一个变量名指向 一个匿名函数时,可以用该变量名来调用
匿名函数的特点:
临时使用,用完就结束了
*************************************************************************常用的内置函数***************************************************************** **********
字符转数字 ord()
数字转字符 str()
常见的内置函数
Map、 zip 、 filter 、 sorted 、 reduce
Map:映射
Zip:拉链 若果每个环节缺一个,则缺的那一组不建立关系
Filter:过滤 返回的是一个对象
Sorted :反转 从小到大排序,同一类型
Reduce
插入一个模块 reduce
From functools import reduce
闭包函数、装饰器、函数递归、算法、三元表达式、列表生成式、字典生成式、匿名函数、内置函数
原文:https://www.cnblogs.com/oldboyliuhong/p/11178562.html