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的更多相关文章

  1. 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 ...

  2. Learn Python3 the hard way 第二天总结 命令行(2)

    复制文件 命令:cp含义:很简单,就是把一个文件复制成一个新文件而已.使用 cp -r命令可以复制一些包含文件的目录 移动文件 命令:mv含义:对文件进行"rename". 查看文 ...

  3. Learn Python3 the hard way 第一天总结 命令行(1)

    附录-命令行快速入门(1) command line interface 简称 CLI ,可以在mac OS 上通过一些输入进行一些操作. 1如何在迷路后怎样回家 命令: pwd:打印工作目录cd 更 ...

  4. python3笔记九:python数据类型-String字符串

    一:学习内容 字符串概念 字符串运算 字符串函数:eval().len().lower().upper().swapcase().capitalize().title().center().ljust ...

  5. tensorflow语法笔记

    1.如何理解 tf.reduce_max或者 tf.reduce_mean中对Tensor和高维矩阵的坐标轴axis的选择的操作 tf.reduce_mean( input_tensor, axis= ...

  6. [IT学习]Learn Python the Hard Way (Using Python 3)笨办法学Python3版本

    黑客余弦先生在知道创宇的知道创宇研发技能表v3.1中提到了入门Python的一本好书<Learn Python the Hard Way(英文版链接)>.其中的代码全部是2.7版本. 如果 ...

  7. apache2.4 +django1.9+python3+ubuntu15.10

    这是我这几天学习部署django的总结,中间出现了不少的问题.特此记录下来,用来复习巩固,同时也希望给想学习的同学一些参考. 第一步:我在ubuntu上装的是python3.sudo apt-get ...

  8. 慕课python3.5学习笔记

    本文章中有部分代码为python2 慕课python入门 慕课python进阶 布尔值 布尔值可以用and.or和not运算. and运算是与运算,只有所有都为 True,and运算结果才是 True ...

  9. python3 介绍

    一.历史 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继 ...

  10. [转]Python3《机器学习实战》学习笔记(一):k-近邻算法(史诗级干货长文)

    转自http://blog.csdn.net/c406495762/article/details/75172850 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 一 简 ...

随机推荐

  1. Javascript之<script>标签

    把javascript代码插入到HTML页面中需要使用<script>标签,使用这个元素可以使javascript和html标记混合在一个页面中,也可以引入外部的javascript文件. ...

  2. Oracle中分页查询语句

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.O ...

  3. Linux 上不可修改的文件和目录

         有时候我们需要让一个我们自己的目录中的内容不能变动,也就是不允许其他人随便删改我们的目录和目录中的文件.这里,首先,我们需要知道两个概念,文件的粘滞位和属性.       文件如果设置了粘滞 ...

  4. canvas绘制简单小铅笔

    对应HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  5. 打造强势智能手表平台:Testin云測携手索尼招募全球开发人员

    打造强势智能手表平台:Testin云測携手索尼招募全球开发人员 2014/10/27 · Testin · 业界资讯 日前,全球最大的移动游戏.应用真机和用户云測试平台Testin云測宣布联手索尼公司 ...

  6. LabVIEW设计模式系列——资源关闭后错误处理

    标准: 1.很多引用资源其打开函数和关闭函数对错误处理的方式有所不同:2.一般地NI的Help里对打开函数的错误端子的解释是这样的:如错误发生在VI或函数运行之前,VI或函数将把错误输入值传递至错误输 ...

  7. Flume NG中的Kafka Channel

    kafka(官网地址:http://kafka.apache.org)是一款分布式消息发布和订阅的系统 在Flume中的KafkaChannel支持Flume与Kafka整合,可以将Kafka当做ch ...

  8. Load Balance Tomcat with Nginx and Store Sessions in Redis--reference

    An awkward title, but that’s exactly what we’re going to do. For some time, I was looking for a way ...

  9. spring beans源码解读之--XmlBeanFactory

    导读: XmlBeanFactory继承自DefaultListableBeanFactory,扩展了从xml文档中读取bean definition的能力.从本质上讲,XmlBeanFactory等 ...

  10. is_numeric漏洞分析

    2014年,PHP中is_numeric函数十六进制绕过漏洞引发了一次安全问题 接下来,我们来分析一下这个漏洞的原理 函数介绍: is_numeric — 检测变量是否为数字或数字字符串. 函数原型: ...