learn-python3
learn-python3
这是我初学Python时写的一套Python基础示例程序.主要基于廖雪峰老师的Python3教程和<<深入理解Python>>. 感谢!
下面是这些示例程序的目录总结:
Chapter1:容器/集合/Collection
1.字典/哈希表/dictionary/map
2.链表/list
3.无序表/set/tuple
4.格式化字符串和字符串连接
Chapter2:Python函数和函数式编程
1.Python参数(*args, **kw ..)
2.(多)返回值 - tuple
3.函数式编程
1).高阶函数(map,reduce,filter)
2).匿名函数(lambda表达式)
3).闭包(Closure)
4).装饰器(decorator)
闭包(Closure):
在python中,函数是对象,函数名作为对此对象的引用。像其他数据结构一样,函数也可以赋值给变量,并且我们可以在函数中定义对象,将对象作为参数和将对象作为返回值。
在这里,我们举一个例子来说明。
def make_printer(msg):
def printer():
print(msg)
return printer
printer = make_printer('Foo!')
printer() #Foo
闭包是指 内部函数(nested function)
访问 其 外围函数(enclosing)
作用域的变量,并且外围函数已经执行完毕。
当 make_printer
被调用,一个新的栈帧入栈,printer
函数作为其常量,msg
的值作为局部变量被保存。然后创建并返回了函数 printer
。因为函数 printer
引用了msg
变量,当 make_printer
函数返回(return)之后它依旧存活(kept alive)。
这里面有两个关键点:存在内部函数,并且内部函数访问了外围局部变量。只有同时满足这两点,才称为闭包。
> 装饰器(**decorator**):
首先,装饰器是一种设计模式。在不改变原有代码的基础上,将其功能模块进行包装(wrapper),构建出更加复杂的功能模块。通常,增强了的功能模块会调用被增强的(即原有的)功能逻辑。AOP(Aspect Oriented Programming)
就是使用这种编程思想。
从技术上讲,Python的装饰器是使用闭包来实现的。并提供了简洁的语法糖支持。
装饰器函数接收函数作为参数,并且在内部通过定义 wrapper
函数来实现增强的逻辑。通常情况下,这个函数会调用原函数,并且,这个函数的参数列表应该和被增强的函数保持一致。最终,我们将这个增强了的函数(wrapper)作为返回值。
def decorator(func):
def wrapper(*args, **kwargs):
maybe some code..
func(*args, **kwargs)
maybe some code...
return wrapper
wrapper_origin_func = decorator(origin_func)
wrapper_origin_func(*args, **kwargs)
语法糖支持:
@decorator1(args)
@decorator2
def func(): pass
#is equivalent to:
def func(): pass
func = decorator1(args)(decorator2(func))
关于装饰器带参数的解释:
def decorator1(args):
def real-decorator(func):
def wrapper(*args, **kwargs):
some code..
func(*args, **kwargs)
some code access args
return wrapper
return real-decorator
Chapter3:面向对象(Oritented-Object)
1.继承和多态(extends and polymorphic)
2.成员(mumber)
1).类成员
2).实例成员
3.访问权限
4.专有方法(special method)
5.动态修改类和slots.
6.Python中的类型(type)
7.元类(metaclass)
Chapter4:协程 -- yield
我们考虑自己来实现一个数字生成器(此生成器是广义的),即 range()
函数的功能。
首先,我们借助 list
通过定义最简单,最直接的函数来实现。
def MyRange(n):
num, list = 0, []
for num < n:
list.append(num)
num += 1
return list
上面的代码借助了 list
对象简单粗暴的将所有可能的值都加载到内存中。这种实现方式当n很大时对内存的消耗极高甚至会发生内存溢出。为此,我们可以定义一个迭代器类,通过维护两个变量值而不是整个元素来实现延迟计算。
learn-python3的更多相关文章
- reviews of learn python3 the hard way
Almost every time,I try my best to write a long review of the book I have read. But this time I want ...
- Learn Python3 the hard way 第二天总结 命令行(2)
复制文件 命令:cp含义:很简单,就是把一个文件复制成一个新文件而已.使用 cp -r命令可以复制一些包含文件的目录 移动文件 命令:mv含义:对文件进行"rename". 查看文 ...
- Learn Python3 the hard way 第一天总结 命令行(1)
附录-命令行快速入门(1) command line interface 简称 CLI ,可以在mac OS 上通过一些输入进行一些操作. 1如何在迷路后怎样回家 命令: pwd:打印工作目录cd 更 ...
- python3笔记九:python数据类型-String字符串
一:学习内容 字符串概念 字符串运算 字符串函数:eval().len().lower().upper().swapcase().capitalize().title().center().ljust ...
- tensorflow语法笔记
1.如何理解 tf.reduce_max或者 tf.reduce_mean中对Tensor和高维矩阵的坐标轴axis的选择的操作 tf.reduce_mean( input_tensor, axis= ...
- [IT学习]Learn Python the Hard Way (Using Python 3)笨办法学Python3版本
黑客余弦先生在知道创宇的知道创宇研发技能表v3.1中提到了入门Python的一本好书<Learn Python the Hard Way(英文版链接)>.其中的代码全部是2.7版本. 如果 ...
- apache2.4 +django1.9+python3+ubuntu15.10
这是我这几天学习部署django的总结,中间出现了不少的问题.特此记录下来,用来复习巩固,同时也希望给想学习的同学一些参考. 第一步:我在ubuntu上装的是python3.sudo apt-get ...
- 慕课python3.5学习笔记
本文章中有部分代码为python2 慕课python入门 慕课python进阶 布尔值 布尔值可以用and.or和not运算. and运算是与运算,只有所有都为 True,and运算结果才是 True ...
- python3 介绍
一.历史 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继 ...
- [转]Python3《机器学习实战》学习笔记(一):k-近邻算法(史诗级干货长文)
转自http://blog.csdn.net/c406495762/article/details/75172850 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 一 简 ...
随机推荐
- ASP.NET MVC- VIEW Overview Part 1
The purpose of this tutorial is to provide you with a brief introduction to ASP.NET MVC views, view ...
- (转)解决png图片在IE6下不透明的方法
来源于:http://xzl52199.blog.163.com/blog/static/95206446201142174540220/ 一.传统的JavaScript方法 思路: 1.一个专门解决 ...
- mysql查询随机几条数据(速度快)
MySql查询随机几条数据 想到了 Max RAND 这几个函数 用以下2种办法都可以实现查询. 速度还行. 几十万数据左右, 没有什么问题. SELECT * FROM `news` WHERE i ...
- Java数据库连接代码集合(转)
Java数据库连接接口(JDBC)是Java里定义的一套用于数据库连接和操作的API的集合.有不同的数据库厂商提供这套接口的实现类,对于 Java程序员来说,程序员不需要关心数据库的底层的实现,统一的 ...
- mysql中enum的用法
字段 类型 长度/值*1 整理 属性 Null 默认2 额外 注释 enum 说明:enum类型的字段,若长度值写长度1/2,报错 (1) 数据长度为1,则为0,1,2… (2) ...
- lua wireshark 数据报解析
http://www.360doc.com/content/13/1226/15/15257968_340284574.shtml http://www.360doc.com/userhome.asp ...
- Windows 7系统下局域网文件共享设置方法
今天给家里增添了一台组装机,小试了一下win7局域网文件共享功能,很爽的说. 记录一下实现方法: 1.关闭防火墙 2.启用共享. 控制面板 – 网络和共享中心 – 更改高级共享设置,将图中的几个选项选 ...
- 安装Oracle数据库和PLSQL连接数据库
首先在Oracle官网上下载: 安装前要注意:将win64_11gR2_database_2of2中的\win64_11gR2_database_2of2\database\stage\Compone ...
- OKHttp的简单使用
一方面,最近关于OKHttp的讨论甚嚣尘上,另一方面,我最近也更新了android6.0,发现在6.0中HttpClient不能使用了,于是决定抽时间也看一下OKHttp,总结了一点东西,与大家分享. ...
- RecyclerView实现瀑布流效果(图文详解+源码奉送)
最近有时间研究了一下RecyclerView,果然功能强大啊,能实现的效果还是比较多的,那么今天给大家介绍一个用RecyclerView实现的瀑布流效果. 先来一张效果图: 看看怎么实现吧: 整体工程 ...