day16 列表生成式 生成器表达式 模块

时间:2019-01-18
本文章向大家介绍day16 列表生成式 生成器表达式 模块,主要包括day16 列表生成式 生成器表达式 模块使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

上节回顾

1.三元表达式

    把if判断写在同一行,无论条件成立与否都要返回一个值

    用于简化仅有一个判断的函数或代码块

2.递归(回溯 递推)

    函数调用过程中,直接或间接的调用了函数本身

    与循环的区别

    递归循环调用的次数限制,调用函数时,函数相关数据要入栈,而栈区是有限的

二分查找法

3匿名函数

    没有名字的函数

    特点:仅能在定义时使用一次,定义玩了就没了

            参数没有括号,不能有return,会自动把函数的执行结果当做返回值

            函数体只能有一个表达式 且不能换行

    通常与内置函数联合使用

4内置函数

    map 映射

    filter 过滤

    reduce 合并

 

今日内容

01列表生成式

    一个快速产生列表的表达式

#语法 [表达式 for in 遍历 (if条件)] 可以进行映射 过滤操作

#会从li依次取出所有值,进行判断,如果满足条件,然后转到新列表中

li=[1,2,3,4]

new_list=[i/2 for i in li if i > 2]#会从li依次取出所有值,然后转到新列表中

print(new_list)

02生成器表达式

    一种快创建生成器的表达式

#语法 (表达式 for in 循环 if 条件)

#与列表生成式完全相中

l=[1,2,3,4,5,6,7,8,9,0]

new_list=(i for i in l)

print(list(new_list))

03模块的使用*****

    目前使用函数来编写代码 虽然大幅度降低了diamante冗余 并且组织结构清晰多了

    但是随着项目功能的增加 如果还将代码全放一个文件中 那么将会出现一些问题

    1.维护性差

    2.函数太多结构不清晰,可读性差

    3.对于相同功能的函数,如果在不同文件中都要使用,就只能复制粘贴,又出现了重复代码

 

    1.如何拆文件

    2.拆开后怎么使用别的文件中的内容

    上述问题的解决方案就是拆分模块    

 

什么是模块

    模块就是一堆功能的结合体 以py文件的形式存在

    简单的就是具备一堆函数的py文件

模块的分类

    1.自定义模块(重点学习),包含第三方模块

    2.内置模块 例如time,os(主要学怎么使用)

    3.经过编译后的c或c++库 以DLL形式存在(忽略)

    4.包(本质就是文件夹 其中包含了一堆模块)

import用于导入一个模块 会立即执行模块中的代码

导入模块时发什么了什么

1.创建一个名称空间

2.执行模块中的代码,将内部名称与值的对应关系存储到名称空间中

3.在当前执行文件创建一个名字,该名字指向被导入模块的名称空间

注意:模块之间的名称空间是相互独立的    

        模块中的代码仅在第一次被导入时执行一次

 

pycharm会自动帮你检测 项目根目录下的模块

可以给你一些提示 但是对于不在根目录下的 它可能会报错

这是pycharm的问题 不影响执行

给被导入的模块取别名

import modules as m

一次导入多个模块(不建议)

import modules,tool

from的用法

import functools

print(functools.reduce)

#使用fprm导入时 会把import后的名字直接放入当前名称空间

#使用时可以不用写前缀

#可能会与当前名称空间的名字冲突

#如果真的冲突了 会就近查找 谁最后定义我就用谁

from functools import reduce

print(reduce)

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

from tool import *

#该特殊变量用于指定哪些名字可以被*导入

__all__=['func']

执行批py文件的两种方式

1.执行文件

2.模块导入

__name__可以获取当前模块的名字

当这个文件作为执行文件被执行时 得到的__name__的值是__main__,而这个文件被导入执行时__name__的值是模块的名字

模块搜索路径

使用模块时必须先找到对应的模块文件,这就涉及到查找(搜索)路径

1.查找内存中已存在的

#sys.modules可以看到内存中已经加载的模块

import tool

import sys

print('tool' in sys.modules)

2.内置的

3.sys.path

当你要使用的模块不在执行文件同一级下时,就找不到了无法使用

坑爹的是pycharm会自动把项目根目录加入sys.path,如果碰巧你要找的问价那就在项目根目录下,就能找到.但是如果你换了运行环境不再是pycharm 就可能找不到 所以为了保证你的项目在哪儿都能运行,我们需要将自己要使用的文件添加到syy.path

可以将sys.path理解为解释器的环境变量

sys.path.append(r'根目录')

print(sys.path)

如果你的执行文件在根目录下 就能访问当前项目中的所有文件 无需关系sys.path