python - lambda及应用理解

一、语法部分

1. 有参

a = lambda x: x * x
print(a(2))	# 4
print(a)	# <function <lambda> at 0x000001EF08062EA0>
  • 其中 lambda: 前定义的为形参 是调用lambda函数时所要传入的参数

2. 无参

a = lambda: 2
print(a())	# 2

3. 返回值

  • 以上面的代码举例 其中 : 后面得出的结果就是返回值

二、理解

a = lambda x: x * x
print(a)		# <function <lambda> at 0x000002EB97E02EA0>
print(id(a))		# 3210888621728
print(hex(id(a)))		# 0x2eb97e02ea0
  • 其中 直接打印a为打印此lambda对象 会显示为一个lambda的函数 在十六进制的内存地址处(通过id()方法对比得出)
  • 相当于lambda就是一个函数 只不过目的是简化代码

重点

  1. 其中涉及到函数式编程的概念 意思见下面

    和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。
    和过程化编程相比,函数式编程里函数的计算可随时调用。

  2. 意思就是 函数时编程注重函数的结果 不看重过程怎么样 我只需要你通过函数处理的数据不想知道你其中做到操作
  3. 但适用只要结果时用 相对于过程化的def定义的函数 重用性很低

三、 应用

en_num1 = tk.Entry(win, )
en_num1.pack()
en_num2 = tk.Entry(win, )
en_num2.pack()

data = lambda: [en_num1.get(), en_num2.get()]

def pri():
    print(data())
    
tk.Button(win, text='hit me', command=pri).pack()

在这里插入图片描述

  • 其中我截取了一个gui的代码片段
  • 因为我需要动态的获取 我每次输入数字 点击按钮时都需要获取当前我输入的值为多少
  • 然后我定义了一个名为data的lambda函数 返回一个包含输入框数据的数组 当我每次调用pri时 print()会每次打印data当前的值 因为如果函数不调用是不会执行的 只有当我点击按钮 print -> data 来获取data函数的返回值

关于Button中command传函数不加()原因

  1. 不加括号 command=pri
    • 因为传入参数时 不加括号意思是传入一个对象 我们这里理解为一个地址 通过传入的地址 程序就能在此地址找到函数并且调用他
  2. 加括号 command=pri()
    • 意思为我给你传入pri函数的返回值 但pri并没有返回值 相当于我传入了一个None 所以点击传入pri()的按钮会没有反应
    • 如果需要使用加括号 比如以后想向调用函数中传参可以使用lambda
      command=lambda: pri()
      
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值