博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
learn-python3
阅读量:5885 次
发布时间:2019-06-19

本文共 2380 字,大约阅读时间需要 7 分钟。

# learn-python3

  这是我初学Python时写的一套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 printerprinter = 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 wrapperwrapper_origin_func = decorator(origin_func)wrapper_origin_func(*args, **kwargs)

语法糖支持:

@decorator1(args)@decorator2def func(): pass#is equivalent to:def func(): passfunc = 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很大时对内存的消耗极高甚至会发生内存溢出。为此,我们可以定义一个迭代器类,通过维护两个变量值而不是整个元素来实现延迟计算。

转载于:https://www.cnblogs.com/cyanlong/p/5712319.html

你可能感兴趣的文章
出现二个奇葩bug
查看>>
【GMT43智能液晶模块】例程七:定时器PWM实验——简易电子琴
查看>>
CentOS7 yum安装、配置PostgreSQL 9.5
查看>>
js cookie介绍和实例(用于自动登录,记住用户名等)
查看>>
CSS魔法堂:display:none与visibility:hidden的恩怨情仇
查看>>
git 放弃本地修改(转)
查看>>
.NET获取服务器信息,如服务器版本、IIS等
查看>>
你能熟练使用Dictionary字典和List列表吗?
查看>>
读取Json
查看>>
关于DLL文件和EXE文件不在同一目录下的设置
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 密码强化、网络安全强化...
查看>>
web 开发之js---ajax 中的两种返回状态 xmlhttp.status和 xmlhttp.readyState
查看>>
TeX
查看>>
【Machine Learning in Action --2】K-最近邻分类
查看>>
cocos2dx3.1.1+cocosstudio+lua问题总结
查看>>
漫游Kafka设计篇之性能优化(7)
查看>>
MVC在添加控制器的时候发现没有添加的选项了?肿么办?
查看>>
Android AndroidManifest.xml配置文件
查看>>
[原创]自定义BaseAcitivity的实现,统一activity的UI风格样式
查看>>
C# LDAP认证登录
查看>>