函数编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数编程相关的知识,希望对你有一定的参考价值。

globals() 和 locals()函数
globals()
返回当前全局作用域内的函数变量字典
locals()
返回当前局部作用域内的变量的字典
eval函数
作用:
把一个字符串当成一个表达式来执行,返回表达式执行的结果
格式:
eval(source, globals=None,locals=None)
x = 100
y = 200
s = "x + y"
eval(s)
300
把字符串翻译成一个表达式然后解释执行
exec函数
作用:
把一个字符串当成程序来执行
格式:
esec(source, globals=None,locals=None)
lambda表达式
(又称匿名函数)
作用:
创建一个匿名函数对象
同def类似,但不提供函数名
语法:
lambda [形参名1,形参民2,...]: 表达式
注:[ ]内的内容可省略
lambda语法说明:
1.lambda只是一个表达式,它用来创建一个函数对象
2.当lambda表达式执行时,返回的是冒号后(:),表达式的值
3.lambda表达式创建的九只能包含一条语句
4.lambda比函数简单且可以随时创建和销毁,有利于减少程序的偶合度

函数式编程:
是指用一系列函数解决问题
python语言 函数是一等公民
函数本身可以赋值给面量,赋值后变量绑定函数
允许将函数本身作为参数传入另一个函数
允许函数返回一个函数

好处:
每一个函数完成细小的功能,一系列函数的任意组合可以解决大问题函数仅接收输入并且产生输出,不包含任何可以影响输出的内部状态
要求:
def 创建的函数最好不要访问局部作用域以为的变量,这样可以保证返回结果的唯一性(函数的可重入性)
可重入性

可重入性:
输入一定,结果必然一定的函数
*例:
def myadd (x, y): #这是可重入函数
return x + y
s = 0
def myadd2(x, y):
"""这是不可重入函数,因为它会改变局部以外的变量"""
global s
s += x + y
return s

高阶函数high order function
什么是高阶函数:
满足下面两个条件之一的就为高阶函数
1.函数接受一个或多个作为参数传入
2.函数返回一个函数

    Python内置(builtins)的高阶函数:
            map   filter    sorted

map函数
map(func,interables)用函数对可迭代对象中每一个元素作为参数计算出新的可迭代对象,当最短的一个迭代器完成迭代后此迭代器生成结束
(func,interables)
func-是个函数
*interables- 是个可迭代对象

def power2(x):
                        return   x ** 2
                    mit  = map (power2,  range(1, 10))
                    [ x for  x in mit ]

*map生成一个可迭代对象,此可迭代对象可以生成:

                    1**4   2**3  3**2  4**1   这样的数
                    pow  (x,  y,  z = None)

    [  x for  x   in   map  (pow, range(1, 5)  range(4,  0, -1)

            3.    [x  for x in map  (pow, range(1, 5),
                                [4, 3, 2, 1],  range(5, 10))]

练习:
1.求12 + 22 + 32 + ...... 92的和

for  x in range(1,10)
            s   +=  x  **  2
            print(s)
二:
def     p2(x):
            return  x ** 2
        print(sum(map(p2, range(1, 10))))

三:print(sum(lambda x: x ** 2, range(1, 10)))

*2.求12 + 22 + 32 + ...... 99的和

print(sum(map(lambda x, y: x**y, range(1, 10), range(9, 0, -1)))

方法二:
print(sum(lambda x: x ** x, range(1, 10)))

3.求12 + 22 + 32 + ...... 91的和(11377)

以上是关于函数编程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

函数式编程

j结队编程代码分析

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

函数式编程/命令式编程