扩展:先讲讲函数对象的概念
"""
什么是函数对象,就是把函数看成是一个对象,或者是一个变量
"""
print(0) #这是不是调用的print这个函数
a = print #是不是把函数赋值给a,也就是a就相当于这个函数
a(1)
b = print(1) # 就是会调用print(1)这个函数,并且把返回值赋值给函数本身
print(b)
aa = [type, 1,2,3]
print(aa[0]("hello")) #也可以把函数放在容器(比如列表,元组,字典等)里面使用
def func(a):
"""
也可以把函数当做参数去传
:param a:
:return:
"""
b = a("请输入你的名字")
print(b)
func(input)
def func2():
"""
函数也可以是返回值
:return:
"""
return input
func2()("请输入你的年龄")
名称空间
#名称空间
# 堆栈
# 堆就是名称空间 就是存储变量名的地方
# 三种名称空间
# 内建名称空间:存储内置变量名 内置函数名
#全局名称空间:存储的自定义的在外部的变量名,函数名
#局部名称空间:在函数内部定义的形参,函数名,变量名
# 一个程序里的数据都是会存储在对应的位置
# 名称空间 --> 用来存储名字的地方!!!
作用域
# 作用域就是数据的使用范围
# 也就是内建名称空间和全局名称空间存储的数据,全局都可以使用
# 局部作用域: 这个数据只有在局部位置才能使用(比如函数内)
name = "李白"
print(name)
def fun():
print(name)
fun()
def fun():
name = "杜甫"
print(name)
fun()
print(name)
global 和 nonlocal
name = 12
def func():
global name
name = 13
func()
print(name)
def func():
global name #把变量定义成全局变量,修改的是全局变量
name = 14
age =15
sex = "男"
def func_0():
global name
global age
nonlocal sex#把变量定义成外层的局部变量,修改的是外层的局部变量
age = 16
name = 15
sex = "女"
func_0()
print(age)
print(sex)
func()
匿名函数 | lambad函数
格式是
lambda 参数:具体功能代码
lamda是没有名字的,也就是说如果要使用的话,需要赋值让这个变量代表lambda这个函数
def func(a,b):
print(a+b)
func(12,22)
dunc_0 = lambda a,b: print(a+b)
dunc_0(22,44)