Day 11 函数名,闭包,装饰器. +作业
'''
一、函数名.
def func():
print(5555)
print(func)
#输出结果 <function func at 0x026B5E88> 打印函数地址. # 1. 函数名的内存地址 ,print(func)
f=func
f() #fun() def func():
print(555) def func1():
print(111)
def func2():
print(222)
def func3():
print(333)
l1 =[func(),func1(),func2(),func3()]
for i in l1 :
i
# 结果 :
# 555
# 111
# 222
# 333 def func2():
print(222)
def func3(x):
x() #func2()
func3(func2)
'''
def func2():
print(222)
def func3(x):
print(a)#func2()
return a
a= 3
ret = func3(a)
print(ret)
'''
#运行结果
3
3
'''
'''
def func2():
print(222)
def func3(x):
x()
func3(func2)
# 结果为 222 #函数值作为变量. def func2():
print(222)
def func3(x):
print(x)
return x
ret = func3(func2) #x func2
ret()
# 以上两句话相当与
# f = func2
# f()
# 打印结果:
# 3
# 3 # 1 . 函数的内存地址.
#2. 函数名可以复制给其他变量。
#3. 函数名可以当做容器类的元素
#4. 函数名可以当做函数的参数 。
#5. 函数名可以作为函数的返回值。 ''' # 二 、闭包
#内层函数对外层函数(非全局)的变量的引用,叫做闭包.
def wrapper():
name ="alex"
def inner():
print(name)
inner()
print(inner.__closure__)
wrapper()
# 打印结果:
# alex
# (<cell at 0x00460950: str object at 0x0043C8A0>,) def wrapper(name):
def inner():
print(name)
inner()
wrapper("alex")# 也是闭包函数.
# 打印结果:alex #方法一、
name ="alex"
def wrapper():
def inner():
print(name)
inner()
print(inner.__closure__)#检查是否为闭包,none就不是闭包
wrapper()
# 打印结果:
# alex #闭包的用处 (必考)
# 内层函数对外层非全局变量的引用
# 如果说内层函数时个闭包,python
# 内部有个机制,遇到闭包他会在内存中开启
# 一个内存空间,不会关闭。
'''
# 方法二、
def wrapper():
def inner():
print(666)
return inner
wrapper()() ''' 作业题
1、整理装饰器的形成过程,背诵装饰器的固定格式
2、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
3、编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果(升级题)
3.1.为题目3编写装饰器,实现缓存网页内容的功能:(升级题)
具体:实现下载的页面存放于文件中,如果网页有对应的缓存文件,就优先从文件中读取网页内容,否则,就去下载,然后存到文件中
4.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]
def func(*args):
l1 =[]
for i in args:
for j in range(1,14):
if j ==1 :
j="A"
l1.append((i,j))
return l1
ret=func("黑","红",'花',"片")
print(ret)
[('黑', 1), ('黑', 2), ('黑', 3), ('黑', 4), ('黑', 5), ('黑', 6), ('黑', 7), ('黑', 8), ('黑', 9), ('黑', 10), ('黑', 11), ('黑', 12), ('黑', 13), ('红', 1), ('红', 2), ('红', 3), ('红', 4), ('红', 5), ('红', 6), ('红', 7), ('红', 8), ('红', 9), ('红', 10), ('红', 11), ('红', 12), ('红', 13), ('花', 1), ('花', 2), ('花', 3), ('花', 4), ('花', 5), ('花', 6), ('花', 7), ('花', 8), ('花', 9), ('花', 10), ('花', 11), ('花', 12), ('花', 13), ('片', 1), ('片', 2), ('片', 3), ('片', 4), ('片', 5), ('片', 6), ('片', 7), ('片', 8), ('片', 9), ('片', 10), ('片', 11), ('片', 12), ('片', 13)]
5.写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
例如:min_max(2,5,7,8,4)
返回:{‘max’:8,’min’:2}
def min_max(*args):
max = args[0]
min = args[0]
for i in args:
if i >max :
max =i
if i< min :
min = i
return {'max':max ,'min':min}
print(min_max(2,3,4,6,78,5))
6.写函数,专门计算图形的面积
其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
调用函数area(‘圆形’,圆半径) 返回圆的面积
调用函数area(‘正方形’,边长) 返回正方形的面积
调用函数area(‘长方形’,长,宽) 返回长方形的面积
def area():
def 计算长方形面积():
pass
def 计算正方形面积():
pass
def 计算圆形面积():
pass
import math
def func(*args, **kwargs):
if args[0] == "圆形":
def 圆形():
are = math.pi *args[1]**2
return are
return 圆形()
elif args[0] =='正方形':
def 正方形():
are = args[1]**2
return are
return 正方形()
else:
def 长方形():
are = args[1]*args[2]
return are
return 长方形()
print(func('圆形',4))
7.写函数,传入一个参数n,返回n的阶乘
例如:cal(7)
计算7*6*5*4*3*2*1
‘’‘’
def cal(n):
sum = 1
for i in range(1,n+1):
sum =sum*i
return sum
print(cal(7))
输出结果为 5040
‘’‘’
8、用面向函数的思想完成购物车作业(升级题)
函数一:实现三次登陆功能
函数二:实现新用户注册功能
函数三:购物功能
进阶任务:将购物功能拆分成多个函数
Day 11 函数名,闭包,装饰器. +作业的更多相关文章
- 第四天 内置函数2 随机码 装饰器 迭代器、生成器 递归 冒泡算法 JSON
关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的 ...
- python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)
一.函数名应用 函数名是什么?函数名是函数的名字,本质:变量,特殊的变量. 函数名(),执行此函数. python 规范写法 1. #后面加一个空格,再写内容,就没有波浪线了. 2.一行代码写完,下面 ...
- python 函数名 、闭包 装饰器 day13
1,函数名的使用. 函数名是函数的名字,本质就是变量,特殊的变量.函数名()加括号就是执行此函数. 1,单独打印函数名就是此函数的内存地址. def func1(): print(555) print ...
- 函数基础(三) 装饰器\闭包 day 12
目录 昨日回顾 可变长参数 * ** 函数对象 函数嵌套 名称空间和作用域 今日内容 闭包函数 装饰器 语法糖 装饰器模板 迭代器 昨日回顾 可变长参数 * *形参:接受多余的位置实参 *实参(可迭代 ...
- python 闭包@装饰器
1.装饰器 装饰器(Decorator)相对简单,咱们先介绍它:“装饰器的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数”,听起来有点绕,没关系,直 ...
- Python 进阶_闭包 & 装饰器
目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引 ...
- 闭包&装饰器详解
闭包 先不着急看闭包的定义,让我们从一段示例代码开始.如果将上一个示例稍微修改下: >>> def outer(): ... x = 1 ... def inner(): ... p ...
- 【Python】 闭包&装饰器
python中的函数本身就是对象,所以可以作为参数拿来传递.同时其允许函数的层级嵌套定义,使得灵活性大大增加. 闭包 闭包的定义:将函数的语句块与其运行所需要的环境打包到一起,得到的就是闭包对象.比如 ...
- Python闭包装饰器笔记
Python三大器有迭代器,生成器,装饰器,这三个中使用最多,最重要的就是装饰器.本篇将重要从函数嵌套开始讲起,从而引入闭包,装饰器的各种用法等. python中的一切都是一个对象(函数也是) 1.首 ...
- python基础之函数当中的装饰器
在实际工作当中存在一个开放封闭原则 1.对扩展是开放的 为什么要对扩展开放呢? 我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代码扩展.添加新 ...
随机推荐
- Apache Cordova vs Adobe PhoneGap: the differences and which one to use
http://www.makehybridapps.com/2014/06/09/cordova-vs-phonegap-the-differences-and-which-one-to-use/
- jq给动态生成的标签绑定事件的几种方法
经常遇到给动态生成的标签绑定事件不好用,自己简单测试总结了下,结论如下了: body> <!-- 下面是用纯动态方式生成标签 --> <div id="d2" ...
- Loadrunner12.5-录制http://www.gw.com.cn/网页时提示“SSL身份验证失败”错误,这是为什么呢?
问题:LR产品,录制http://www.gw.com.cn/ 网页时提示下图错误,这是为什么呢? 请在如下recording options中选择正确的SSL版本,再进行录制. 注:如何确定那个SS ...
- POSIX systemV共享内存的区别
POISX共享内存分为两种方式: 1.内存映射文件 特点:共享内存的改变能在文件中体现: 2.共享内存区对象 特点:共享内存的改变在文件上看不出来(实际上根本打不开该文件): 以上两者都是基于mmap ...
- geoserver 的缓存技术
geoserver提到的缓存工具共有两个:tilecache和geowebcache.geowebcache是java写的,整合进geoserer中. tilecache则是python写的一个小程序 ...
- UEdit百度富文本编辑器
1.下载地址:http://ueditor.baidu.com/website/download.html 2.引入js/css/语言包 3.表单id设置 3.js代码
- python while语句写法
count=5 while count>0: print 'i love python' count=count-1 else: print 'over'
- 五个步骤搞定敏捷UX设计
互联网产品发展的速度越来越快,人们对于产品的要求也在不断的升级,这直接地导致了用户体验设计的重要性不断提升.与此同时,过去的流程冗长的设计开发模式已经不能够满足快速迭代的需要.<敏捷宣言> ...
- mvc模拟实现
.定义httpmodule <system.webServer> <modules> <add name="UrlRoutingModule" typ ...
- action spring 注入错误,如果检查各项注入都没有错误时,考虑struts 是否配置了namespace(如果你有多个namespace="/")
[ERROR] 2015-01-04 09:42:35,180 (CommonsLogger.java:38) - Exception occurred during processing reque ...