一.函数对象:指的是函数的内存地址可以像一个变量值一样去使用
def foo(): #foo为函数的内存地址
print("from foo")
#1.变量值可以被引用
f=foo
print(f)
f()
#2.变量值可以当做参数传给另外一个函数
def bar(x):
print(x)
x()
bar(foo)
#3.变量值可以当做函数的返回值
def func(x):
return x
f=func(foo)
print(f)
f()
#4.变量值可以当做容器类型的元素
# l=[foo,]
# print(l)
# l[0]()
dic={"l":foo}
print(dic)
dic["l"]()
def register():
print("注册......")
def login():
print("登陆......")
def pay():
print("支付......")
def transfer():
print("转账......")
fun_dic={
"1":register,
"2":login,
"3":pay,
"4":transfer
}
fun_dic["l"]()
while True:
print("""
0 退出
1 注册
2 登录
3 支付
4 转账
""")
choice = input("请输入你的操作:").strip()
if choice == "0":
break
if choice not in fun_dic:
print("输出的指令不存在")
continue
fun_dic[choice]()
二.函数的嵌套调用:在一个函数内部又调用其他函数
def func():
def foo():
print("from foo")
print(foo)
foo()
x=1
print(x)
func()
from math import pi
def circle(radius,action):
def cal_perimeter():
return 2 * pi * radius
def cal_area():
return pi * (radius ** 2)
if action == 1:
res=cal_perimeter()
elif action == 2:
res=cal_area()
return res
res=circle(10,1)
print(res)
三.名称空间:指的是存放名字与值内存地址绑定关系的地方(内存空间)
1.名称空间分为三大类:
内置名称空间:存放的是python解释器自带的名字
产生:python解释器的启动则产生
销毁:python解释器关闭则销毁
全局名称空间:在顶级定义的名字
产生:执行python程序时产生
销毁:python程序执行完毕后则销毁
局部名称空间:在函数内定义的名字
产生:在函数调用是临时产生
销毁:在函数调用完毕后则销毁
2.三种名称空间产生的先后顺序:内置--->全局-->局部
查找名字的顺序:从当前位置往外一层一层查找
如果当前在局部名称空间:局部--全局--内置
如果当前在全局名称空间:全局--内置
len=111
def foo(len):
len=222
print(len)
len=22
foo(len) #222
x=0
def f1():
# x=1
def f2():
# x=2
def f3():
# x=3
print(x)
f3()
f2()
f1() #0
def foo1():
x=55
def foo2():
def foo3():
print(x)
foo3()
foo2()
foo1() #55
四.作用域:指的是作用范围
1.全局作用域:包含内置与全局名称空间的名字
特点:全局存活,全局有效
2.局部作用域:包含局部名称空间的名字
特点:临时存活,局部有效
注意:!!!作用域的关系是在函数定义阶段就已经固定死了,与调用位置无关
#示范一:
def f1():
print(xxx)
xxx=111
def f2():
xxx=222
f1()
f2() #111
#示范二:
xxx=111
def f1():
# xxx=333
print(xxx) #111
yyy=222
print(yyy)
f1() #222