- A+
所属分类:python基础入门
元类
五、实践为王
请记住上面的简单案例,如果您想从本文中获得对Python元类仅有的一点印象。纸上得来终觉浅,绝知此事要躬行,开始吧。
模块
此时,在包pkg中就可以导入子模块mod_1(仿佛子模块mod_1真的在包pkg中):
3、可导出的公有属性
在公有属性方面,包与模块的行为完全一致,当然别忘了包还有 动态的新增属性。
2、导入过程
一个模块的导入过程主要分三步:搜索、加载 和 名字绑定。(具体参考 The import statement)
1)搜索
3、更多细节根据 The import statement 中的描述,以下是导入原理对应的Python伪码:
函数式编程
差异点 | 函数(lambda表达式) | 函数(def语句) |
---|---|---|
函数体 | 只能是单行表达式(expression) | 可以是任意复杂的语句(statement) |
函数返回值 | 返回值就是函数体中的表达式的求值结果 | 由函数体中的return语句指定 返回值 |
函数名 | 定义后直接返回函数对象(匿名函数) | 定义后自动为函数对象绑定函数名 |
函数定义位置 | 可以在任何允许函数对象出现的位置定义(支持即时定义,即时调用) | 只能在允许语句出现的位置定义(先定义,后调用) |
用途 | 多用于一次性使用的简单函数 | 适用于一切函数和类方法 |
闭包的这种 能够记住环境状态 的特性非常有用,Python中有一些其他特性就是借助闭包来实现的,比如 装饰器
从上面的示例可以看出,如果在编码过程中遇到了“多次用相同的参数调用一个函数”的场景,就可以考虑使用偏函数来固化这些相同的参数,进而简化函数调用。
可以看出,这个闭包版本的唯一缺点是它需要对函数title进行重新定义(与默认参数的情况有些类似)。
总而言之,如果需要对 已有函数 进行参数固化,偏函数是最佳选择。
2、生成器表达式
生成器表达式(Generator Expressions)与列表解析在语法和功能方面都非常相似。二者的根本差异是:生成器表达式返回一个 生成器,而列表解析返回一个列表。如下所示:
差异点 | 生成器表达式 | 列表解析 |
---|---|---|
表示方法 | (expr for item in iterable if cond_expr) | [expr for item in iterable if cond_expr] |
返回值 | 一个生成器 | 一个列表 |
与列表解析相比,生成器表达式具有 延迟计算(lazy evaluation)的特点,因此在使用内存上更有效。关于生成器表达式的实际案例,可以参考 Python核心编程(第二版) 中的 『8.13』 一节:『生成器表达式』。
谢谢阅读!!!!
我的微信公众号
爱真理,得永生! 爱在灵灵久博客,网罗天下,福利大家!