一 函数的作用域注意
- 函数名可以作为返回值返回,返回值加一个
()
就可以调用
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 bar
def 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 ret
def show(n):
return n.endswith('思')
print(filter_test(show,girl))
['百百', '美美', '可可']
filter函数
函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
filter收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
print(list(filter(lambda n:not n.endswith('思'),girl)))
['百百', '美美', '可可']