美文网首页
一阶段day11-01模块、迭代器、生成器、文件操作

一阶段day11-01模块、迭代器、生成器、文件操作

作者: ATM_shark | 来源:发表于2018-10-13 15:27 被阅读0次

一、模块

1、什么是模块

Python中一个py文件就是一个模块;
可以通过 import 或者 from-import 在一个模块中去使用另外一个模块的内容;
方法:
import 模块名 ——》将模块中所有的内容导入,并且可以在当前模块中通过“模块名.”的方式去使用模块中的所有全局变量;
from 模块名 import 变量1,变量2,... ——》将模块中所有的内容都导入,但是只能使用import后面的变量;
from 模块名 import * ——》将模块中所有内容导入,可以直接使用所有的全局变量;
代码执行到 import 的时候,会将 import 后面的模块的内容执行一遍;
================

test1 代码内容:

print(__name__)
test=100
print('导入了一个新的模块',test)
def func1():
    print('good morning,everone')

func1()
print(func1())

==============
例如:

import     test1
__test1__  #print(__name__)
 #导入了一个新的模块 100   #print('导入了一个新的模块',test)
 good morning,everone      #print('good morning,everone')
 good morning,everone      #func1()
 None         #print(func1())
#####以上为导入 test1 文件 自动执行的结果
test1.func1() #good morning,everone
#####以上为人为执行 test1.func1 的结果

2、模块重命名

import 模块名1 as 模块新名字 ——》 给模块名1用模块新名字命名,但模块新名字只在当前模块中有用,并没有对其真的改名;
from 模块名 import 变量名1 as 变量新名字,变量名2 as 变量新名字,...——》给模块部分变量重新命名,但变量新名字只在当前模块中有用,并没有对其真的改名;

import test1 as jsj
print(jsj.test)    #100
from test1 import func1 as hanshu1
print(hanshu1())   #代码执行的实质是 test1.func1()

3、import

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

4、选择性导入(阻止导入)

if _ _ name_ _ == '_ _ main_ _' : ——》固定写法
不希望被别的模块导入执行的代码写在这儿(注意缩进)

5、什么时候使用模块

将具有相同的功能的函数和数据封装到一起,使用

二、迭代器

1、什么是迭代器

迭代器是Python中容器类的数据类型。属于序列,没有具体的字面量(即不逐个取出查看,你永远不晓得这个迭代器里有多少个元素,以及元素是什么)。可以将其他的序列转换成迭代器。
生成语法:iter(序列);

2、迭代器的特点

a、只能通过next方法去一个一个的获取迭代器中的元素;
b、取出一个元素后,迭代器中就不存在这个元素了;
取出语法:next(迭代器);迭代器._ _ next_ _ ()

str1='123456abcde'
iter1=iter(str1)
print(iter1)   #<str_iterator object at 0x002809B0>    迭代器地址
print(next(iter1)) #1
print(next(iter1)) #2
print(next(iter1)) #3
print(next(iter1)) #4
print(next(iter1)) #5
print(iter1._ _ next_ _ ()) #6
思考:iter剩下的元素是什么???

三、生成式和生成器

1、生成器

生成器就是迭代器,但迭代器不一定是生成器;
生成式就是生成器的一种特殊形式:(变量 for 变量 in 序列)

ge1=(x for x in range(10))
print(ge1)  #<generator object <genexpr> at 0x01DC6E40>
next(ge1)  #0 把0取出来了,只是未未打印出来
print(next(ge1)) #1 打印出来了
print('======')
for item in ge1:

    print(item)   #23456789

2、生成器就是函数体中有yield关键字的函数

print('========')
普通函数

def func1(n):
     for x in range(1,n+1):
         print(x)  #1  2  3
print(func1(3))   #None
print('========')

生成器

def func2(n):

    for x in range(1, n + 1):
        print(x)
    yield
print(func2(5))  #<generator object func2 at 0x00AF6F60>
调用函数不再执行函数体,也不再获取返回值,而是提示你这是一个生成器,返回生成器地址;
这个函数变成了生成器
ge2=func2(2)
next(ge2)    # 1  2
ge3=func2(3)
print(next(ge3))    #None    yield返回值默认是None
通过next获取生成器的元素的时候,会去执行生成器对应的函数的函数体,执行遇到yield为止,并将yield后面的值(默认值None)作为返回值(元素),然后保存当前结束位置,下次获取生成器元素的时候会接着上一次结束的位置;

例如:

def func2(n):

    for x in range(1, n + 1):
        print(x)
        yield  x
ge4=func2(4)
print(next(ge4))     此次访问是x=1时
print(next(ge4))     此次访问是x=2时,且x=1已取出,即不存在于此生成器中
print(next(ge4))     此次访问是x=3时,且x=1和2已取出,即不存在于此生成器中
执行过程如下
'''
x=1 ,print(1),yield 返回值1,执行结束
x=2 ,print(2),yield 返回值2,执行结束
x=3 ,print(3),yield 返回值3,执行结束
此生成器还剩下x=4

四、文件操作

使用本地文件可以做数据的持久化(本地化)——》数据库文件、txt文件、json文件、plis他、二进制文件;

1、文件操作——读写操作

读——》取出文件中的数据
写——》将数据写到文件中
所有文件操作的过程:打开文件——》操作(读、写、保存)文件——》关闭文件

2、打开文件和关闭文件

打开文件: open(file,mode="r",encoding=utf—8)
(1)file——》文件路径,决定需要打开的是哪个文件;
绝对路径(不推荐使用)
相对路径:相对路径是相对当前py文件对应的文件夹;格式: ./相对路径
相对路径是相对当前py文件对应的文件夹的上层文件夹;格式: ../相对路径
相对路径是相对当前py文件对应的文件夹的上层文件夹的上层文件夹;格式:.../相对路径
例如: open('./text.txt',"r",encoding='utf-8')
(2)mode——》文件打开方式(不同的操作对应不同的打开方式)
"r"——》以只读形式打开文件,文本
"rb/br"——》读操作,读出来的数据是二进制形式的数据
"w"——》以写的形式打开文件
"wb/bw"——》写操作,将二进制数据写入文件
"a"——》写操作,追加
(3)encoding——》文本编码方式
utf—8:几乎支持所有的语言
gbk:只支持英文
(4)open函数的返回值,就是被打开的文件对象
(5)关闭文件: 文件.close()
例如:text.close()

3、操作文件

打开文件
f1=open('./text.txt',"r",encoding='utf-8')
读文件内容

文件.read() ——》从文件的读写位置读到文件结束,返回读到的结果;
文件.readline()——》读一行;
文件.readlines()——》返回一个列表,列表的元素是文件中每一行的内容;

content=f1.read()
print(type(content),content)   #<class 'str'>  娃哈哈wahaha
f1.close()
文件的写操作
f2=open("./text.txt","w",encoding="utf-8")

'w'——》将字符串写入文件中,完全覆盖文件原来的内容;
'wb/bw'——》将二进制写入文件中,完全覆盖文件原来的内容

f2.write('娃哈哈')    #娃哈哈1
f2.write(content+"娃哈哈2")   #娃哈哈1娃哈哈2
f2.write("wahaha")#娃哈哈1娃哈哈2wahaha

相关文章

网友评论

      本文标题:一阶段day11-01模块、迭代器、生成器、文件操作

      本文链接:https://www.haomeiwen.com/subject/jyqoaftx.html