函数对象
11.1.1 匿名函数lambda
-
不需要定义函数名,可以节省命名空间
-
些简单的表达式,可读性强
lambda 参数:表达式
def add(a,b): return a+b print(add(1,2)) #正常的函数定义 print((lambda a,b:a+b)(1,2)) #匿名函数用法 res=lambda(a,b) print(res(1,3))
11.1.2 函数对象
把函数直接当成:变量,元素,函数的参数,函数的返回值去使用
(1)把函数当成变量使用
def func():
print('认真听课重在理解')
print(func())
#函数开始执行了,并且有了结果
#这里是函数输出执行之后的结果
print(func)
#这里会输出内存地址的一串符号
#并没有执行
a=func() #把函数的返回值赋值给变量 print(a) 输出函数的返回值 a=func #把函数的内存地址赋值给变量 print(a()) #通过变量a进行赋值
def func(name): print(f'{name}认真听讲重在理解') a = func a('小吴') #把函数当成变量使用
(2)函数可以作为元素,放在列表,元组,字典,集合中进行使用。
def func(): a= input('接收一个歌手名') return a sInger = ['周杰伦','刘德华',func()] #列表中得到的是函数的返回值 print(sInger) def func(): a= input('接收一个歌手名') return a sInger = ['周杰伦','刘德华',func] #得到的是内存地址 print(sInger[2]()) #使用列表的取值方式进行取值后面加括号进行调用。 def func(): a= input('请输入新专辑') return a dic = {'姓名':'周杰伦','性别':'男','新专辑':func()} print(dic) def func(): a= input('请输入新专辑') return a dic = {'姓名':'周杰伦','性别':'男','新专辑':func} print(dic) print(dic['新专辑']()) ----------------------------------------- def func1(): a = input('歌手名') return a def func2(): a = input('性别') return a def func3(): a= input('请输入新专辑') return a dic = {'姓名':['周杰伦',func1], '性别':['男',func2], '新专辑':['七里香',func3]} print(dic['姓名'][1]())
(3)函数作为参数,传递给另外一个函数
def func(): return '周杰伦' def hello (name): print(f'大家好,我是{name},请来参加我的演唱会') hello(func()) #把func函数的返回值传入hello函数。 ------------------------------------------------- def func(): return '周杰伦' def hello (name): print(f'大家好,我是{name()},请来参加我的演唱会') hello(func) #把函数名当参数传入hello函数。 ------------------------------------------------- def add(a,b): return a+b def hello(age): print(f'大家好,我今年{age}岁') hello(add(10,8)) # add()先传参,再把函数的返回值传给hello函数
(4)把函数当成另外一个函数的返回值
return----根据需求指定结果返回给函数的值
def func(): def hello(): print('hello') return hello() # 内层函数的返回值返回给外层函数 func() #调用外层函数相当于实在调用内层函数 --------------------------------------- def func(): def hello(): print('hello') return hello # 只返回函数名 # func() # 相当于hello func()() ------------------------------ 函数工厂 def f(): def s(): print('生产产品') return s f()() -------------------------------- 有参数的情况下 def f(x,y): def s(a,b): print(a+b) return s(x,y) #内层函数负责功能,外层函数负责保护数据的。 f(1,2) # 1,2先传给f(x,y)--s(x,y)--s(a,b)--print(a+b)
小练习:
制作一个能进行加减乘除的计算器
答案:
def run():
def jia(a,b):
return a+b
def jian(a,b):
renturn a-b
def chen(a,b):
return a*b
def chu(a,b)
return a/b
num1=float(input("请输入第一个数:"))
a=input("输入运算符")
num2=float(input("请输入第二个数:"))
if a not in("+","-","*","/")
print("输入错误,再输入一次")
a=input("输入错误,请在输入一次")
if a=="+"
print(num1,num2)
elif a=="-"
print(num1,num2)
elif a=="*"
print(num1,num2)
elif a=="/"
print(num1,num2)
run()