一 函数对象
# 函数对象:函数是第一类对象,函数可以被当成变量去用
# 1.可以被赋值
# def func():
# print("abc")
# f = func
# print(f is func)#True
# f()#abc
# 2.可以当做参数传给另外一个函数
# def bbc(a):
# print(a)
# a()#abc
# bbc(func)
# 3.可以当作函数的返回值
# def bdc(f):
# return f
# res = bdc(func)
# print(res)
# res()#abc
#4.可以当作容器类型的元素
# l = [func]
# l[0]()#abc
#案例
def login():
print(‘登录‘.center(50,‘*‘))
def register():
print(‘注册‘.center(50, ‘*‘))
def transfer():
print(‘转账‘.center(50,‘*‘))
func_dic = {
‘1‘ : [‘登录‘,login],
‘2‘ : [‘注册‘,register],
‘3‘ : [‘转账‘,transfer],
}
while True:
print("0 退出")
for k in func_dic:
print(k,func_dic[k][0])
coles = input("请输入您的命令:").strip()
if coles == ‘0‘:
break
if coles in func_dic:
func_dic[coles][1]()
else:
print("请输入正确的命令")
二 函数嵌套
#可以把大功能拆分,变成一点点小功能
#案例
def max2(x,y):
if x>y :
return (x)
else:
return (y)
def max4(a,b,c,d):
res = max2(a,b)
res1 = max2(res,c)
res2 = max2(res1,d)
return res2
a = max4(1,2,3,4)
print(a)
三 名称空间与作用域
#名称空间:存放名字与其对应的内存地址的地方
#名称空间分为三大类:
#1.内置名称空间:存放的是python解释器自带的名字
#生命周期:解释器启动则产生,解释器关闭则销毁
#2.全局名称空间:存放的是顶级的名字
#生命周期:py程序刚开始运行则产生,py程序结束
#3.局部名称空间:存放的是函数内的名字
#生命周期:函数调用则产生,函数结束则销毁
#LEGB(L指的是当前,E指的是外层,G指的是全局,B指的是内置)
#名称空间的”嵌套“关系是函数定义阶段、扫描语法是时生成的,与调用位置无关
四 闭包函数
# global:在局部修改全局不可变类型#nonlocal:只会在E级别找
#闭函数:被封闭起来的函数定义函数内部的函数,闭函数的特点是只能在函数内用
#包函数:该函数引用了一个名字,该名字是来自与e这一层的
#闭包函数:指的是定义在函数内部的函数引用了一个来自于外层函数作用域中的名字
#为函数体传参有两种解决方案
#方案一:直接以参数的形式传入
#方案二:闭包函数的方式传入
五 装饰器
#装饰器遵循开放封闭原则
#不修改对象源代码和对调方式
#案例
import time
def bella(func):
def wrapper(*args,**kwargs):
start = time.time()
res = func(*args,**kwargs)
end = time.time()
print("run time is %s" %(end - start))
return res
return wrapper
def index():
print(‘from index‘)
time.sleep(3)
# @bella home = bella(home)
def home(name):
print(‘welcome %s tp home page‘ % name)
time.sleep(0.5)
index = bella(index)
index()
home(‘bingguo511‘)
home = bella(home)
六 迭代器
#什么是迭代器:迭代器指的是迭代取值的工具。
#迭代是一个重复的过程,但是每次重复都是基于上一次的结果而来
#为何要用迭代器:为了找到以一种新的、统一的取值方式(可以不依赖于索引以及key的)
#惰性计算,不耗费内存
#如何用迭代器:(1)可迭代的对象 1.内置有__iter__方法
#(2)迭代器对象
#1.内置有__iter__方法 2.内置有__next__方法
#调用:可迭代对象.__iter__()返回迭代器对象
#调用:迭代器对象.__next__()返回迭代器对象
iter_dic = iter(dict)
原文:https://www.cnblogs.com/mingyunshi/p/14635678.html