Python核心编程---读书笔记:第11章 函数和函数式编程

 

第11章函数和函数式编程

11.1 什么是函数?

函数:逻辑结构化的编程方法

如果没有返回元素,python返回None

元组关键字: *tuple_args

字典关键字: **dict_args

 

 

python不允许函数未声明前对其引用或调用

 

函数属性:

内嵌函数:函数体内创建另一个函数是合法的。

 

11.3.6函数装饰器

装饰器:以@开头,包含名字和可选参数

@decorator(args)

def func2(funcArgs)

 

静态方法装饰器

class MyClass(object):

@staticmethod

def staticFunc():

 

 

class MyClass(object):
    def __init__(self , name):
        self.name= name

    @staticmethod
   
def show():
        print("static method")

if __name__ == "__main__":
    myClass = MyClass('dong')
    MyClass.show()

 

 

装饰器堆叠:

@deco2

@deco1

def func()

 

func = deco2(deco1(func))

 

 

有参数和无参数的装饰器

装饰器的本质:是函数,接受函数作为参数,返回另一个函数    

                   作用:日志,检测性能,加入事务

 

11.6.1非关键字可变长参数(元组)

可变长的参数元组必须在位置和默认参数之后,带元组或非关键字可变长参数)

def func_time(formal_args , *vargs_tuple):

添加可变参数列表变量,处理超出数目的参数

 

def tupleArgs(arg1 , arg2='2' , *otherArgs):
    print(arg1)
    print(arg2)
    print(*otherArgs)

 

 

11.6.2关键字变量参数

def func(formal_args , *tuple_args ,**dict_args )

 

 

11.7函数式编程

lambda关键字创造匿名函数,匿名是因为不需要以标准的方式声明

lambda本质是一个表达式,定义和声明在同一行

lambda[arg1 , arg2 , …,argn] : expression

参数可选,

lambda表达式中前面是参数,后面是表达式,返回可调用的函数

def true() : return True

a = lambda x , y = 2 : x + y

 

11.7内建函数apply(),filter(),map(),reduce()

apply(func , nkw , kw):用可选参数调用func, nkw:非关键字参数,

kw关键字参数

map(func , seq1 , seq2…):将函数func作用于给定序列(s)每个元素,并返回列表,相当于对列表中每个元素进行处理

reduce(func , seq [, init]):将二元函数作用于seq序列元素,每次携带一堆

先前结果和下一个序列元素,若init设定,第一个是init和第一个序列元素

 

# map(func , seq): map对序列中每个元素value调用func(seq),并返回处理后的序列
def mapTest():
    nums = [i for i in range(1,6)]
    results = map(lambda x : x + 2 , nums)
    for i in results:
        print(i)

 

map(lambda x , y : x + y , [1,3,5],[2,4,6])

 

reduce():进行折叠,等于每次从序列中取出两个元素进行运算,

有点类似于。典型的一个应用:求序列元素累加和

reduce(func , seq [, init]):

 

# reduce(func , seq ,init): 将序列中前一次运算结果和当前元素进行某种操作,直到最后只有一个元素
def reduceTest():
    nums = [i for i in range(1,11)]
    sum = reduce( (lambda x, y : x + y) , nums)
    print(sum)
    nums = [i for i in range(1,11)]
    sum = reduce( (lambda x, y : x + y) , nums , 45)
    print(sum)

 

 

11.8变量作用域

搜索标识符:先从局部作用域开始,,然后寻找全局域

全局变量名字会被局部变量覆盖掉

global

 

 

11.8.4闭包

闭包:将内部函数代码,作用域,外部函数的作用结合起来

 

 

11.8.5作用域和lambda

 

11.9递归

def fac(n):

  ifn == 0 or n == 1:

         return1

 else:

         returnn * fac(n-1)

 

11.10生成器

协同程序:运行独立函数调用,可以暂停或挂起

生成器含义:带有yield语句的函数,能暂停执行并返回中间结果

yield功能:返回一个值给调用者并暂停执行

适用:迭代大的数据集,可节省内存,自动推算下一个结果

next():获得下个生成的值

将值送给生成器send(),yield语句是表达式

close()结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值