Python函数式编程之返回函数实例详解

目录
  • 看代码:
  • 用filter函数来计算素数
  • 用Python高阶函数来实现这个算法:
  • 高阶函数实现打印小于100的素数:
  • 总结

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。

看代码:

# -*- coding: utf-8 -*-
# @File  : 返回函数的高阶函数.py
# @author: Flyme awei
# @email : Flymeawei@163.com
# @Time  : 2022/8/21 14:48

def sum_fun(*args):

    def add_fun():
        s = 0
        for i in args:
            s += i
        return s
    return add_fun

f = sum_fun(1, 2, 3, 4, 5, 6, 7, 8, 9)
add = f()
print(add)  # 45

当我们调用 sum_fun 时,返回的并不是求和结果,而是求和函数 add_fun , 将其赋值给f,当我们在调f函数时才返回求和结果s

用filter函数来计算素数

  用filter来计算素数其中一个方法是埃氏筛法。
  给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去…

用Python高阶函数来实现这个算法:

1、我们先写一个生成器构造一个从3开始的无限奇数序列,首先排除偶数。

def odd_num():  # 奇数生成器函数
    n = 1
    while True:
        n += 2
        yield n

2、写一个筛选的函数,这里使用了匿名函数,返回判断是否为可整除数

def un_divisible(n):  # 判断是否为可整除数
    return lambda x: x % n > 0

3、使用filter来过滤,不断返回素数的生成迭代

def primes():  # 素数生成器函数
    yield 2
    it = odd_num()
    while True:
        n = next(it)
        yield n
        it = filter(un_divisible(n), it)  # 过滤出不可以整除的数

4、判断素数方法就产生了,这里需要手动结束一下

for i in primes():  # 打印小于100的素数
    if i < 100:
        print(i)
    else:
        break

高阶函数实现打印小于100的素数:

# -*- coding: utf-8 -*-
# @File  : 返回函数计算质数.py
# @author: Flyme awei
# @email : Flymeawei@163.com
# @Time  : 2022/8/21 15:17

# 得到所有的质数,打印小于100的所有的质数
# 最小的质数是2, 质数:只能被1和它本身整除的数
# 思路:先得到所有大于1的奇数, --> 生成器,在把生成器中的所有元素过滤去掉: 那些可以被小于元素本身的质数整除的数

# 1.得到所有的大于1奇数的生
def odd_num():
    n = 1
    while True:
        n += 2
        yield n

def un_divisible(n):  # 判断是否能够整除的函数,n代表从生成器中拿到的一个大于1的质数
    return lambda x: x % n > 0  # x是某一个奇数,n:小于当前x的一个质数

# 2.创建一个质数的生成器,最小的质数是2
def primes():
    yield 2
    n = odd_num()  # g为大于1的奇数生成器
    while True:
        x = next(n)
        g = filter(un_divisible(n), n)
        yield x

for i in primes():
    if i < 100:
        print(i, end=' ')
    else:
        break

第一段代码生成了以3开始的奇数序列
第二段代码自定义过滤函数,包含匿名函数,判断值的取余是否能被整除
第三段代码用来返回素数,这里先返回一个2为素数,因为偶数都被排除了所

这就是100以内的所有素数:

总结

到此这篇关于Python函数式编程之返回函数的文章就介绍到这了,更多相关Python返回函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 深入解析python返回函数和匿名函数

    目录 一.返回函数 1.闭包 2.nonlocal 二.匿名函数——lambda 此文章继续上篇高阶函数,地址:python函数式编程以及高阶函数 一.返回函数 高阶函数的特性,除了可以接受函数作为参数之外,高阶函数还可以返回函数下面来看几个案例: 1.定义一个求和的函数,可以这样写 # -*- coding: utf-8 -*- def test_1(*args): i = 0 for n in args: i = i + n return i print(test_1(10,20,30))

  • Python闭包之返回函数的函数用法示例

    闭包(closure)不是什么可怕的东西.如果用对了地方,它们其实可以很强大.闭包就是由其他函数动态生成并返回的函数,通俗地讲,在一个函数的内部,还有一个"内层"的函数,这个"内层"的函数是被返回的,它可以访问其创建者的局部命名空间中的变量. 下面是一个非常简单的例子: # 定义一个函数 def make_closure(a): # 在函数内部再定义一个函数,其实这个里面的函数就被认为是闭包 def closure(): # 这里打印一下传递进来的数字是什么 pri

  • Python函数式编程之返回函数实例详解

    目录 看代码: 用filter函数来计算素数 用Python高阶函数来实现这个算法: 高阶函数实现打印小于100的素数: 总结 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 看代码: # -*- coding: utf-8 -*- # @File : 返回函数的高阶函数.py # @author: Flyme awei # @email : Flymeawei@163.com # @Time : 2022/8/21 14:48 def sum_fun(*args): def

  • Python入门之三角函数sin()函数实例详解

    描述 sin()返回的x弧度的正弦值. 语法 以下是sin()方法的语法: importmath math.sin(x) 注意:sin()是不能直接访问的,需要导入math模块,然后通过math静态对象调用该方法. 参数 x--一个数值. 返回值 返回的x弧度的正弦值,数值在-1到1之间. 实例 以下展示了使用sin()方法的实例: #!/usr/bin/python import math print "sin(3) : ", math.sin(3) print "sin(

  • Python入门之三角函数tan()函数实例详解

    描述 tan() 返回x弧度的正弦值. 语法 以下是 tan() 方法的语法: import math math.tan(x) 注意:tan()是不能直接访问的,需要导入 math 模块,然后通过 math 静态对象调用该方法. 参数 x -- 一个数值. 返回值 返回x弧度的正弦值,数值在 -1 到 1 之间. 实例 以下展示了使用 tan() 方法的实例: #!/usr/bin/python import math print "tan(3) : ", math.tan(3) pr

  • python中强大的format函数实例详解

    python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下面的示例,基本上总结了format函数在python的中所有用法 #通过位置 print '{0},{1}'.format('chuhao',20) print '{},{}'.format('chuhao',20) print '{1},{0},{1}'.format('chuhao',20) #

  • python中np.random.permutation函数实例详解

    目录 一:函数介绍 二:实例 2.1 直接处理数组或列表数 2.2 间接处理:不改变原数据(对数组下标的处理) 2.3 实例:鸢尾花数据中对鸢尾花的随机打乱(可以直接用) 总结 一:函数介绍 np.random.permutation() 总体来说他是一个随机排列函数,就是将输入的数据进行随机排列,官方文档指出,此函数只能针对一维数据随机排列,对于多维数据只能对第一维度的数据进行随机排列. 简而言之:np.random.permutation函数的作用就是按照给定列表生成一个打乱后的随机列表 在

  • 详解Python函数式编程—高阶函数

    函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用.而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的. 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! Python对函数式编程提供部分支持.由于Python允许使用变量,因此,Python不是纯函数式编程语言. 高阶函数 变量

  • Python中常用的高阶函数实例详解

    前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. lambda 当在使用一些函数的时候,我们不需要显式定义函数名称,直接传入lambda匿名函数即可.lambda匿名函数通常和其他函数搭配使用. 比如可以直接使用如下的lambda表达式计算当x=3时,y = x * 3 + 5的函数值. In [1]: (lambda x: x * 3 + 5)(3) Out[1]: 14 map map函数将一个函数和序列/迭代器(可以传

  • Python数据分析之NumPy常用函数使用详解

    目录 文件读入 1.保存或创建新文件 2.读取csv文件的函数loadtxt 3.常见的函数 4.股票的收益率等 5.对数收益与波动率 6.日期分析 总结 本篇我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数.学习读写文件的方法,并尝试函数式编程和NumPy线性代数运算,来学习NumPy的常用函数. 文件读入 读写文件是数据分析的一项基本技能 CSV(Comma-Separated Value,逗号分隔值)格式是一种常见的文件格式.通常,数据库的

  • Python使用struct处理二进制的实例详解

    Python使用struct处理二进制的实例详解 有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...)     按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string)   

  • Linux C字符串替换函数实例详解

    Linux C字符串替换函数实例详解 最近学习linux 的基础编程知识,字符串替换函数,在网上找下资料,觉得这篇文章写的不错,记录下来,和大家分享一下: 实例代码: #include <stdio.h> #include <string.h> #include <stdlib.h> /** * * @author: cnscn@163.com * @reference: lovesnow1314@http://community.csdn.net/Expert/Top

随机推荐