一 函数的作用域注意
函数名可以作为返回值返回,返回值加一个
()
就可以调用
def test1(): print('我是test1')def test(): print('我是test') return test1 res = test() print(res())
函数的作用域于与函数定义有关,与调用位置无关
a
返回的就是bar
的函数内存地址,a()就是在调用bar
函数,此时name
为局部变量,虽然调用位置在最后,但是作用域与函数定义有关
name = '花花'def foo(): name = '思思' def bar(): name = '可可' print(name) return bar a = foo() print(a) a() foo()()
<function foo.<locals>.bar at 0x10c28ce18> 可可 可可
二 : lambda匿名函数
fun = lambda name1,name2 : print(name1 +"比"+name2+"好看") fun('雪芙','可可')
雪芙比可可好看
lambda 返回值
fun2 = lambda x,y,z: [x+1,y+1,z+1] result = fun2(1,2,3) print(result)
[2, 3, 4]
三 : 高阶函数
高阶函数特点,参数是一个函数,返回值是一个函数
高阶函数
把函数当作参数传给另外一个函数
def foo(fun,name): ar fun(name)def bar(name): print('my name is %s' %name) foo(bar,'雪芙')
my name is 雪芙
返回值中包含函数
def foo(): #n=bar return bardef bar(name): print('my name is %s' %name) foo()('可可')
map函数
模拟map函数
def map_test(func,array): ret = [] for i in array: ret.append(func(i)) return ret
print(map_test(lambda x:x**2,[1,2,3]))
[1, 4, 9]
map函数
会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
第二个参数为可迭代对象
map(function, iterable, ...)
转大写
# print(list(map(lambda x:x.upper(),"hellow")))
['H', 'E', 'L', 'L', 'O', 'W']
做加1操作
第一个参数也可以是自己定义的某个函数,
def add_one(x): return x+1
print(list(map(add_one,[1,2,3,4])))
reduce函数
模拟reduce函数
num = [1,2,3]def reduce_test(func,array,init=None): if init is None: res = array.pop(0) else: res = init for num in array: res = func(res,num) return res print(reduce_test(lambda x,y:x+y,num,100))
106
reduce函数
函数会对参数序列中元素进行累积。function
-- 函数,有两个参数iterable
-- 可迭代对象initializer
-- 可选,初始参数
reduce(function, iterable[, initializer])
求和
print(reduce(lambda x,y:x+y,[1,2,3],10))
16
filter函数
模拟filter函数
girl = ['百百', '美美', '思思', '可可']def filter_test(func,array): ret = [] for p in array: if not func(p): ret.append(p) return retdef show(n): return n.endswith('思') print(filter_test(show,girl))
['百百', '美美', '可可']
filter函数
函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
filter收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
print(list(filter(lambda n:not n.endswith('思'),girl)))
['百百', '美美', '可可']
作者:TianTianBaby223
链接:https://www.jianshu.com/p/ec12ba4d95d9