1.函数的作用域
对于一个函数来说,无论从何处调用,函数的作用域在编写的时候,已经确定了,
对于函数内嵌套的子函数,在外部不能直接调用子函数。
2.匿名函数lambda
格式: lambda x:x+1
用lambda声明是匿名函数,然后后面引入变量,可以是多个,以冒号间隔,后来跟着变量的结构式
通常是和其他参数一起使用
a=lambda x:x+'_sb' print(a('xuzhneg'))
3.函数式编程介绍
高阶函数的特征
1.函数的传入参数是一个函数名
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()-打印所有的局部变量