Python 3 学习——函数扩展and迭代器生成器装饰器

Python 学习的第九小节

 写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享

一、学习笔记

  1. 高阶函数

    函数名可以作为函数参数输入 、可以进行赋值、还可以作为返回值。

  2.作用域

    在Python中,只有模块、类以及函数才会引入新的作用域,其它的代码块(if  try  for)是不会引入新的作用域。

  3.递归函数

  关于阶层的递归函数:

def fact(n):if n ==1 :return 1return n * fact(n-1)print(fact(2))

  特点:1.调用自身函数  2.有一个结束条件  3.每进入更深一层递归时,问题规模相比上次要有所减少。

  但凡是递归可以写的程序,循环都可以解决。递归的效率在一定情况下非常低。

  4.内置函数

    重点:

      filter( 函数名字 , 序列 ) ---------------注意map 与 filter 的区别

        遍历序列的元素,每个元素进入函数里面,可以起到一个过滤器的作用。不会改变元素,最多就是过滤。

      map( 函数名字,序列 )

        遍历序列的元素,每个元素进入函数中,可以对元素进行一个处理。

      reduce( 函数名字,序列 )

        调用之前要加------------ from  functools  import  reduce 

        reduce 的结果就是一个值。

      lamda  ------------匿名函数 

        lamda  参数 : 代码块

        函数式编程用的多,可以用在reduce 这类配合进行使用。

  5.闭包

    定义:如果在一个内部函数中,对在外部作用域的变量(但不是在全局作用域中)进行引用,这就叫做闭包。

def outer():x = 10                          定义函数时的环境def inner():#条件一  inner就是内部函数         函数块print(x)#条件二  外部环境的一个变量         return inner()#结论  内部函数inner就是一个闭包

    关于闭包:闭包 = 函数快 + 定义函数时的环境 

  6.装饰器(重点!!!)

    遵守开放封闭原则:对修改封闭,对扩展开放。

    装饰器的作用就是为已经存在的对象添加额外的功能。

#author:"LFD"
#date: 2018/3/27
import timedef show_time(f):  #装饰器函数def inner():start = time.time()f()end = time.time()print('spend %s' % (end - start))return inner()@show_time
def foo():print('liufeiduo')time.sleep(2)
@show_time
def bar():print('chengjunfei')time.sleep(3)# foo=show_time(foo)
#
# bar = show_time(bar)

    功能函数加参数

import time
# 加法器 并且计算加法器运行的时间。
def show_time(f):  #装饰器函数def inner(*x,**y):start = time.time()f(*x,**y)end = time.time()print('spend %s' % (end - start))return inner@show_time
def add(*args):sums = 0for i in args:sums += iprint(sums)time.sleep(1)add(1,2,3,4,5)

    装饰器参数

#author:"LFD"
#date: 2018/3/27
import time# 装饰器加参数
def logger(flag=' '):def show_time(f):  #装饰器函数def inner(*x,**y):start = time.time()f(*x,**y)end = time.time()print('spend %s' % (end - start))if flag == ' ':    #当logger参数为空时,打印日志记录。不为空时则不打印。print('日志记录')return innerreturn show_time@logger(' ')  # @show_time  
def add(*args):sums = 0for i in args:sums += iprint(sums)time.sleep(1)add(1,2,3,4,5)    

   7.列表生成式

def f(n):return n**3a = [y for y in range(10)]
b = [f(x) for x in range(10)]  #列表生成器可以使用函数进行生成print(a)
print(b)

    8.生成器

 

    生成器就是一个可迭代对象( Iterable )

 

s = (x for x in range(3))
#
# print(s)
#
# print(next(s)) #等价于s._next_()  in Py2: s.next()
# print(next(s))
#
# print(next(s))for i in s:print(i)

   生成器一共有两种创建方式:

     ①就是上面那种小括号的形式

     ②yield 的方式 

      生成器本质上就是一个函数,但跟函数具有区别。

def foo():print('ok')yield 1  # 只要有yield的就是生成器对象
#    return 1print('ok2')yield 2foo()  # 生成器对象
g = foo()
next(g) # 调用生成器对象
next(g) for i in foo():  #会将yield也打印出来 也就是下面的1 和 2 。 print(i)
--------------
ok
ok2
ok
1
ok
2
--------------  

    注意:生成器在创建的时候就已经决定了能计算出来的个数,调用next 的次数超过这个值就会报StopIteration     

    什么是可迭代对象:

     内部具有 _Iter_ 方法的都是可迭代对象。列表、元组、字典、字符串都是可迭代对象。

     yield 有一个保持状态的作用。

  9.send 方法

    send 比 next 多一个功能,向函数体中传值,向yield 前面的变量传一个值。

send():f().send(None) #等价于next(f())

 

  10.迭代器

    生成器都是迭代器,迭代器不一定都是生成器。

    什么是迭代器:

      ①有 iter 方法  ②有 next 方法

l = [1,2,34,5]
d = iter(l)
print(d) #<list_iterator object at 0x000001D9FFF09438>print(next(d))# for 循环做了三件事:
#   1.调用可迭代对象的iter 方法返回一个迭代器对象。
#   2.通过一个while循环不断的调用迭代器的next 方法。
#   3.处理StopIteration异常。
for i in [1,2,34,5]:  一般都是通过for i in Iterable 进行取值iter([1,2,34,5])

 

二、心得

  Python中的函数有着更多的方法作用,感觉功能强大但需要去发掘,装饰器也是起到了丰富其功能,使其可以用更短的代码做更多的事,装饰器的作用需要继续去体会,要代码量的上升才可以对它的了解更加深入。掌握Python的内置函数,通过内置函数缩短自己的代码行数。生成器以及迭代器两者的关系还没有弄透,以及如何搭配使用,实现更加复杂的功能还要进行多次实验。

 

 

 

转载于:https://www.cnblogs.com/jinzejun/p/8632513.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鲜茄牛肉

鲜茄牛肉 【材料】 嫩牛肉150克、番茄1个、葱2根 调味料 &#xff08;1&#xff09;酒1大匙、酱油1大匙、糖半茶匙、芡汁半大匙、色拉油1大匙 &#xff08;2&#xff09;酱油1大匙、盐1/4茶匙、糖1茶匙、芡汁1大匙 【作法】 1.牛肉切薄片&#xff0c;拌入调味料&#xf…

AfxParseURL

AfxParseURL AfxParseURL(LPCTSTR pstrURL,DWORD& dwServiceType,CString& strServer,CString& strObject,INTERNET_PORT& nPort)。 目录 1 功能 2 定义 3 返回值 4 例子 5 关于 功能 编辑 该函数解析URL字符串并返回服务的类型及组件,包含在 afxinet…

TQ210 —— LCD

TQ210 —— LCD一、LCD控制器1、S5PV210 LCD控制器要使一块LCD正常的显示文字或图像&#xff0c;不仅需要LCD驱动器&#xff0c;而且还需要相应的LCD控制器。在通常情况下&#xff0c;生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起&#xff0c;而LCD控制器则是…

P1372 又是毕业季I

题目背景 “叮铃铃铃”&#xff0c;随着高考最后一科结考铃声的敲响&#xff0c;三年青春时光顿时凝固于此刻。毕业的欣喜怎敌那离别的不舍&#xff0c;憧憬着未来仍毋忘逝去的歌。1000多个日夜的欢笑和泪水&#xff0c;全凝聚在毕业晚会上&#xff0c;相信&#xff0c;这一定是…

微信表情都戒烟了

昨天看到最新的微信表情是这样的原来的抽烟表情被替换成了这释放出一个信号&#xff0c;就是「抽烟不酷了」不过我想说&#xff0c;只戴着一个绿帽子&#xff0c;嘴巴里面什么都没有&#xff0c;好像也不酷啊。难道重点就是那个墨镜????&#xff1f;不过&#xff0c;在PC版…

这个代码应该怎么写???

这个代码应该怎么写??? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiDB/html/delphi_20061222151309162.html我用DELPHI和SQL SEVER做了一个系统,现在一个窗口做了一个 帮助按键,我想点它就能打开一个名为help.txt的使用帮助文档,代码要怎么写? 麻烦高…

Python 类的属性和实例属性 Python 的动态语言

#定义一下类, 含有类属性 aaa, >>> class Aa: ... aaa 10... #对类 Aa实例化出一个实例 a1>>> a1 Aa() >>> print(a1.__dict__)#查看实例并没有自己的方法和属性{}>>> a1.aaa #但是这个实例在调用属性的时候, 发现自己没有这个属性, 于…

高效KMP字符匹配算法就这么简单

1、聊一聊上一篇文章"暴力"字符匹配算法的C语言实现2、KMP算法介绍1KMP介绍KMP是一种字符匹配算法&#xff0c;为啥叫KMP呢&#xff1f;因为是由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt大佬提出来的。那一些小伙伴会问了怎么不叫"DJV算法"呢?因为老外…

安装MyEclipse得心得

我使用的MyEclipse是MyEclipse_5.5.1GA_E3.2.2_Installer.exeEclipse是eclipse-SDK-3.2-win32Tomcat是Tomcat 6.0JDK是jdk-6u7-windows-i586-p.exe来搭建得JSP开发环境要说Java最麻烦的还是搭建环境&#xff0c;尤其对于我这种菜鸟级的人来说简直是一个小小得错误就让我停滞很久…

TQ210 —— NandFlash

TQ210 —— nandflashTQ210 开发板板载一片 1Gbyte 的 NAND FLASH——K9K8G08U0B&#xff0c;通过查询K9K8G08U0B 芯片手册可以得到如下信息&#xff1a;&#xff08;理论知识不再介绍&#xff09;K9K8G08U0B : (1G 32M) x 8bit 总大小Data Register : (2K 64) x 8bit 数据寄…

涂鸦赞助的500个开发套件,先到先得

来源 | 涂鸦跟涂鸦申请的福利&#xff0c;给喜欢开发的同学发放开发套件&#xff0c;只要是不是专门白嫖党&#xff0c;数量可以不做限制。去年疫情突发&#xff0c;封城、封小区以及人员隔离&#xff0c;让原本享受千般宠爱的主子们变成了靠吃猫砂、塑料袋度日的小可怜&#x…

Oracle 1204 RAC failover 测试 (二)

1.检查数据库状态,状态正常 [oracleracdb01 rac]$ crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora.rac.db application ONLINE ONLINE racdb01 ora....s1.…

ARM中断返回地址详细分析

ARM中断返回地址详细分析 在ARM体系中&#xff0c;通常有以下3种方式控制程序的执行流程&#xff1a;1、在正常执行过程中&#xff0c;每执行一条ARM指令&#xff0c;程序计数器PC的值加4个字节&#xff1b;每执行一条Thumb指令&#xff0c;程序计数器PC加2个字节。整个过程是顺…

C++识别二维码

C识别二维码 https://blog.csdn.net/coolingcoding/article/details/25804129 https://blog.csdn.net/sw5131899/article/details/52848957 https://blog.csdn.net/weichaohnu/article/details/8275829

Linux-C 编程 / 网络 / 超迷你的 web server

一、为生活寻找固定的支撑点1. 什么是生活的支撑点&#xff1f;让自己感到些许痛苦&#xff0c;但却会带来实实在在的充实感和成就感的事情。举个栗子&#xff0c;我的支点是运动、看书、研究技术。2. 固定的支撑点很重要&#xff1a;三个固定的要素&#xff1a;时间 / 空间 / …

20165326 java第四周学习笔记

第四周学习笔记 ch5 子类和父类子类只能有一个父类使用关键字extendsyclass 子类 extends 父类系统默认的祖先类Object&#xff08;java.lang包中&#xff09;继承&#xff1a;子类继承父类的方法可以直接作为实例方法调用&#xff0c;继承的成员变量和方法的访问权限不变&…

用VSTS进行网站压力测试

VSTS提供了一个丰富、强大的工具平台&#xff0c;融合了软件开发领域的各个角色&#xff0c;涵盖软件开发生命周期的各个阶段&#xff0c;包括设计&#xff0c;开发&#xff0c;测试&#xff0c;管理&#xff0c;而这一整套构件的融会贯通&#xff0c;让它可以有效地改善软件开…

基于 DirectShow 的播放器

https://blog.csdn.net/leixiaohua1020/article/details/13019147 COM编程之 QueryInterface https://www.cnblogs.com/Braveliu/p/3435560.html

第四周选做作业

相关知识点的总结 通过命令行引入参数递归循环课上内容的补做&#xff0c;结果截图 未完成内容:递归与循环 补做教材第二章&#xff0c;第三章编程题目 参考资料 2016-2017-2 《Java 程序设计》课堂实践项目编写一个Java应用程序,输出全部的希腊字母。_百度知道[]转载于:https:…

数据结构和算法,也就那么回事儿

金三银四来了&#xff0c;各大厂动静不小&#xff0c;都在储备人才&#xff0c;绝对是程序员面试的黄金时间了&#xff0c;不少同学也在后台反馈面试中遇到的一些问题&#xff0c;所以今天想跟大家说说算法。说起算法&#xff0c;那大厂面试是绝对必考的&#xff0c;可以说是一…