1. 函数的作用域

1.在函数定义时候就固定,与调用位置无关,在调用的时候返回到函数定义的位置

x=1 #全局作用

def f1(): #整个f1函数是定义阶段

deff2():print(x)returnf2deffoo(func):

x=3func()#func()调用阶段

x=200 #这样定义x又变成全局了

foo(f1()) #执行foo(f1()) 返回到F1函数里找x所以打印是1不是3

生成器

2.名称空间

内置名称空间:在python解释器启动产生的空间,简单理解就是python自带的方法比如:max()len()

全局名称空间 :在全局定义的好的名称空间,文件级别的产生的 比如:

x=1 #全局作用

deftest():

x=2 #局部作用print(x)

test()

if x=1 y=2#全局作用

#在执行test()调用的时候先加载内置查找有没有test这个内置函数,如果去全局里查找test这个函数方法,最后局部

局部名称空间:在调用函数时候产生局部名称空间 y=2,在调用teset()立马产生了局部作用空间

nonlocal x 函数正上方的x的变量

global x 改成全局的变量

3.闭包函数

闭包函数的作用主要在与装饰器

函数式编程里面闭包只是给函数捆绑死一个值或者状态

1.定义在函数内部的函数

2. 包含对外部作用域名字的引用,而不是对全局作用域名字的引用

3.该内部函数就称为闭包函数

importrequests#第一种传参闭包

defre(func):defget():returnrequests.get(func).textreturnget

baidu=re('http://www.baidu.com')

baidu1=re('http://www.souhu.com')print(baidu())#第二种自定义固定值闭包函数

deftest():

url='http://www.baidu.com'

defgett(): #gett()是闭合函数外面包裹这个urlreturnrequests.get(url).textreturngett

func=test()print(func())

def ff():

url=‘nq.com’

func() #此时的func已经一种状态就是url这个百度地址不会

ff() #得到的结果是url='http://www.baidu.com'

4.装饰器

装饰器的定义:1.在不变动主功能函数的前提下,为其添加上新的功能或者状态。

例:比如抓数据时候,我们需要添加计时器,显示抓取用了多少时间,

写一个te函数是计时器功能,这样可以给爬取baidu、搜狐网站添加上这个计时器。

第一种装饰器写法,其实是给闭包函数添加了一个功能

importrequests

improt time#第一种传参闭包,这里当主功能函数

defre(func):defget():returnrequests.get(func).textreturnget

baidu=re('http://www.baidu.com')

baidu1=re('http://www.souhu.com')print(baidu())#装饰器,给获取百度数据添的用时

defte(func):deftimer():

start=time.time()

func()

stop=time.time()print("获取数据的时间%s"%(stop-start))returntimer

baidu=te(baidu)

baidu()

第二种写法

这种方法适合用@装饰器函数名称,上面例子是闭包函数,已经闭包了是不可以种@的来装饰建议使用  函数调用方式

n是表示给传参的函数,以防万一最要用*args,**kwargs的方式

1 importpsutil2 defcount(func):3 deftimer():4 fu=psutil.cpu_count()5 print(fu)6 func(1)7 returntimer8

9

10 #查看cpu使用情况的一个函数

11 @count12 defmain(n):13 res=psutil.cpu_times()14 print(res)15 print(n)16

17 #查看Process的一个函数n

18 @count19 deftest(t):20 fl=psutil.Process21 print(fl)22 print(t)23

24

25 test()26 main()

View Code

装饰器的细节问题:

from functools import wraps 在装饰器中添加显示备注信息,如下代码

importpsutilfrom functools importwrapsdefcount(func):

@wraps(func) #这里需要添加wraps这个装饰器deftimer():

fu=psutil.cpu_count()print(fu)

func(1)returntimer#查看cpu使用情况的一个函数

@countdefmain(n):'''这个是mian函数的'''res=psutil.cpu_times()print(res)print(n)

#return 123 如果函数里有return 打印这个函数结果时候显示空 因为,main显示已经被conunt函数装饰了,所以要在timer里面retrun才对print(main.__doc__) #这里是打印上面的备注信息

生成器

生成器:不断调用和返回值,生成器

迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器,可以直接作用于for循环的对象统称为可迭代对象

# def Pycharm(name):

# food_list=[]

# food= yieldfood_list

# print("%s想吃%s" %(name, food))

# food_list.append(food)

# print(food_list)

#

#

# res= Pycharm('alex')

# next(res) #next 会停留在 food=yield这里,send传送后继续执行下面的内容

# res.send('fangfood')

python之反射

反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子

它的核心本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动

classfunc():def __init__(self):

self.teacher='teacher'self.student='student'self.age='ee'self.name='name'

deftest01(self):print('反射机智显示test01功能%s' %self.teacher)deftest02(self):print('反射机智显示test02功能%s' %self.student)

func=func()defrun():''':return:通过res用户输入相对应的变量、函数方法

通过反射机制来判断、增删添改'''res=input('>>我想执行里面的函数:').strip()

hasa=hasattr(func,res) #hasattr 可以判断func类中是否存在res传入的变量或者函数方法

res=getattr(func,res,'not find') #getattr 可以获取传入方法或者函数的执行结果,

#得到是内存地址需要通过res()来展示内容

#not find意思 如果没有找到相对应的变量和函数 通过print(res())来打印出notfind

#print(res())

tom=setattr(func,res,18) #setattr 可以修改传入变量的结果 比如self age=17 通过setattr可以修改成18

print(func.age)

delattr(func,'age') #delattr 删除age这个变量

print(func.age)#setattr(func,res,18)

run()

python反射、闭包、装饰器_python之闭包、装饰器、生成器、反射相关推荐

  1. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

  2. python grpc unary call错误_python的黑魔法-装饰器

    python的装饰器 装饰器 简单的来说就是函数的函数,在执行目标函数时,先执行装饰器函数,很像HOOk 简单的装饰器 实现一个打印日志的装饰器 def myLogger(func):def wrap ...

  3. python什么是装饰器_python学习之装饰器是什么?

    学完python函数,接下来我们跟着猿人学python一起来看看什么是装饰器. 大家应该多多少少在其它地方有看过或是听过"装饰器"这个词.装饰器,顾名思义,就是用来装饰的,它装饰的 ...

  4. python的网页解析器_python 之网页解析器

    一.什么是网页解析器 1.网页解析器名词解释 首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出& ...

  5. python自带网页解析器_python 之网页解析器

    一.什么是网页解析器 1.网页解析器名词解释 首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出& ...

  6. python3闭包通俗解释_Python|闭包、装饰器,简单的实例,通俗的理解

    闭包和装饰器都是属于函数的语法范畴,是在函数定义中以另一个函数做为形参的语法机制. 1 闭包(Closurer) 闭包是定义内部函数的一种语法规则,要理解闭包,请看下面的实例:def outer(t) ...

  7. python重写和装饰器_python中的装饰器

    装饰器的本质: 当你在用某个@decorator来修饰某个函数func时,如下所示: @decorator def func(): pass 其解释器会解释成下面这样的语句: func=decorat ...

  8. python修饰器_python设计模式之修饰器模式

    python设计模式之修饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. [ ] 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) [ ] 使用组合 ...

  9. python tkinter 循环显示文本_Python简易音乐播放器

    上一篇介绍了点阵字展现动态歌词,后续的思路有一条是添加图形界面.这两天搜了下tkinter图形界面的帖子,做了个简单的播放器界面,听首<盗将行>感受下效果吧 Python图形界面 图形界面 ...

最新文章

  1. JDK1.8源码阅读系列之二:LinkedList
  2. Python列表List
  3. 天气预报如何得获得?
  4. GitHub 和 Gitee 树形展示插件
  5. Python教学视频(二)输出语句的使用
  6. windows11iis如何安装?
  7. ubuntu 18.04安装 远程控制软件 TeamViewer 亲测有效简单
  8. Unity发布WebGL之后读取StreamingAssets文件路径数据
  9. php验证码汉字显示音节,普通话拼音PHP 标调音节 1403个
  10. leetcode46题 php实现,Leetcode PHP题解--D46 893. Groups of Special-Equivalent Strings
  11. php如何开启COM组件
  12. SharePoint列表SPList运用SPQuery进行查询的两个实用方法
  13. 2021年的Gartner云基础设施和平台服务魔力象限有什么不一样?
  14. MySQL基础期末考试试题
  15. Microsoft PlayReady DRM及其工作原理
  16. 【React】解决antd样式没有显示问题(网页频闪问题)
  17. 楼宇控制服务器显示FT,产品 - LOYTEC楼宇管理及控制 - 台达集团
  18. 超级表格迎来深度用户:苏河汇,一个天使投资机构
  19. 知识图谱推理问题总结
  20. 计算机网络群名,怎么改群名字

热门文章

  1. [翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能
  2. WebApi client 的面向切面编程
  3. 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)
  4. 使用VS Code开发 调试.NET Core 应用程序
  5. 关于.NET下开源及商业图像处理(PSD)组件
  6. PS2019进阶笔记(二)
  7. 256种编程语言大荟萃
  8. 【ArcGIS风暴】全国1:100万基础地理数据库获取及ArcGIS图幅完美拼接---以甘肃省为例
  9. C语言试题六十五之请编写函数实现猴子吃桃问题
  10. Android之解决多语言适配部分TextView内容左对齐和内容一行不排满就到第二行问题