函数是第一类对象
函数名是可以被引用的
def foo():
print(‘hello wanglu‘)
a = foo
a()
函数名可以当做参数传递
?
def foo(a, b, doo):
print(a, b, doo)
doo()
?
def coo():
print(‘hello wanglu‘)
foo(1,2,coo)
函数名可以当做返回值使用
传参的时候没有特殊需求,但一定不要加括号,不让当场执行
def foo():
print(‘hello wanglu‘)
def doo(a):
return a
a = doo(foo)
print(a)
a()
函数名可以被当做容器类型的元素
# 例题1
def foo():
print(‘hello wanglu‘)
l1 = [1, ‘2‘, foo, foo()]
f = l1[2]
print(f)
f()
# 例题2
def register():
print(‘register‘)
def login():
print(‘login‘)
def shopping():
print(‘shopping‘)
def pay():
print(‘pay‘)
doo = {
‘1‘:register,
‘2‘:login,
‘3‘:shopping,
‘4‘:pay
}
def moo():
while True:
print(‘‘‘
1、注册
2、登录
3、购物
4、付款
5、退出
‘‘‘)
l1 = input(‘输入对应的编号:‘).strip()
if l1 == ‘5‘:
break
elif l1 not in doo:
continue
else:
doo[l1]()
moo()
在函数内调用函数
# 例题1
def foo():
print(‘hello wanglu‘)
def coo():
foo()
print(‘ko ko da yo‘)
coo()
# 例题2
def foo(x,y):
if x > y:
return x
else:
return y
# print(foo(1,2))
?
def foot(x,y,z,w):
roo = foo(x,y)
roo = foo(roo,z)
roo = foo(roo,w)
return roo
print(foot(1,20,50,4444))
函数嵌套的定义
def foo():
def coo():
print(‘hello wanglu‘)
coo()
foo()
存放名字(变量名,函数名等)的空间
如果你想访问一个变量值,必须先访问对应的名称空间,拿到名字和对应的内存地址的绑定关系
名称空间的分类
1、内置名称的空间
就是存储python提前给你定义好的名字,的空间
2、全局名称空间
存放于文件级别的名字,就是全局名称空间
如if、while、for内部定义的名字执行之后都存放于全局名称空间
3、局部名称空间
函数内部定义的所有名称都存放在当前函数的内置名称空间里
1、内置名称空间
在python解释器启动的时候生效,关闭解释器的时候失效
2、全局名称空间
当你启动当前py文件时生效,当页面代码执行完毕时失效
3、局部名称空间
当你调用当前函数时生效,函数体最后一行代码执行结束就失效
名称空间的查找顺序:
局部:局部>全局>内置
全局:全局>内置 内置再找不到就报错
函数内部使用的名字,在定义阶段已经规定死了,与你的调用位置无关
x = 111
def foo():
x = 222
def foo2():
x = 333
def foo3():
x = 444
def foo4():
x = 555
# print(x)
print(‘hello wanglu‘)
foo4()
foo3()
foo2()
foo()
?
?
# 例题2
?
x = 111
def foo():
print(x)
def foo2():
print(x)
return foo2
foo()
?
f = foo()
f() # 打印三遍
"""
作用域的分类:
1、全局作用域
全局可以调用的名字就存在于全局作用域
?
内置名称空间+全局名称空间
2、局部作用域
局部可以调用的名字就存放与局部作用域
局部名称空间
?
global:声明全局变量(***)
nonlocal:在局部名称空间声明局部变量,在局部修改上层函数
的变量(*)
?
只有可变类型可以在局部修改外部变量的值 (*****)
"""
?
?
# x = 1
#
# def index():
# global x
# x = 2
# index()
#
# print(x)
?
?
# 在局部修改外部函数的变量
# x = 1111
#
#
# def index():
# x = 1
#
# def func2():
# x = 2
#
# def func():
# nonlocal x
# x = 3
#
# func()
# print(x)
#
# func2()
# print(x)
#
#
# index()
# print(x)
?
# l1 = []
# def index(a):
# l1.append(a)
# # print(l1)
# index(1)
#
# print(l1)
?
# 局部变量的修改无法影响上层,上上层
?
def index():
x = 1
?
def index2():
nonlocal x
x = 2
?
index2()
print(x)
?
?
index()
?
原文:https://www.cnblogs.com/zhangjinyi97/p/11837904.html