python函数式编程

python基础

浏览数:428

2019-8-15

高阶函数:就是把函数当成参数传递的一种函数

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,f))
#传入参数a=1,b=2,func=f;
#ret = f(1) + f(2);
#f(1)=1,f(2)=4此时调用f函数;
#ret=5;

map函数:

描述

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

语法

map() 函数语法:

map(function, iterable, ...)

参数

  • function — 函数
  • iterable — 一个或多个序列

返回值

Python 2.x 返回列表。

Python 3.x 返回迭代器。

实例

>>>def square(x) :            # 计算平方数
...     return x ** 2
... 
>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
 
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]


msg = [1,12,33,42,15,16]
#需求自增1
def add_one(x):
    return x+1
#需求自减1
def reduce(x):
    return x-1
#需求平方
def pf(x):
    return x**2
#实现逻辑
def fangfa(func,red):
    ret = []
    for i in red:
        res = func(i)
        ret.append(res)
    return ret
print(fangfa(add_one,msg))
print(fangfa(reduce,msg))
print(fangfa(pf,msg))

print(fangfa(lambda x:x+1,msg)) #用lambda函数替换add_one函数
print(fangfa(lambda x:x-1,msg)) #用lambda函数替换requce函数
print(fangfa(lambda x:x**2,msg))#用lambda函数替换pf函数

print(list(map(lambda x:x+1,msg))) #map处理的结果是一个可迭代对象,python3中需用list转换;
print(list(map(lambda x:x-1,msg))) #map的第一个参数是逻辑,第二个参数是可迭代对象;
print(list(map(lambda x:x**2,msg)))

 filter函数:

描述

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

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

语法

以下是 filter() 方法的语法:

filter(function, iterable)

参数

  • function — 判断函数。
  • iterable — 可迭代对象。

返回值

返回列表

实例

以下展示了使用 filter 函数的实例:

def is_odd(n):
    return n % 2 == 1
 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)

[1, 3, 5, 7, 9]


lise_l = ["sb_asd","sb_we","sb_ig","rng"]
#需求去掉开头是sb的
def sh_show(n):
    return n.startswith("sb")
#实现逻辑
def filter_test(func,array):
    red = []
    for i in array:
        if not sh_show(i):
            red.append(i)
    return red
print(filter_test(sh_show,lise_l))

print(filter_test(lambda n:n.startswith("sb"),lise_l))#lambda

print(list(filter(lambda n:not n.startswith("sb"),lise_l)))#filter

 reduce函数

描述

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 fucntools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:

from functools import reduce
from functools import reduce

def add(x,y):
    return x + y

print (reduce(add, range(1, 101)))
 

语法

reduce() 函数语法:

reduce(function, iterable[, initializer])
 

参数

  • function — 函数,有两个参数
  • iterable — 可迭代对象
  • initializer — 可选,初始参数

返回值

返回函数计算结果。

实例

以下实例展示了 reduce() 的使用方法:

>>>def add(x, y) :            # 两数相加
...     return x + y
... 
>>> reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
15

 python的内置函数

    内置函数    
abs() divmod() input() open() staticmethod()
all() enumerate() int() ord() str()
any() eval() isinstance() pow() sum()
basestring() execfile() issubclass() print() super()
bin() file() iter() property() tuple()
bool() filter() len() range() type()
bytearray() float() list() raw_input() unichr()
callable() format() locals() reduce() unicode()
chr() frozenset() long() reload() vars()
classmethod() getattr() map() repr() xrange()
cmp() globals() max() reverse() zip()
compile() hasattr() memoryview() round() __import__()
complex() hash() min() set()  
delattr() help() next() setattr()  
dict() hex() object() slice()  
dir() id() oct() sorted() exec 内置表达式

 

 


print(abs(-1))#取绝对值
print(all([1,2,3]))#用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。元素除了是 0、空、FALSE 外都算 TRUE。
print(any([1,2,3]))#用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。元素除了是 0、空、FALSE 外都算 TRUE。
print(bin(10))#返回一个整数 int 或者长整数 long int 的二进制表示。
print(hex(10))#用于将10进制整数转换成16进制,以字符串形式表示。
print(oct(10))#函数将一个整数转换成8进制字符串。
print(chr(97))#返回值是当前整数对应的ascii字符。
print(bool(0))#用于将给定参数转换为布尔类型,如果没有参数,返回 False。
print(dict(a="1"))#用于创建一个字典
print(dir(list))#函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
print(divmod(10,3))#函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
print(list(enumerate(["lw","xa","ww"])))#用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
print(eval("2+2"))#用来执行一个字符串表达式,并返回表达式的值。
def is_odd(n):
    return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])#用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
print(list(newlist))
print(float(1))#用于将整数和字符串转换成浮点数。
#"{1} {0} {1}".format("hello", "world")  # 设置指定位置,format 函数可以接受不限个参数,位置可以不按顺序。
print(globals())#以字典类型返回当前位置的全部全局变量。
print(hash("test"))#用于获取取一个对象(字符串或者数值等)的哈希值。
print(help(dict))#用于查看函数或模块用途的详细说明。
print(id(list))#用于获取对象的内存地址。
print(int("13",8))#用于将一个字符串或数字转换为整型。8代表进制数;
print(len("asdfghj"))#返回对象(字符、列表、元组等)长度或项目个数。
print(max(10,90,1000))#返回给定参数的最大值,参数可以为序列。
print(min(10,90,1000))#返回给定参数的最小值,参数可以为序列。
p = {"name":"alex","age":18,"hobby":"gilr"}
print(list(zip(p.keys(),p.values())))#拉链函数,两个参数均为序列,用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

内置函数用法

 

max和min高级用法:

用法

1、max进行比较时传入的数据类型必须是可迭代对象(基本原理就是一个for循环依次取出可迭代对象中的每一个元素进行比较);

2、比较时从第一个元素进行比较(按ascii码进行排序),如果第一个元素分出大小则后面就不进行比较了;

ll = ["10a","A20","A10"]
print(max(ll))
A20
msg = {"age1":18,"age2":20}
print(max(zip(msg.values(),msg.keys())))
(20, 'age2')
people = [
    {"name":"alex","age":70},
    {"name":"wpq","age":100},
    {"name":"lhf","age":30},
    {"name":"lw","age":50}
]
print(max(people,key=lambda dic:dic["age"])) #传入key参数

 

作者:村里唯一的架构师