您的位置:首页 > 其它

列表生成式,生成器表达式,模块的使用

2019-01-18 14:54 246 查看
三元表达式
无论条件成立与否都要返回一个值,
用于简化仅有一个判断的函数(或代码块)
递归
递归有循环调用的次数限制,调用函数时,函数相关数据要入栈,而栈区是有限的
二分查找法
匿名函数
仅能在定义时使用一次,定义完了就没了
参数没有括号,不能有return,会自动把函数体的执行结果当做返回值
函数体只能有一个表达式 且不能换行
内置函数
max min sorted map filter reduce

列表生成式
一个快速生产列表的表达式
语法[表达式 for in 遍历]
语法[表达式 for in 遍历 if 条件]
生成器表达式
生成数据的函数 函数体中yield关键字  yield 暂停函数的执行 还能返回一个值
可以使用一种快速创建生成器的表达式
语法(表达式 for in 循环 if 条件)
与列表生成式完全相同

目前使用函数来编写代码 虽然大幅度降低了代码冗余,并且组织结构清晰多了
但是随着项目功能的增加如果还将代码全放一个文件中,将会出现以下问题
1.维护性差
2.函数太多结构也不清晰,可读性差
3.对于相同功能的函数,如果在不同文件中都要使用,就只能复制粘贴 又出现了重复代码

1.如何拆分文件
2.拆开后如何再使用文件中的内容
上述问题的解决方案就是拆分模块

什么是模块
模块就是一堆功能的集合体,以py文件的形式存在
简单的就是具备一堆函数的py文件
模块的分类
1.自定义模块(重点学习),包含第三方模块(学习用法即可)
2.内置模块 例如time os(主要学怎么使用)
3.经过编译后的C或C++库,以DLL形式存在(忽略)
4.包(本质就是一个文件夹,其中包含了一堆模块)

import 用于导入一个模块
会立即执行模块中的代码
导入模块时发生了什么
1.创建了一个名称空间
2.执行模块中的代码,将内部名称与值的对应关系存储到名称空间中
3.在当前执行文件创建一个名字,该名字指向被导入模块的名称空间

注意:模块之间的名称空间是相互独立的
模块中的代码仅在第一次被导入时执行

pycharm会自动帮你检测 项目根目录下的模块
给以给你一些提示,但是对于不再根目录下的,他可能会报错
这是pycharm 的问题 不影响执行

给被导入的模块取别名
import xxx as xx
print()

from导入模块
使用from 导入时 会把import后的名字直接放入当前名称空间
使用时可以不写前缀
注意:可能会与当前名称空间中的名字冲突
如果真的冲突了 会就近查找 谁最后定义我就用谁

*通配符 会将模块中所有名字全部导入
极容易出现名称冲突,要慎用

该特殊变量 用于指定哪些名字可以被*导入
__all__ = ['func']

执行文件的两种方式:
__name__属性可以获取当前这个模块的名字
当这个文件作为执行文件被执行时,__name__的值时__main__
当这个文件被导入执行时,__name__的值时模块的名字

使用模块时必须先找到对应的模块文件,这就涉及到查找(搜索)路径
1.查找内存中已存在的
2.内置的
3.sys.path
sys.modules 可以看到内存中已经加载的模块
当你要使用的模块不在执行文件同一级下时,就找不到
pycharm会自动把项目根目录加入syspath
如果碰巧你要找的文件就在项目根目录下,就能找到
但是如果你换了一个运行环境不在pycharm,就有可能找不到
所以为了保证你的项目在哪都能运行,我们需要自己将要使用的文件路径添加到sys.path中
可以将sys.path理解为解释器的环境变量
如果你的执行文件在根目录下,就能够访问到当前项目中的所有文件,无须关心sys.path
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐