函数对象
函数是第一类对象(你可以把函数当作变量来用)
1.函数可以被赋值
2.函数可以当做参数传给另一个函数
3.函数可以当作函数的返回值
4.函数可以当作容器类型的元素
def a():
print("登录".center(50,‘*‘))
?
?
def b():
print("注册".center(50,‘*‘))
?
def c():
print("钱包".center(50,‘*‘))
?
?
def d():
print("转账".center(50,‘*‘))
?
?
?
l={
‘1‘:[‘登录‘,a],
‘2‘:[‘注册‘,b],
‘3‘:[‘钱包‘,c],
‘4‘:[‘转账‘,d]
}
?
?
while True:
print(‘0 退出‘)
for i in l:
print(‘%s %s‘%(i,l[i][0]))
choice = input("请选择你的操作")
if choice == ‘0‘:
break
if choice in l:
l[choice][1]()
else:
print(‘操作有误‘)
函数嵌套
函数嵌套调用:在调用一个函数的过程中,该函数又调用了其他函数
def max(a,b):
if a > b:
return a
else:
return b
?
def max2(a,b,c,d):
x = max(a,b)
y = max(c,d)
print(max(x,y))
?
?
max2(231,534,564,452)
函数嵌套定义:在函数内又定义了其他函数
from math import pi
?
def a(radius,mode=0):
def b(radius):
return 2 * pi *radius
def c(radius):
return pi * (radius * radius)
if mode == 0:
print(b(radius))
elif mode == 1:
print(c(radius))
?
a(3,0)
名称空间与作用域
名称空间
名称空间:存放名字和内存地址绑定关系的地方
内置名字空间:放的是python自带的名字,python\len\inpot
生命周期:解释器启动则产生,解释器关闭则关闭
全局名称空间:放的是*名字
生命周期:运行python文件则立即产生,python文件运行完毕则结束
局部名称空间:放的是函数内的名字
生命周期:调用函数则产生,调用完毕则销毁
结论1:名字的查找优先级
自己所在的局部--->局部---->全局----->内置
L------------------>E--------->G--------->B
基于自己当前所在的位置向外查找
结论2:名称空间的嵌套关系是以函数定义为准生成的,与调用位置无关
len 100
def foo():
print(len)
def bar():
len = 666
foo()
bar()
显示的是100
global:声明引用的是全局变量(在局部改全局)
nonlocal:声明一个名字来自于外层函数,如果外层函数找不到就会报错
作用域
全局作用域:全局存活,全局有效
内置名称空间,全局名称空间
局部作用域:临时存活,局部有效
局部名称空间
闭包函数=名称空间与作用域+函数对象+函数嵌套
闭函数
闭函数:定义在函数内部的函数
包函数
包函数:内部函数应用了一个外部函数的名字
闭包函数的作用:闭包函数是一种为函数体传参的方案
为函数体传参方案一:直接使用形参
def wrapper(x):
print(x)
为函数体传参方案二:闭包函数
def outter(x):
def wrapper():
print(x)
return wrapper
内置函数
help():查看帮助信息(或是注释)
locals():查看名称空间的名字
globals():查看全局空间的名字
max():最大值
min():最小值
reversed():把列表中的内容倒过来
round():四舍五入
slice():把切片规则保存下来了
sum():求和
zip():拉链函数,把第一个列表的东西和第二个列表的东西一一对应组成一个元组存在列表中