在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

元类

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

103456743

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

五、实践为王

请记住上面的简单案例,如果您想从本文中获得对Python元类仅有的一点印象。纸上得来终觉浅,绝知此事要躬行,开始吧。

模块

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

此时,在包pkg中就可以导入子模块mod_1(仿佛子模块mod_1真的在包pkg中):

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

3、可导出的公有属性

在公有属性方面,包与模块的行为完全一致,当然别忘了包还有 动态的新增属性。

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

2、导入过程

一个模块的导入过程主要分三步:搜索、加载 和 名字绑定。(具体参考 The import statement)

1)搜索

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

3、更多细节根据 The import statement 中的描述,以下是导入原理对应的Python伪码:

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

函数式编程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

差异点函数(lambda表达式)函数(def语句)
函数体只能是单行表达式(expression)
可以是任意复杂的语句(statement)
函数返回值返回值就是函数体中的表达式的求值结果由函数体中的return语句指定 返回值
函数名定义后直接返回函数对象(匿名函数定义后自动为函数对象绑定函数名
函数定义位置可以在任何允许函数对象出现的位置定义(支持即时定义,即时调用)只能在允许语句出现的位置定义(先定义,后调用)
用途多用于一次性使用的简单函数 适用于一切函数和类方法

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

闭包的这种 能够记住环境状态 的特性非常有用,Python中有一些其他特性就是借助闭包来实现的,比如 装饰器

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

从上面的示例可以看出,如果在编码过程中遇到了“多次用相同的参数调用一个函数”的场景,就可以考虑使用偏函数来固化这些相同的参数,进而简化函数调用。

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

可以看出,这个闭包版本的唯一缺点是它需要对函数title进行重新定义(与默认参数的情况有些类似)。

总而言之,如果需要对 已有函数 进行参数固化,偏函数是最佳选择。

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

2、生成器表达式

生成器表达式(Generator Expressions)与列表解析在语法和功能方面都非常相似。二者的根本差异是:生成器表达式返回一个 生成器,而列表解析返回一个列表。如下所示:

差异点生成器表达式 列表解析
表示方法(expr for item in iterable if cond_expr)[expr for item in iterable if cond_expr]
返回值一个生成器一个列表

与列表解析相比,生成器表达式具有 延迟计算(lazy evaluation)的特点,因此在使用内存上更有效。关于生成器表达式的实际案例,可以参考 Python核心编程(第二版) 中的 『8.13』 一节:『生成器表达式』。

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程

谢谢阅读!!!!

在校学生为室友整理出最全面的Python教程!中国好室友!入门教程


分享到:


相關文章: