作用域
例1、
def test1():
print('in the test1')
def test():
print('in the test')
return test1()
res = test()
print(res)
>>> in the test
in the test1
None
例2、
name = "alex"
def foo():
name = 'linhaifeng'
def bar():
name = 'wupeiqi'
print(name)
return bar
a = foo()
print(a) #返回bar的地址
a() #执行bar
例3、
def foo():
name = 'lhf'
def bar():
name = 'wupeiqi'
print(name)
def tt():
print(name)
return tt
return bar
r1 = foo()
print(r1) #返回bar()的地址
r2 = r1()
print(r2)#返回tt()的地址
r3 = r2()
print(r3)#返回none
################匿名函数 lambda
匿名函数不嫩太复杂 一行搞定
例1、
def calc(x):
return x+1
res = calc(10)
print(res)
>>>11
func = lambda x:x+1
print(func(10))
>>>11
函数式编程
编程方法论:面向过程:基本编程单位也是函数 分析过程 一步一步
函数式=编程语言定义的函数+数学意义的函数
特点:不使用变量、不修改变量
例1、def foo(n):
print(n)
def bar(name):
print('my name is %s' %name)
foo(bar('alex'))
>>>my name is alex
None
高阶函数:1、函数的参数为是一个函数名 2、返回名包含函数
尾递归:在最后一步调用函数
三大内置函数 map函数:例1、num_1 = [1,2,3,4,5,6] 顺序不变 每个数据处理一遍
基础def map_test(array):
ret = []
for i in array:
ret.append(i ** 2)
print(ret)
return ret
map_test(num_1)
高级 def add_one(x):
return x+1
def map_test(func,array):
ret = []
for i in array:
ret.append(func(i))
print(ret)
return ret
map_test(add_one,num_1)
终极def map_test(func,array):
ret = []
for i in array:
ret.append(func(i))
print(ret)
return ret
map_test(lambda x:x+1,num_1)
map(func,array) 进行迭代 一个迭代器 得到一个可迭代的对象
print(list(map(lambda x:x+1,num_1)))
filter函数:筛选
初级def filter_test(array):
ret = []
for p in array:
if not p.startswith('sb'): #startswith
ret.append(p)
return ret
res = filter_test(moive_people)
print(res)
高级def filter_test(func,array):
ret = []
for p in array:
if not func(i): #startswith
ret.append(p)
return ret
res = filter_test(moive_people)
print(res)
终极print(list(filter(lambda n:n.startswith('sb'),moive_people))) #返回true 值
reduce函数:num_list = [1,2,4,5] 一个序列转化为一个值
# def mutiple(x,y):
# return x*y
def reduce_test(func,array,int=None):
res =array.pop(0)
if int!=None:
for num in array:
res = func(res, num)
return res*int
else:
for num in array:
res = func(res,num)
return res
print(reduce_test(lambda x,y:x*y,num_list,7))
from functools import reduce
print(reduce(lambda x,y:x+y,num_list))
map() 处理序列中每一个列表,得到的结果是一个迭代器,该迭代器元素个数及位置 与原来一样
filter()遍历序列中的每一个元素,判断每个元素得到布尔值,如果是 True则保留下来
people = [
{'name':'alex','age':1000},
{'name':'wupeiqi','age':10000},
{'name':'yuanhao','age':9000},
{'name':'linhaifeng','age':18}
]
print(list(filter(lambda p:p['age']<=18,people)))
reduce
面向对象