2018-6-11-Python全栈开发day16-高阶函数

1.函数的作用域

  对于一个函数来说,无论从何处调用,函数的作用域在编写的时候,已经确定了,

  对于函数内嵌套的子函数,在外部不能直接调用子函数。

2.匿名函数lambda

  格式: lambda x:x+1

  用lambda声明是匿名函数,然后后面引入变量,可以是多个,以冒号间隔,后来跟着变量的结构式

  通常是和其他参数一起使用

  

a=lambda x:x+'_sb'
print(a('xuzhneg'))

3.函数式编程介绍

  高阶函数的特征

  1.函数的传入参数是一个函数名

扫描二维码关注公众号,回复: 1559885 查看本文章

    

def test(func,x)

  2.函数的返回值是一个函数

  

def test(x,y)
    ...
    return func(x)

  函数式是指包括编程语言定义的函数和数学意义上的函数

  2.1 尾递归优化

  关于递归,下面的递归,当函数被调用的时候,在运行到a*52时,函数需要计算a=test(x+1)的值,后面还有等待函数计算的值

  如果在函数调用结尾,这个函数就算结束了,那么就是尾递归,如果递归的时候,后面还有值在等待接收,那么不是尾递归

  

  最简单的理解:函数的最后一步是调用自身的函数,就是尾递归,

function story() 
{ 从前有座山,山上有座庙,庙里有个老和尚,一天老和尚对小和尚讲故事:story()
// 尾递归,进入下一个函数不再需要上一个函数的环境了,得出结果以后直接返回。}
function story()
{ 从前有座山,山上有座庙,庙里有个老和尚,一天老和尚对小和尚讲故事:story(),小和尚听了,找了块豆腐撞死了
// 非尾递归,下一个函数结束以后此函数还有后续,所以必须保存本身的环境以供处理返回值。} 作者:匿名用户 链接:https://www.zhihu.com/question/20761771/answer/23254340 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  

def test(x)
    ...
    a=test(x+1)
    return a*52

  3.2 最后一步和最后一行的关系

    代码的最后一步不一定是最后一行,比如说遇到判断。

4.map函数

 作用:将一个可迭代对象,放入函数中进行运算,然后输出对应的可迭代对象。

 代码:

s=[1,2,3,4,5,8]
def test(func,x):
    s=[]
    for i in x:
        res=func(i)
        s.append(res)
    return s
def add_(x):
    return x**2
a=test(add_,s)
print(a)

  4.1 lambda方式

    

s1=[1,2,3,4,5,8]
s2=['alex','xuzheng','yehaibin']
a=map(lambda x:x.upper(),s2)
print(list(a))

5.filter函数

  作用:将一个可迭代对象,通过某个条件进行判断,判断结果为true的,输出到另外一个可迭代对象中

  

si=['yehaibin','xuzhneg','zhaowei_111','zhangxirui_111']
a=list(filter(lambda x:x.endswith('111'),si))
print(a)


-------lambda

si=['yehaibin','xuzhneg','zhaowei_111','zhangxirui_111']
a=list(filter(lambda x:not x.endswith('111'),si))#not的作用,not就是说结尾不是111的放在可迭代对象中,然后打印出来
print(a)

6.reduce函数

  作用:将一个可迭代对象中的所有值进行运算,然后输出一个值

  

from functools import  reduce#需要从这个模式中导入
#寻求分析:
s1=[1,2,5,6,8,47,454]
a=reduce(lambda x,y:x*y,s1,100)#最后一个100是自己可以额外添加一个起始值
print(a)
s1=[1,2,5,6,8,47,454]
a=reduce(lambda x,y:x*y,s1)
print(a)
s1=[1,2,5,6,8,47,454]
a=reduce(lambda x,y:x+y,range(1,100))
print(a)

7.内置函数

  7.1 abs()-取绝对值

  7.2 all()-将序列中的所有值进行布尔运算,只有全部为true和为空序列时才为true

  7.3any()-只要有一个为true就是true

  7.4bin()-十进制转换为二进制

    hex-十进制转换为十六进制

    oct-十进制转换为八进制

  7.5bool-进行布尔值判断

  7.6bytes-字符串转换为字节

  7.7 dir-显示目录

  7.8 divmod-去数值的商,并且得到余数

  7.8enumerate-给某个迭代器进行遍历,并且进行排序,可以以确定的值为起始

  7.9 eval -将字符串中的特定结构取出来-

    '{'alex':'ds'}'----{'alex':'ds'}

     对字符串中的特定公式进行运算并且输出值

  7.10-hash-

    进行hash值运算

  7.11 isinstamce

    判断数据类型

    isinstance(2,str)

  7.12 globals() -打印所有的全局变量

    locals()-打印所有的局部变量

猜你喜欢

转载自www.cnblogs.com/hai125698/p/9168528.html