函数式编程

高阶函数

1.变量可指向函数

  1. func = abs
  2. print(func(-1)) #1

2.函数可以作为参数传入另外的函数这也就是高阶函数

  1. def add(x,y,func):
  2. print(func(x) + func(y))
  3. arr1,arr2 = (1,2),(2,3)
  4. add(arr1,arr2,list) #[1,2,2,3]
map() 与 reduce()

1.map() 函数接收两个参数,一个函数,一个 Iterable ,map() 函数会将函数作用于 Iterable 并把结果作为新的 Iterable 返回

  1. def func(x):
  2. return x * x
  3. ita = [1,2,3,4,5,6]
  4. print(list(map(func,ita)))

2.reduce() 函数接收两个参数,一个至少有两个参数的函数,一个序列。reduce() 函数会把结果和序列的下一个元素做积累计算。reduce() 函数需要从 functools 模块进行引用

  1. from functools import reduce
  2. def f(x,y):
  3. return 10 * x + y
  4. def char2num(s):
  5. return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
  6. r = reduce(f,map(char2num,'13547'))
  7. print(r)
filter()
  1. filter() 函数接收两个参数,一个函数,一个序列。filter() 把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

    def is_odd(x):

    return x and x.strip()

    print(list(filter(is_odd,['0','',none,'A'])))

sorted()
  1. sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。它接收两个参数,一个序列,一个可选参数 key 函数作为排序参数依据

    L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

    def by_score(L):

    return sorted(L,key=lambda L: L[1])

    print(by_score(L))

返回函数

  1. 函数可以作为函数返回值

    from functools import reduce

    def sun_in(L):

    def a(x,y):

    return x + y

    def sum():

    print(reduce(a,L))

    return sum

    func = sun_in(list(range(0,11)))

    func()

  2. 闭包问题

    再创建一个函数,用该函数的参数绑定循环变量当前的值,可以解决闭包问题

    def count():

    fs = []

    def f(j):

    def g():

    return j**2

    return g

    1. for i in range(0,3):
    2. fs.append(f(i))
    3. return fs

    f1,f2,f3 = count()

    print(f1(),f2(),f3())

匿名函数

匿名函数 lambda x:x * x

  1. print(list(map(lambda f : f**3 , [1,2,3])))

装饰器

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

  1. import functools
  2. def log(text):
  3. def decorator(func):
  4. @functools.wraps(func)
  5. def wraaper(*args,**kw):
  6. print('%s %s()' % (text,func.__name__))
  7. return func(*args,**kw)
  8. return wraaper
  9. return decorator
  10. @log('调用')
  11. def pr(text):
  12. print(text)
  13. pr(input('请输入随便什么东西:'))

偏函数

functools.partial可以帮助我们返回新的偏函数,即把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

  1. import functools
  2. def func(a,b,c=2):
  3. print(a ** c + b ** c)
  4. newfunc = functools.partial(func,c=1)
  5. func(2,2) #8
  6. newfunc(2,2) #4

Python 第五天的更多相关文章

  1. Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  2. Python(五)编程小实例

    Python(五)编程小实例 抓取网页信息,并生成txt文件内容! Python抓取网页技能--Python抓取网页就是我们常看见的网络爬虫,我们今天所要用到的就是我们Python中自带的模块,用这些 ...

  3. 初学Python(五)——元组

    初学Python(五)——元组 初学Python,主要整理一些学习到的知识点,这次是元组. #-*- coding:utf-8 -*- #定义元素 t = (1,2,3) #添加元素 #删除元素 #更 ...

  4. Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块

    Python第五天   文件访问    for循环访问文件    while循环访问文件   字符串的startswith函数和split函数  linecache模块 目录 Pycharm使用技巧( ...

  5. 简学Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  6. 孤荷凌寒自学python第五十九天尝试使用python来读访问远端MongoDb数据服务

    孤荷凌寒自学python第五十九天尝试使用python来读访问远端MongoDb数据服务 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第五天.今天的感觉是,mongoDB数 ...

  7. 孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库

    孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第四天.今天的感觉是,mongoDB数据 ...

  8. 孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库

    孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第三天.感觉这个东西学习起来还是那么困 ...

  9. 孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

    孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第二 ...

  10. 孤荷凌寒自学python第五十五天初识MongoDb数据库

    孤荷凌寒自学python第五十五天第一天初识MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 大家好,2019年新年快乐! 本来我想的是借新年第一天开始,正式尝试学习爬虫,结果今天偶然发现 ...

随机推荐

  1. javascript 实现 对XML文件 2级/3级联动操作

    js代码 //实现对xml文档的读取:function loadXMLDoc(dname) { try // Internet Explorer { xmlDoc = new ActiveXObjec ...

  2. hibernate总结-持续更新

    简介 hibernate官网:Hibernate Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思 ...

  3. str-字符串功能介绍

    叨逼叨:字符串的各个功能修改不是本身,本身不变,会产生新的值,需要赋值给新的变量来接收 以下 "举例" 是解释每个功能的实例   "举例"下一行是pycharm ...

  4. 使用mysqldump备份数据库

    #! /bin/shday_str=`date +%j`day=`date +%Y%m%d`days_str=`echo "$day_str % 60"|bc`cd /home/d ...

  5. 数控G代码编程详解大全

    一.G代码功能简述 G00------快速定位 G01------直线插补 G02------顺时针方向圆弧插补 G03------逆时针方向圆弧插补 G04------定时暂停 G05------通 ...

  6. java基础04 匿名内部类

    内部类 (1)把类定义在另一个类的内部,该类就被称为内部类. 举例:把类B定义在类A中,类B就被称为内部类. (2)内部类的访问规则 A:可以直接访问外部类的成员,包括私有 B:外部类要想访问内部类成 ...

  7. js中的数组排序

    js数组冒泡排序,快速排序的原理以及实现   冒泡排序: 随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位 ...

  8. Android 自定义 permission

    Android 自定义 permission Android 添加自定义权限 permission-tree 权限的根节点,3个成员都要定义 name 一般来说需要2个".":比如 ...

  9. 大三仍是Linux系统小白的我给大家讲讲学习历程

    我与Linux结缘是在大三的时候.我与Linux熟识是在偶然遇到<Linux就该这么学>的时候.因为我是电子信息工程专业,在高年级时开设了嵌入式课程,嵌入式系统是一种专用的计算机系统,作为 ...

  10. 【高斯消元】兼 【期望dp】例题

    [总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $           ...