函数:
可以返回多个值,其实函数是返回一个对象,就是元组,元组中的元素被拆分到各个结果变量中了

匿名函数:
lambda函数,仅仅由单条语句组成,结果就是返回值
这种函数没有提供名称属性

闭包:

closure就是其他函数动态生成并返回的函数
被返回的函数可以访问其创建者的局部命名空间
  1. def make_closure(a):
  2. def closure():
  3. print("I know the secret: %d" % a)
  4. return closure()
  5. closure = make_closure(5)
和标准函数的区别就是,即使创建者已经执行完成,闭包仍然可以访问创建者的局部命名空间
#I know the secret: 5

扩展调用语法:
  1. def say_hello_then_call_f(f,*args,**kwargs):
  2. print("arg is " + str(args))
  3. print("kwargs is %s "% kwargs)
  4. print("hello now i am gonna to call %s" % f)
  5. return f(*args,**kwargs)
  6. def g(x,y,z = 1):
  7. return (x+y) / z
  8. say_hello_then_call_f(g,1,2,z = 5)
  9. print(say_hello_then_call_f(g,1,2,z = 5))
  10. print(g(1,2,z = 5))
 
柯里化:
通过部分参数应用从现有函数派生出来的新函数技术
  1. def add_numbers(x,y):
  2. return x+y
  3. add_five = lambda y: add_numbers(5, y)
  4. print(add_five(2))
  5. #这里的add_numbers的第二个参数是柯里化的,就是定义了一个可以调用现有函数的新函数而已
  6. #还可以使用下面的模块函数简化这个过程
  7. from functools import partial
  8. add_five_ = partial(add_numbers,5)
  9. print(add_five_(9))
在pandas和时间序列中,可以用这个技术创建专门的数据序列转换函数
  1. #计算时间序列x的60日移动平均
  2. ma60 = lambda x:pandas.rolling_mean(x,60)
  3. #计算data中所有时间序列的60日移动平均
  4. data.apply(ma60)
pandas:Python Data Analysis Library

生成器:
能以一种一致的方式对序列进行迭代
通过一种迭代器协议实现的
生成器是构造性的可迭代对象的一种简单方式
一般的函数执行之后只返回单个值
生成器则是以延时的方式返回一个序列
每返回一个值之后暂停
直到下一个值被请求时再继续
要创建一个生成器,只需要将函数中的return替换成yeild即可
  1. def squares(n=10):
  2. print('Generating squares from 1 to %d' % (n**2))
  3. for i in range(1,n+1):
  4. yield i**2
  5. gen = squares()
  6. print(gen)
  7. #直到从生成器中请求元素时候,才会执行代码
  8. for x in gen:
  9. print(x)
  10. '''
  11. <generator object squares at 0x000000BD50384518>
  12. Generating squares from 1 to 100
  13. 1
  14. 4
  15. 9
  16. 16
  17. 25
  18. 36
  19. 49
  20. 64
  21. 81
  22. 100
  23. '''

生成器表达式:
是构造生成器的最简单的方式,方式就是把列表推导两边的方括号改成圆括号
  1. gen= (x ** 2 for x in range(100))
  2. print(gen)
  3. print(sum(x**2 for x in range(100)))
  4. print(dict((i,i**2) for i in range(7)))
  5. '''
  6. <generator object <genexpr> at 0x0000007F13491938>
  7. 328350
  8. {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}
  9. '''

itertools模块:
这个模块中有一组可以用于许多常见数据算法的生成器
groupby可以接受任何序列和一个函数,根据函数的返回值对序列中的连续元素进行分组
  1. import itertools
  2. first_letter = lambda x: x[0]
  3. names = ['jason','peggy','charles','heather','whitney','thea','ana','jane','aya']
  4. for letter,name in itertools.groupby(names,first_letter):
  5. print(letter,list(name))
  6. '''
  7. j ['jason']
  8. p ['peggy']
  9. c ['charles']
  10. h ['heather']
  11. w ['whitney']
  12. t ['thea']
  13. a ['ana']
  14. j ['jane']
  15. a ['aya']
  16. '''
文件操作:
  1. with open('temp_temp.txt','w') as handle:
  2. handle.writelines(x for x in open('temp.txt') if len(x)> 1)
  3. open('temp_temp.txt').readline()

Python语言精要---下的更多相关文章

  1. 解决python语言在cmd下中文乱码的问题

    解决python语言在cmd下中文乱码的问题: a = "再见!"print (a.decode('utf-8').encode('gbk')) #解决在cmd下中文乱码的问题

  2. Python语言精要---上

    下面的记录根据: 麦金尼. 利用Python进行数据分析[M]. 机械工业出版社, 2014. 这本教材的附录部分总结而来   Python的设计特点是重视可读性,简洁性以及明确性 Python不推荐 ...

  3. 【Python基础学习一】在OSX系统下搭建Python语言集成开发环境 附激活码

    Python是一门简单易学,功能强大的编程语言.它具有高效的高级数据结构和简单而有效的面向对象编程方法.Python优雅的语法和动态类型以及其解释性的性质,使它在许多领域和大多数平台成为编写脚本和快速 ...

  4. selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等

    selenium的用法 selenium2.0主要包含selenium IDE 和selenium webDriver,IDE有点类似QTP和LoadRunner的录制功能,就是firefox浏览器的 ...

  5. 第 2 章 Python 语言入⻔

    目录 2.1低而长的学习曲线 2.2Python的优势 2.3在你的计算机中安装Python 2.4如何运行Python程序 2.5文本编辑器 2.6寻求帮助 Python语言是一种流行的编程语言,在 ...

  6. [Python学习] Linux环境下的Python配置,必备库的安装配置

    1.默认Python安装情况 一般情况,Linux会预装Python的,版本较低,比如Ubuntu15的系统一般预装的是Python2.7.10. 使用命令:which python可以查看当前的py ...

  7. [Python学习笔记1]Python语言基础 数学运算符 字符串 列表

    这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...

  8. 如何系统地自学一门Python 语言(转)

    转自:http://www.phpxs.com/post/4521 零基础情况下,学一门语言充实下自己,Python,简洁.优美.容易使用,是一个很好的选择.那么如何系统地自学Python呢? 有的人 ...

  9. python语言的优点和缺点

    python作为一门高级编程语言,它的诞生虽然很偶然,但是它得到程序员的喜爱却是必然之路. 龟叔给Python的定位是"优雅"."明确"."简单&qu ...

随机推荐

  1. 如何查看和停止Linux启动的服务

    1. 查看Linux启动的服务chkconfig --list 查询出所有当前运行的服务chkconfig --list atd  查询atd服务的当前状态 2.停止所有服务并且在下次系统启动时不再启 ...

  2. 160902、Ionic、Angularjs、Cordova搭建Android开发环境

    1.jdk 环境变量配置 path:C:\Program Files\Java\jdk1.7.0_79\bin 2.node.js 因为安装cordova时要用到node.js的npm 下载地址: h ...

  3. Linux之Ganglia源码安装

    一.Ganglia简介: Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点.Ganglia的核心包含gmond.gmetad以及一个Web前端.主要是用来监 ...

  4. 关于sql server 2008过期导致 MSSQLSERVER服务就无法启动,手动启动就报告错误代码17051。

    1.基本现象:MSSQLSERVER服务就无法启动,手动启动就报告17051错误. 2.解决办法: 第一步:进入SQL2008配置工具中的安装中心, 第二步:再进入维护界面,选择版本升级, 第三步:进 ...

  5. PHP上传文件详解 错误提示

    首先在php.ini里配置上载文件.有以下几个重要的配置单: 选项 默认值 说明 post_max_size 8M 控制以后的POST请求的最大规模.必须大于upload_max_filesize选项 ...

  6. POJ 3267:The Cow Lexicon(DP)

    http://poj.org/problem?id=3267 The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submi ...

  7. 约瑟夫问题 java

    约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围 ...

  8. easyrtc-server在ubuntu14.04上的安装方法

    easyrtc 官网 http://easyrtc.com/ 1.安装nodejs,安装npm (不知道如何安装请google一下) 2. 查看运行easyrtc 所需要的js 包,在easyrtc ...

  9. Cube Stacking

    Cube Stacking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 21350 Accepted: 7470 Case T ...

  10. Socket状态变迁图

    在一些防火墙或端口管理工具中经常会看到连接状态为CLOSED CLOSE_WITE LAST_ACK等的进程, 虽然状态就那么很少的几个, 而且看字面意思也能猜个大概, 但没做过Socket编程的朋友 ...