函数(作用域,匿名函数,函数式编程,高阶函数)

一.函数作用域                                          1.函数名表示的是内存地址
1 def test1():
2     print(‘in the test1‘)
3 def test():
4     print(‘in the test‘)
5     return test1
6
7 print(test())
打印:in the test<function test1 at 0x000001E90E452EA0>

2.函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系
1 name = ‘xiaopang‘
2 def foo():
3     name=‘fangjiyi‘
4     def bar():
5
6         print(name)
7     return bar
8 a=foo()
9 a()
运行结果:fangjiyi

二.匿名函数
1.定义:lambda x:x+1    形参 返回值(包含运算逻辑)2.使用方式赋函数名实现单个参数name=‘fang‘func=lambda x:x+‘sb‘func(name)print(func(name))多个参数:f=lambda x,y,z:(x+1,y+1,z+1)print(f(5,6,7))打印结果:(6,7,8)

三.函数式编程函数式编程=编程语言定义的函数+数学意义的函数1.高阶函数定义(满足以下其一)*1函数接收的参数是一个函数名  *2返回值中包含函数*把函数当作参数传给另外一个函数def foo(n):    print(n)

def bar(name):    print(‘my name is %s‘ %name)foo(bar)foo(bar(‘alex‘))*返回值中包含函数方式一def bar():    print(‘from bar‘)def foo():    print(‘from foo‘)    return barn=foo()n()方式二def hanle():    print(‘from handle‘)    return hanleh=hanle()h()运行结果:from handlefrom handle2.高阶函数--filter

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

需求:过滤掉带前缀的字符串1.使用正常方式(类似filter实现的过程):students=[‘sb-bcs‘,‘sb-ljf‘,‘fjy-nb‘,‘ql-nb‘,‘zsb‘]

def sb_reduce(func,array):    ret=[]    for i in array:        if not func(i):            ret.append(i)    return ret

print(sb_reduce(lambda x:x.startswith(‘sb‘),students) )#运行结果:[‘fjy‘, ‘ql‘, ‘zsb‘]2.使用filter函数*filter返回的是迭代器对象students=[‘sb-bcs‘,‘sb-ljf‘,‘fjy-nb‘,‘ql-nb‘,‘zsb‘]print(filter(lambda x:x.startswith(‘sb‘),students) )打印结果:<filter object at 0x000001C1CFEF4978>**通过list方法遍历取值(默认取判断正确的)students=[‘sb-bcs‘,‘sb-ljf‘,‘fjy-nb‘,‘ql-nb‘,‘zsb‘]print(list(filter(lambda x:x.startswith(‘sb‘),students)) )打印结果:[‘sb-bcs‘, ‘sb-ljf‘]***进行 判断修改 实现过滤students=[‘sb-bcs‘,‘sb-ljf‘,‘fjy-nb‘,‘ql-nb‘,‘zsb‘]print(list(filter(lambda x:not x.startswith(‘sb‘),students)) )打印结果:[‘fjy-nb‘, ‘ql-nb‘, ‘zsb‘]

3.高阶函数--mapmap()函数会根据提供的函数对指定序列做映射需求:对任意数组实现加减乘除等处理*正常实现(同时也是map函数实现过程)
 1 num_l=[1,2,10,5,3,7]
 2 def map_test(func,array):
 3     ret=[]
 4     for i in array:
 5         res=func(i) #add_one(i)
 6         ret.append(res)
 7     return ret
 8
 9 print(map_test(lambda x:x+1,num_l))
10 print(map_test(lambda x:x-1,num_l))
11 print(map_test(lambda x:x*2,num_l))
12 print(map_test(lambda x:x/2,num_l))
打印结果:[2, 3, 11, 6, 4, 8][0, 1, 9, 4, 2, 6][2, 4, 20, 10, 6, 14][0.5, 1.0, 5.0, 2.5, 1.5, 3.5]**map函数map函数返回的是一种可迭代对象num_l=[1,2,10,5,3,7]print(map(lambda x:x+1,num_l))打印结果:<map object at 0x000001FE068CA048>***使用map函数需要用list取值出来num_l=[1,2,10,5,3,7]print(list(map(lambda x:x+1,num_l)))打印结果;[2, 3, 11, 6, 4, 8]

4.高阶函数--reduce()直接返回一个具体的值reduce() 函数会对参数序列中元素进行累积。需求:对一个数组进行累积*正常实现(reduce实现原理)
 1 num_l=[2,2,3,10]
 2 def reduce_test(func,array,init=None):
 3     if init is None:
 4         res=array.pop(0)
 5     else:
 6         res=init
 7     for num in array:
 8         res=func(res,num)
 9     return res
10 print(reduce_test(lambda x,y:x*y,num_l)))
11 print(reduce_test(lambda x,y:x*y,num_l,10))#指定参数从他的基础上进行
打印结果:120060000**使用reduce函数需要从functols模块中引入
from functools import reduce
num_l=[3,2,2,9]
print(reduce(lambda x,y:x+y,num_l,1))
print(reduce(lambda x,y:x+y,num_l))
运行结果:1716

新手可能有很多不足

原文地址:https://www.cnblogs.com/snowony/p/11779768.html

时间: 2024-11-05 17:24:51

函数(作用域,匿名函数,函数式编程,高阶函数)的相关文章

Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 而函数式编程(请注意多了一个"式"字)--Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算. 我们首先要搞明白计算机(Computer)和计算(Compute)的概念. 在计算机的层次上,CPU执行的是加减乘除的指令代码

函数式编程—高阶函数

一.函数式编程概念简介 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元 就是越低级的语言,越贴近计算机,抽象程度低,执行效率高,比如C语言:越高级的语言,越贴近计算,抽象程度高,执行效率低,比如Lisp语言 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种

Python 函数式编程--高阶函数Map、Reduce、Filter、Sorted

1.1   高阶函数 变量可指向函数 >>> abs(-10) 10 >>> x = abs    --x指向abs函数 >>> x(-1)      --直接调用x 1 调用abs和调用x完全相同. 函数名也是变量 >>> abs = 10 >>> abs(-10) Traceback (most recent call last): File "<stdin>", line 1,

函数式编程--高阶函数--sorted

定义 sorted函数可以list进行排序 #sorted可以对list进行排序 L=[3,7,-11,10,6] print(sorted(L)) sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序.例如按绝对值大小排序: #接受一个abs,按照绝对值排序 print(sorted(L,key=abs)) 以上两个输出结果为: [-11, 3, 6, 7, 10] [3, 6,

python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 函数式编程:是使用一系列函数去解决问题,函数式编程就是根据编程的范式来的出想要的结果,只要是输入时确定的,输出就是确定的. 1.2高阶函数 能把函数作为参数传入,这样的函数就称为高阶函数. 1.2.1函数即变量 以python的内置函数print()为列,调用该函数一下代码 >>> pri

高阶函数、内置函数

高阶函数:就是把函数当成参数传递的一种函数 python函数式编程 高阶函数:就是把函数当成参数传递的一种函数 1.函数名可以进行赋值: 2.函数名可以作为函数参数,还可以作为函数的返回值: a.函数是第一类对象 b.函数可以被赋值 c.可以被当做参数 d.可以当做返回值 e.可以作为容器类型的元素 def f(n): return n*n def foo(a,b,func): ret = func(a) + func(b) return ret foo(1,2,f) print(foo(1,2

(三)3-4 Python的高阶函数和匿名函数

高阶函数:把函数当成参数传递的一种函数,例如 def add(x,y,f): return f(x) + f(y) print(add(-8,11,abs)) 运行结果: 19 注:1. 调用add函数,分别执行abs(-8)和abc(11),并分别计算他们的值2.最后做运算 map()函数 map()函数是python内置的一个高级函数,它接受一个函数f和一个list,并把list的元素以此传递给函数f,然后返回一个函数f处理完所有list元素的列表.例如 def f2(x): return

Python 学习笔记 -- 内嵌函数、闭包、匿名函数、高阶函数map、高阶函数filter、高阶函数reduce

1 #------------------------------内嵌函数------------------------------ 2 #内嵌函数就是在函数内部定义函数 3 #实例一 4 print("#------------------------------内嵌函数------------------------------") 5 def funOutOne(): 6 x = 5 7 def funIn(): 8 x = 3 9 print("My funOutO

javascript设计模式与开发实践阅读笔记(2)—— this,闭包与高阶函数

this this总是指向一个对象,有四种情况1. 作为对象的方法调用.2. 作为普通函数调用.3. 构造器调用.4. Function.prototype.call 或Function.prototype.apply 调用. 1. 作为对象的方法调用 当函数作为对象的方法被调用时,this 指向该对象: var obj = { a: 1, getA: function(){ alert ( this === obj ); // 输出:true alert ( this.a ); // 输出:

python中的高阶函数

高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码: >>> abs(-10) 10 但是,如果只写abs呢? >>> abs <built-in function abs> 可见,abs(-10)是函数调用,而abs是函数本身. 要获得函数调用结果,我们可以把结果赋值给变量: >>> x