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.对扩展是开放的 为什么要对扩展开放呢? 我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代码扩展.添加新 ...
随机推荐
- TextView 小技巧
1.TextView的单行显示 最后空间不够的画变为省略号显示 textView中让结尾变为省略号android:ellipsize = "end" 省略号在结尾tv.setEll ...
- Fragment 生命周期 全局变量的声明位置
public class Fragment_shouye extends Fragment { private List<Zixun_shouye> datas; private TopV ...
- actionView
类似于actionBar也是在导航栏里用但是他使用的是menu菜单设置菜单项的AsAction=“always|withText” 本例使用LoaderCallbacks<Cursor>接 ...
- DB2与oracle类型对比
本文摘自http://www.cnblogs.com/cy163/archive/2010/11/17/1880280.html 做过DB2数据库应用迁移的工程师,了解IBM MTK工具在迁移过程中所 ...
- tp5允许跨域
header("Access-Control-Allow-Origin: *"); 放在命名空间之后
- mstsc本地驱动器
mstsc 可以把本地驱动器 挂载到服务器上
- [SoapUI] Compare JSON Response(比较jsonobject)
http://jsonassert.skyscreamer.org/ 从这个网站下载jsonassert-1.5.0.jar ,也可以下载到源代码 JSONObject data = getRESTD ...
- Socket-IO 系列(三)基于 NIO 的同步非阻塞式编程
Socket-IO 系列(三)基于 NIO 的同步非阻塞式编程 缓冲区(Buffer) 用于存储数据 通道(Channel) 用于传输数据 多路复用器(Selector) 用于轮询 Channel 状 ...
- proc demo
源文件test.pc #include <stdio.h> #include <string.h> #include <stdlib.h> #include &qu ...
- MetroApp保存UIEment为图片
写本文的起因是想截取Metro App画面作为图片来使用Win8的共享. 话说自从大MS的客户端UI技术进入XAML时代之后,每次截屏的代码都不太一样,无论silverlight.WPF还是Windo ...