python入门开发笔记之函数进阶

时间:2023-5-17来源:脱发治疗 作者:佚名 点击:

看白癜风到中科白癜风医院 https://wapyyk.39.net/hospital/89ac7_registers.html

本节重点:

使学生掌握函数名称空间、闭包、装饰器知识本节时长需控制在分钟内

名称空间

又名namespace,顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方

名称空间共3种,分别如下

locals:是函数内的名称空间,包括局部变量和形参globals:全局变量,函数定义所在模块的名字空间builtins:内置模块的名字空间不同变量的作用域不同就是由这个变量所在的命名空间决定的。

作用域即范围

全局范围:全局存活,全局有效局部范围:临时存活,局部有效查看作用域方法globals(),locals()

作用域查找顺序

level=L0n=22deffunc():level=L1n=33print(locals())defouter():n=44level=L2print(locals(),n)definner():level=L3print(locals(),n)#此外打印的n是多少?inner()outer()func()

问题:在inner()里的打印的n的值是多少?

LEGB代表名字查找顺序:locals-enclosingfunction-globals-builtins

locals是函数内的名字空间,包括局部变量和形参enclosing外部嵌套函数的名字空间globals全局变量,函数定义所在模块的名字空间builtins内置模块的名字空间

闭包

关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。

defouter():name=alexdefinner():print("在inner里打印外层函数的变量",name)returninnerf=outer()f()

闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

装饰器

你是一家视频网站的后端开发工程师,你们网站有以下几个版块。

defhome():print("---首页----")defamerica():print("----欧美专区----")defjapan():print("----日韩专区----")defhenan():print("----河南专区----")

视频刚上线初期,为了吸引用户,你们采取了免费政策,所有视频免费观看,迅速吸引了一大批用户,免费一段时间后,每天巨大的带宽费用公司承受不了了,所以准备对比较受欢迎的几个版块收费,其中包括“欧美”和“河南”专区,你拿到这个需求后,想了想,想收费得先让其进行用户认证,认证通过后,再判定这个用户是否是VIP付费会员就可以了,是VIP就让看,不是VIP就不让看就行了呗。你觉得这个需求很是简单,因为要对多个版块进行认证,那应该把认证功能提取出来单独写个模块,然后每个版块里调用就可以了,与是你轻轻的就实现了下面的功能。

#_*_coding:utf-8_*_user_status=False#用户登录了就把这个改成Truedeflogin():_username="alex"#假装这是DB里存的用户信息_password="abc!23"#假装这是DB里存的用户信息globaluser_statusifuser_status==False:username=input("user:")password=input("pasword:")ifusername==_usernameandpassword==_password:print("wel

转载注明  http://www.hzlqsc.com/tfzl/13988.html

首页| 网站简介| 发布优势| 广告合作| 隐私保护| 服务条款| 合作伙伴| 网站地图| 版权申明

版权所有 脱发网站 
Copyright 2012-2020 All Rights Reserved.