函数作用域
对于一个变量,当他要调用数据时,它的寻找范围一定是自己所在的那个小代码块,找不到后,往上升一级后继续找,以此类推,直到找到,进行数据调用。由此可以知道,越靠近局部代码块的函数,作用域越小。
匿名函数
lambda x:x+1
匿名函数有以下几个特点:
- 它会自动将函数体的计算值作为返回值返回,通常也没有名字
- 匿名函数通常和其他函数联合使用,不会独立存在
- 匿名函数的逻辑非常简单,通常只是一个计算结果
- 在匿名函数中,定义过的形式参数都必须在计算式中参与计算
- 一次的多个返回值会组成元组返回
编程的方法论
- 面向过程
找到解决问题的出口,按照一个固定的流程去模拟解决问题的流程 - 函数式编程(最早出现的编程方法)
函数式 = 编程语言定义的函数+数学定义的函数 - 面向对象
函数式编程
def calc(n) :
n = n + 1
return n
这就是函数式编程的典型方法
高阶函数
高阶函数满足下列条件之一:
- 把函数当做参数传给另一个函数
- 函数的返回值汇总包含函数
尾调用
一言以蔽之,就是在函数的最后一步调用另外一个函数
def bar(n) :
return n
map函数
典型模板:
def map_test(func,array) :
ret = []
for i in num_l :
res = func(i)
ret.append(res)
return ret
map函数的终极用法:
map(lambda x : x-1,num_l) #第一个是运算函数,第二个值列表
一般来说,第二个参数是可迭代对象就可以使用
filter函数
def show(n) :
return n.endwith('sb')
def filter_test(func,array) :
ret = []
for p in array :
if not func(p)
ret.append(p)
return ret
filter函数的终极用法 :
filter(lambda n : not endswith('hh'),movie_people)
reduce函数
def reduce_test(func,array,init = None) :
if init is None :
res = array.pop(0)
for num in array :
res = func(res,num)
return res
reduce函数的终极用法:
reduce(hhh,num_l)
注意,使用reduce函数时,要使用一个引用工具进行调用:
from functools import reduce
三种常用函数的总结
map函数——处理序列中的每个元素,得到一个列表的迭代器。该迭代器的对应列表元素个数及相应位置与原来一样
filter函数——遍历序列中的每个元素,判断每个元素并得到相应的布尔值。若为True,则留下来;若为False,则将其过滤,最终也得到一个列表的迭代器
reduce函数——处理每一个可迭代对象的元素,对这些元素做合并操作
内置函数
- abs() #求绝对值
- all() #判断可迭代对象的元素对应的布尔值是否全为True
- any() #判断可迭代对象的元素对应的布尔值有没有True
- bin() #把十进制数转为二进制数
- bytes() #将变量转换为字节内容,并输出其形式
注:
如果 source 为整数,则返回一个长度为 source 的初始化数组;
如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数;
如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray。
如果没有输入任何参数,默认就是初始化数组为0个元素。
- l.decode('utf-8')
- chr() #输出十进制数字对应的ASCII码符号
- dir() #打印某一类型的内置方法
- divmod() #取余运算方法,同时输出商和余数
- eval() #将字符串中的数据结构提取出来,转换为字典形式;也可以执行字符串当中的数学运算
- hash() #输出一个变量对应的哈希值(哈希运算用于验证程序是否被人修改过)
- help() #输出内置方法的解释文字
- hex() #把十进制转换为十六进制
- oct() #把十进制转换为八进制
- isinstance() #判断一个数据是否为括号内指定的数据类型
- globals() #判断一个数据是否为一种指定的数据类型
- locals() #打印局部变量
- max() #取出数据中的最大值
- min() #取出数据中的最小值