Python-17-函数_06_函数式编程

一、函数式编程---定义:编程的方法论:1、函数式2、面向过程3、面向对象    函数式编程:函数式=编程语言定义的函数+数学意义的函数    简单说:函数式就是用编程语言去实现数学函数    函数式编程,主要在Hsahell、clean、erlang等这几门语言中利用。
def cal(x):
    return 2 * x + 1  # 函数式
a、不可变,不用变量保存状态,不修改变量
def cal(x):  # 非函数式
    res = 2 * x
    res += 1
    return res  # 面向过程
b、第一类对象:函数即"变量“      函数名可以当做参数传递      返回值可以是函数名

c、高阶函数:      函数接收的参数是一个函数 or 返回值中包含函数

d、map filter reducemap:处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样filter:遍历序列中的每个元素,判断每个元素,得到布尔值,如果是True则留下来reduce:处理一个序列,根据逻辑,然后把序列进行合并操作
# 找到age小于等于20的元素
people = [{"name": "name1", "age": 18}, {"name": "name2", "age": 50}, {"name": "name1", "age": 100}]
print(list(filter(lambda x: x["age"] <= 20, people)))
二、函数式编程---方法:1、----------------  map  ---------------------

# 一、通常版
num1 = [1,2,3,4,5,6]
def add_one(x):                     # 1、利用函数,定义一系列需求
    return x+1
def minus_one(x):
    return x-1
def square_one(x):
    return x**2

def map_test(func,array):           # 2、定义一个通用函数格式
    res = []
    for i in array:
        ress = func(i)
        res.append(ress)
    return res

print(map_test(add_one,num1))        # 3、调用函数
print(map_test(square_one,num1))

# 求某列表元素,+1、-1、平方
############  最终版  ############
def map_test(func,array):
    res = []
    for i in array:
        ress = func(i)
        res.append(ress)
    return res
map_test(lambda x:x+1,num1)
############  最终版  ############

###########  map方法  ###########
# dissect 1
print(map(lambda x:x+1,num1))       # 结果:<map object at 0x0000000002863748> 内存地址

# dissect 2
res = map(lambda x:x+1,num1)
# for i in res:
#     print(i)
print(list(res))

# result
# 1、如果需求的逻辑精简,可以直接用lambda;
# 2、如果需求的逻辑比较复杂,可以调用自定义函数。
# 3、map第二个位置(num1) 只要是可迭代对象,就可以。
print("map函数利用:",list(map(lambda x:x**2,num1)))         # 一行、省去上面【最终版】代码过程
print("map函数利用:",list(map(add_one,num1)))
str1 = "newmet.top"
print(list(map(lambda x:x.upper(),str1)))

###########  map方法  ###########

map

2、---------------  filter  -------------------

# 去除某列表中,以 ss 结尾的元素,即:保留除ss结尾以外的元素。
num1 = ["new_ss","met_ss","newmet"]

def add_one(x):
    return not x.endswith("ss")

############  最终版  ############
def filter_test(func,array):                # array - 可迭代对象,交给 func ,如果func == True,当前array元素保留下来
    res = []
    for i in array:
        if not func:
            res.append(i)
    return res
filter_test(lambda x:not x.endswith("ss"),num1)          # lambda x:not x.endswith("ss")是True,留下
############  最终版  ############

###########  filter方法  ###########
# dissect 1
print(filter(lambda x:not x.endswith("ss"),num1))       # 结果:<filter object at 0x0000000002866C88> 内存地址

# dissect 2
res = filter(lambda x:not x.endswith("ss"),num1)
# for i in res:
#     print(i)
print(list(res))

# result
# 1、如果需求的逻辑精简,可以直接用lambda;
# 2、如果需求的逻辑比较复杂,可以调用自定义函数。
# 3、filter第二个位置(num1) 只要是可迭代对象,就可以。
print("filter函数利用:",list(filter(lambda x:not x.endswith("ss"),num1)))         # 一行、省去上面【最终版】代码过程
print("filter函数利用:",list(filter(add_one,num1)))

###########  filter方法  ###########

filter

3、---------------  reduce  -------------------

# from functools import reduce        # 从functools模块中导入reduce模块

# 1、求列表元素的和
num1 = [1,2,3,4,5,6]
res = 0
for i in num1:
    res += i
print(res)

# 2、求列表元素的积
def multi(x,y):
    return x*y
# lambda x,y:x*y

############  最终版  ############
def reduce_test(func,array,init=None):          # init=None 用户定义一个初始值,可以写、可不写
    if init is None:
        res = array.pop(0)
    else:
        res = init
    for i in array:
        res = func(res,i)
    return res
print(reduce_test(lambda x,y:x*y,num1,10))
############  最终版  ############

###########  reduce方法  ###########

from functools import reduce                # 从functools模块中导入reduce模块
num2 = [1,2,3,4,5,6]
print(reduce(lambda x,y:x*y,num2,10))

###########  reduce方法  ###########

reduce

三、函数式编程---内置函数:

print(abs(-1))                    # abs 绝对值
print(all([1,2,"1"]))            # all 列表中所以元素都为True,输出True,否则False  属于False( 空,0,None,(),[],{} )
print(any(["",0]))               # any 有一个是True,就是True
print(bin(3))                    # bin 10进制-转换成-2进制
print(hex(3))                    # hex 10进制-转换成-16六进制
print(oct(3))                    # oct 10进制-转换成-8进制
print(bool(2))                   # bool 判断是否为True or False
print(bytes("哈喽",encoding="utf-8"))                         # bytes 编码 转换成二进制(python默认用utf-8编码)
print(bytes("哈喽",encoding="utf-8").decode("utf-8"))        # bytes 解码 (用什么编码,就用什么解码,ascii不能编码中文)
print(chr(97))                  # chr ASCII码 数字对应得字符
print(ord("a"))                 # ord ASCII码 字符对应得数字
print(dir(all))                 # dir 打印某一个对象下都有哪些方法
print(divmod(10,3))             # divmod 结果:(3, 1)   (商,余) 可以用来分页:分成4页
print(divmod(10,2))             # divmod 结果:(5, 0)   (商,余) 可以用来分页:分成5页

dic = {"name":"newmet"}
v = str(dic)
print(eval(v))                  # eval 把字符串中的数据结构提取出来
express = "1+2*3-(4/2-1)*2"
print(eval(express))            # eval 把字符串中的表达式运算

# 可hash的数据类型,是不可变数据类型;不可hash的数据类型,是可变数据类型;
# 用处:网上下载一个软件,该软件对应一个hash值,下载后,又获取一个值,如果2个值相同,证明该软件没有被更改(中毒),安全
print(hash("sdfsf"))

print(help(all))                # help 获取某一个方法具体的使用方法。

print(isinstance(2,int))              # isinstance  判断2 是否是int类型
print(isinstance("sfds",str))        # isinstance  判断"sfds" 是否是str类型

v = "newmet.top111"
print(globals())                # globals 打印全局变量
print(locals())                 # globals 打印局部变量

print(list(zip((‘a‘,‘b‘,‘c‘),(1,2,3))))             # 结果:[(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)]
print(list(zip((‘a‘,‘b‘,‘c‘),(1,2,3,4))))           # 结果:[(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)]
print(list(zip((‘a‘,‘b‘,‘c‘,‘d‘),(1,2,3))))        # 结果:[(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)]

dic = {"name":"newmet","age":18,"gender":"sss"}
print(list(zip(dic.keys(),dic.values())))               # 拉链,一一对应,两个序列多出来的元素,不考虑。

# 最大值 - max、最小值 - min
# 一、max函数处理的是可迭代对象,相当于一个for循环取出每个元素进行比较,注意,不同类型之间不能比较;
# 二、每个元素间进行比较,是从每个元素的第一个位置依次比较,如果这一个位置分出大小,后面的都不需要
#     比较了,直接得出这两个元素的大小。

# 1、最简单
l = [1,2,4,7,9,3]
print(max(l))
print(min(l))

# 2、字典,比较keys 或者 values
d = {"age1":15,"age2":18,"age3":88,"age4":50}
print(max(d.values()))  # 比较字典中的values值,但是不知道是与哪个keys对应
print(max(d))           # 默认比较字典中的keys值 但是不知道是与哪个values对应

# 3、结合zip使用
for i in zip(d.values(),d.keys()):
    print(i)

print(max(zip(d.values(),d.keys())))      # 取得当前字典中,数值最大的元素,并输出起keys、values值

# 4、【终极】--利用max 里的key
# def max(*args, key=None):
age = [{"name":"new1","age":15,},{"name":"new2","age":18,},{"name":"new3","age":88,},{"name":"new4","age":50}]
print(max(age,key=lambda age:age["age"]))

print(pow(2,3))                 # pow 相等于:2**3   几次方
print(pow(2,3,3))                 # pow 相等于:2**3%2  几次方,求余

# 序列--反转 -- reversed
l1 = [1,2,4,7,9,3]
print(list(reversed(l1)))

# 四舍五入 -- round
print(round(3.5))

# 切片 -- slice
l = "hello"
# print(l[3,5])
s1 = slice(3,5)
s2 = slice(1,4,2)
print(l[s1])
print(l[s2])
print(s2.start)         # 结果:1
print(s2.stop)          # 结果:4
print(s2.step)          # 结果:2

# 按年纪排序 -- sorted
age = [{"name":"new1","age":15,},{"name":"new2","age":18,},{"name":"new3","age":88,},{"name":"new4","age":50}]
print(sorted(age,key=lambda dic:dic["age"]))

# 求和 -- sum
l = [1,2,3,4]
print(sum(l))
print(sum(range(101)))

# 判断数据类型 -- type
msg = "232"
if type(msg) is str:
    msg = int(msg)
    res = msg + 1
    print(res)

# 将对象以字典的形式输出 -- vars
def test():
    msg = "sffewfefwefw"
    print(locals())             # 结果:{‘msg‘: ‘sffewfefwefw‘}
    print(vars())               # 结果:{‘msg‘: ‘sffewfefwefw‘}
test()
print(vars(int))            # 以字典的形式,输出int对象下的所有方法

######  一个py文件 就是一个模块  ######

import test                  # 不能导入字符串类型
# import ‘test‘              # 报错
m = __import__(‘test‘)      # 能导入字符串类型

######  一个py文件 就是一个模块  ######

内置函数

原文地址:https://www.cnblogs.com/newmet/p/10037102.html

时间: 2024-07-30 08:38:23

Python-17-函数_06_函数式编程的相关文章

Python基础函数之函数式编程

一. 匿名函数 匿名函数就是不需要显示的指定函数,只要运行过一次后就立马释放内存空间. 主要表现形式为: lambda 形参:具体功能 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n:n**n print(calc(10)) 你也许会说,用上这个东西没感觉有毛方便呀, ....呵呵,如果是这么用,确实没毛线改进,不过匿名函数主要是和其它函数搭配使用的呢,如下 res = map(lambda x:x**2,[1,5

Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res) 输出结果 test <function test1 at 0x021F5C90> 分析:这里print(res)输出的是te

Python函数以及函数式编程

本文和大家分享的主要是python 函数及函数式编程相关内容,一起来看看吧,希望对大家 学习python有所帮助. 函数基本语法及特性 定义 数学函数定义: 一般的,在一个变化过程中,如果有两个变量 x 和 y ,并且对于 x 的每一 个确定的值, y都有唯一确定的值与其对应,那么我们就把 x 称为自变量,把 y 称为因变 量, y 是 x 的函数.自变量 x 的取值范围叫做这个函数的定义域. 但编程中的「函数」概念,与数学中的函数是有很  同的  函数是逻辑结构化和过程化的一种编程方法 函数的

python基础13函数以及函数式编程

主要内容 函数基本语法及特性 参数与局部变 返回值 4.递归 名函数 6.函数式编程介绍 阶函数 8.内置函数 函数基本语法及特性 定义 数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一 个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变 量,y是x的函数.自变量x的取值范围叫做这个函数的定义域. 但编程中的「函数」概念,与数学中的函数是有很 同的 函数是逻辑结构化和过程化的一种编程方法 函数的优点 减少重复代码 使程序变的可扩展 使程序

python 函数和函数式编程

什么是函数 调用函数 创建函数 传入函数 形参 变长参数 函数式编程 变量的作用域 递归 生成器 1 什么是函数 函数是对程序逻辑进行结构化或过程化的一种编程方法.能将整块代码巧妙地隔离成易于管理 的小块,把重复代码放到函数中而不是进行大量的拷贝--这样既能节省空间,也有助于保持一致性,因为你只需改变单个的拷贝而无须去寻找再修改大量复制代码的拷贝. 1.1 过程 vs 函数 在C++里我不记得有过程这种东西,但是在一些其它的语言比如PL/SQL里面会有过程.过程和函数一样是可以调用的代码块,但是

Python核心编程读笔 9:函数和函数式编程

第11章 函数和函数式编程 一 调用函数 1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 foo(): foo(42)  foo('bar')  foo(y) 关键字调用 foo(): foo(x=42)  foo(x='bar')  foo(x=y) 即明确给出相应的参数名 2 参数组 Python允许程序员执行一个没有显式定义参数的函数,相应的方法是通过一个把元组(非关键字参数)或字典

PYTHON修饰器的函数式编程

转自:http://coolshell.cn/articles/11265.html Python修饰器的函数式编程 Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都很相似--都是想要对一个已有的模块做一些"修饰工作",所谓修饰工作就是想给现有的模块加上一些小装饰(一些小功能,这些小功能可能好多模块都会用到),但又不让这个小装饰(小功能

函数与函数式编程

函数与函数式编程 介绍 在过去的十年间,大家广为熟知的编程方法无非两种:面向对象和面向过程,其实,无论哪种,都是一种编程的规范或者是如何编程的方法论.而如今,一种更为古老的编程方式:函数式编程,以其不保存状态,不修改变量等特性重新进入人们的视野.下面我们就来依次了解这一传统的编程理念,让我们从基本的函数概念开始. 函数定义: 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的

python学习笔记(四) - 函数式编程

一. 高阶函数 高阶函数:把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式 def add(x, y, f): return f(x) + f(y) print add(-5, 6, abs) # 11 二.返回函数 aaa 三.匿名函数 aaa 四.装饰器 aaa 五.偏函数 aaa

11 函数和函数式编程 - 《Python 核心编程》

?? 什么是函数 ?? 调用函数 ?? 创建函数 ?? 传入函数 ?? 形参 ?? 变长参数 ?? 函数式编程 ?? 变量的作用域 ?? 递归 ?? 生成器 11.1 什么是函数? 函数是对程序逻辑进行结构化或过程化的一种编程方法. 函数可以以不同的形式出现. declaration/definition          def foo(): print 'bar' function object/reference    foo function call/invocation