Python3入门与进阶——"匿名函数、三元表达式、map()、reduce()"。

一:匿名函数。

普通函数有名字,匿名函数没有名字。

定义匿名函数的伪代码(格式)是:lambda parameter_list: expression

例如:

可以这样使用:

特性:1:lambda的后面只能接一个“表达式”。如果是“a=x+y”这样,就会出错。

          2:lambda后面的“表达式”会自动作为该“匿名函数”的返回结果。

          3:其实,在很多其他语言中,这个东西被叫做:lambda表达式,因为它后面只能接“表达式”;Python叫这个东西为 “匿  名函数”。

          4:在上面那个例子中,用到的是把”匿名函数“赋值给一个变量,其实这种方法并没有体现”匿名函数“的简洁的特点,它还有一个名字不是吗?用在一些参数为“函数”的函数中可以体现”匿名函数“的简洁的特点。比如:map(),reduce()。

二:三元表达式。

在C和其他一些语言中,三元表达式(条件表达式)的写法是:

x>y? x:y

在Python中的写法是:

x if x > y else y

格式是:

条件为真时的结果 if 条件判断 else 条件为假的结果

元表达式可在lambda表达式编写简单的if else逻辑。

三:函数map()

map的中文为“映射”。

函数说明如下:

 map(function, iterable, ...)

   返回一个将 function 应用于 iterable 中每一项并输出其结果的迭代器
   如果传入了额外的 iterable 参数,function 必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束

我的说明:1:函数有n个参数,后面就有n个iterable。

                 2:iterable中文是:可迭代的对象。

                 3:可迭代的对象指的是:可以用for in循环遍历的对象,例如:list,set。

例如:

解释:map把两个iterable对象的各项“并行”丢入function之中,由于list_y比较短,就截止到5。

四:reduce()。

使用reduce(),要引入functools模块。

函数说明如下:

functools.reduce(function, iterable[, initializer])

    将两个参数的 function 从左至右积累地应用到 iterable 的条目,
    以便将该可迭代对象缩减为单一的值
    例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 是计算 ((((1+2)+3)+4)+5) 的值
    左边的参数 x 是积累值而右边的参数 y 则是来自 iterable 的更新值。
    如果存在可选项 initializer,它会被放在参与计算的可迭代对象的条目之前,并在可迭代对象为空时作为默认值
     如果没有给出 initializer 并且 iterable 仅包含一个条目,则将返回第一项。

我的说明:1:function只能有两个参数。不多不少。只能有一个iterable(可迭代对象)。

                 2:如果有initializer,则放在迭代的开头,比如initializer为7,则在计算1+2之前先计算7+1,再计算8+2。

特别说明:reduce(),是对iterable的每一个值在function中进行“连续计算”的,不限于迭代相加。反正就是一个一个地把iterable的值扔到function里面,而不管在function里做什么。

例子:

如果觉得内容还不错的话,点个赞再继续编程吧~~

发布了46 篇原创文章 · 获赞 9 · 访问量 916

猜你喜欢

转载自blog.csdn.net/weixin_45850939/article/details/104475804
今日推荐