Python学习第六天---函数与lambda表达式

本文深入探讨了Python中的函数定义与Lambda表达式的使用,包括参数传递方式、Lambda表达式的应用场景,以及如何利用map和filter等工具进行高效的数据处理。

1、函数与lambda表达式

        *参数名的使用:在定义函数的时候,当我们不知道这个函数要往里面传多少个值的时候,我们就需要将参数设定为(*参数),这样在传递的时候我们可以往里面传递任意个参数,其实内置的是以一个元组的方式传递的 , 但是当我们在调用该方法往里面传值的时候,当我们想要传递一个tuple类型的时候,会发现传不进去的,我们还需要在传递的时候使用(*Tuple_name)这样的方式进行解包。

      **参数名的使用:(**参数名)相当于字典表的若干个键值对!   传值的话应该按照键值键值这样传!如果想要传递字典表的话同样需要使用 **解包  !

   总结:一个星号的话就是传的元组 ,两个星号的话就是传的字典表这样的!

   

Lambda表达式:

     当我们临时使用某些方法的时候,就可以使用lambda表达式。 所谓的lambda表达式,本质上就是定义一个匿名函数!
基本格式:lambda  参数1,.... : 函数。

f = lambda name: print(name)
f('tom')

f1 = lambda x,y:  x+y
print(f1(5,3))

f 是定一个无返回值的!  f1是定义一个有返回值的,f1中不需要写return就能返回。
 例子:将函数和lambda表达式用在一起,根据不同的语言,来实现打招呼的不同方式。 

def hello_chinese(name):
    print("你好:",name)
def hello_english(name):
    print("hello:",name)

while True:
    name = input('请输入您的姓名:\n')
    if name == 'stop':
        break
    language =input('请选择语言:\n c = > 中文版\n  e => 英文版\n j => 日文版\n')
    if language =='c':
        hello_chinese(name)
    elif language =='e':
        hello_english(name)
    elif language =='j':
        (lambda name: print('莫西莫西',name))(name)

这事一个简单的实现方式,但是很啰嗦! 最后面的用到了lambda表达式!  我们在看一种方式,在C#中叫“委托”,相对简单一些!

def hello_chinese(name):
    print("你好:",name)
def hello_english(name):
    print("hello:",name)

while True:
    name = input('请输入您的姓名:\n')
    if name == 'stop':
        break
    language =input('请选择语言:\n c = > 中文版\n  e => 英文版\n j => 日文版\n')
    if language =='c':
        action = hello_chinese
    elif language =='e':
        action = hello_english
    elif language =='j':
       action =  (lambda name: print('莫西莫西',name))
    action(name)

我们把所有的值都赋值给action这个变量,但是不执行! 在最后调用action的时候在执行!!这就是C#中的委托的概念! 
这样做的好处就是非常的灵活!

下面这个是一个将函数作为一个参数传递的例子:

def hello_chinese(name):
    print("你好:",name)
def hello_english(name):
    print("hello:",name)
def hello_japanese(name):
    print("hello:",name)

"""action,在这里实际传递的是上面所用定义的三个方法的其中的一个的名字!
这就是讲函数作为参数进行传递"""
def hello(action,name):
    action(name)

hello(hello_english,"tom")

他的执行用图解释!是这样的!就是一个委托!

其中action就是委托hello_xxxx函数执行的! 

函数的应用与工具:map、filter

  直接代码看如何使用 : map(函数,可迭代对象)

l = list(range(1,21))
result = []
#需求3:将l中的所有的偶数放再result中
# 第一种方式:
# for n in l:
#     if n % 2 == 0:
#         result.append(n)
# print(result)
# 第二种方式  推导
# result = [x for x in l if x % 2 == 0]
# print(result)

# 需求2:将列表中的数据每一个都加上5
# 第一种方式
# result = [x+5 for x in l]
# print(result)
# 第二种方式
# for x in l:
#     result.append(x + 5)
# print(result)
# 第三种方式:map()
# def add_number(x):
#     return x + 5
# result = list(map(add_number,l))
# print(result)
# for循环效率最低! 推导底层使用c写的!效率最高! map最灵活!

# 需求三:求所有数的平方值
# 第一种方法实现:for
# for x in l:
#     result.append(x**2)
# print(result)
# 第二种实现:推导
# result = [x**2 for x in l]
# print(result)
# 第三种方法实现:map
# def lpf(x):
#     return x**2
# result = list(map(lpf,l))
# print(result)
# 第四种方法:lambda表达式
result = list(map((lambda n : n **2),l))
print(result)

    上图展示了map的使用!

下面查看filter的使用:filter(函数,可迭代对象)

l  =list(range(1,11))
# 需求一:找出l中的偶数
def even_number(x):
    return x % 2 ==0
res = list(filter(even_number,l))
print(res)

同样的也能使用lambda表达式!还有推导还有for循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值