day14之模块

一、列表生成式与生成表达式

1、列表生成式(数据量小)

要求:在列表内造100个元素

示例:

1 l=[]
2 for i in range(100):
3     l.append('egg%s'%i)
4 print(l)
5 
6 #可简化如下格式:
7 l=['egg%s'%i for i in range(100)]
8 print(l)

1.2、常用列表生成式

示例:

l=['egg%s'%i for i in range(100) if i > 10]
print(l)

  注:此处不能写else,因为无法判断else输入for 还是 if

2、生成器表达式(数据量大)

l=('egg%s'%i for i in range(100) if i > 10)
#1.
res=l.__iter__()
print(res.__next__())
print(res.__next__())
#2.
print(next(l))
print(next(l))
#3.
for i in l:
    print(i)

3、练习题

3.1、把列表内元素都变成大写

names=['egon','alex','wupeiqi','yuanhao','lxx_sb']
names=[i.upper() for i in names]
print(names)

3.2、把结尾带sb的过滤掉

names=['egon','alex','wupeiqi','yuanhao','lxx_sb']
names=[i for i in names if not i.endswith('sb')]
print(names)

3.3、保存剩下的名字的长度

names=['egon','alex','wupeiqi','yuanhao','lxx_sb']
names=[len(i) for i in names ]
print(names)

3.4、求a.txt中最长的行的长度,需要使用max函数

  a.txt文件内容如下:

sdfsdfsdgffsdgfdshfdgfh
12231321311321
132132
321
321
321
32
sdaflkjsdlkfs
sdflkjsdlkfjlsdjf
sdlkfjlsddjflk

  1.

with open('a.txt','r',encoding='utf-8')as f:
    nums=[len(line) for line in f]
print(nums)
print(max(nums))

  2.

with open('a.txt','r',encoding='utf-8')as f:
    nums=(len(line) for line in f)
    # print(nums)#内存地址
    # print(next(nums))#取出一个值
    # print(max(nums))#取出最大值

    print(max(len(line) for line in f))  #取出最大值

二、模块

1、什么是模块?

  模块就是系统功能的结合体,在python中一个py文件就是一个模块,比如module.py其中模块名是module。

2、使用模块

2.1、import导入模块

  首次导入模块发生三件事:

    1、创建一个模块的名称空间

    2、执行模块对应的文件,将产生的名字存放于1中的名称空间

    提示:from ... import ... 与import 前两件事是一模一样

    3、在当前执行文件中拿到一个模块名,该模块名指向1的名称空间

执行:

import time
import time
import time
time.sleep(2)

强调:之后的导入会直接引用第一次导入的结果,不会重复执行文件

   模块中功能的执行始终以模块自己的名称空间为准

3、为模块起别名

import time as sm
sm.sleep(2)
import time as mysql
mysql.sleep(4)

功能升级示例:

如果两个模块有类似功能,用户可以选择执行

engine=input('>>:').strip()
if engine == 'sm':
    import sm as db
elif engine == 'mysql':
    import mysql as db

#执行db模块中的函数:db.xxx(),输入什么调什么功能

4、一行导入多个模块

不推荐使用

import time , requests , _mysql

推荐成多行

import time
import requests
import json

5、模块的使用之from ... import ...

首次导入模块发生三件事:

  1、创建一个模块的名称空间;
2、执行模块对应的文件,将产生的名字存放于1中名称空间
提示:from ... import ... 与import 前两件是一模一样
3、在当前名称空间中直接拿到模块中的名字,可以直接使用,不用加任何前缀
from ... import...名字,拿到的名字可以不加前缀直接使用,使用起来更加方便,
但问题是容易与当前执行文件中相同的名字冲突
注意:同import,执行模块中的功能,始终以模块的名称空间为准

6、起别名

from requests import get as m
print(m)
可以在一行导入多个,'*'代表所有,如果在模块中存在__all__=['get',....],那么'*'代表列表内的一些功能
from requests import *

7、模块的设计者__name__的使用

spam.py文件内容:

# -*- coding:utf-8 -*-
#spam.py
print('from the spam.py')
__all__=['money','read1']#from ... import *

money=1000

def read1():
    print('spam模块:',money)

def read2():
    print('spam模块')
    read1()

def change():
    global money
    money=0


# print(__name__)
#__name__的值
#1、在文件被直接执行的情况下,等于'__main__'
#2、在文件被导入的情况下,等于模块名

if __name__ == '__main__':
    # print('文件被当做脚本执行了')
    read1()
else:
    print('文件被导入了')

8、模块的搜索路径

import sys
print(sys.path)

查看内存中被导入的模块

import sys
print(sys.modules)
获取到文件路径列表:
['D:\\mypython\\projects\\函数\\day14', 'D:\\mypython',
'D:\\Python\\Python36\\python36.zip', 'D:\\Python\\Python36\\DLLs',

'D:\\Python\\Python36\\lib', 'D:\\Python\\Python36',
'D:\\Python\\Python36\\lib\\site-packages']


第一条路径是:此文件的执行路径
        可以看做python文件

因此模块的查找顺序是:
1、 内存中已经加载的模块
2、 内置模块
3、 sys.path路径中包含的模块
import sys
sys.path.append(r'D:\mypython\projects\函数\day14')

import spam
read1()

强调:sys.path的第一路径就是当前执行文件所在的文件夹

猜你喜欢

转载自www.cnblogs.com/happyfei/p/9428125.html