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

一、模块

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容

  • 一、recode 1.匿名函数 函数名 = lambda 参数列表:返回值参数列表: 变量名1,变量名2 函数体是...
    大漠判官1阅读 212评论 0 0
  • 读完小伙伴们的月总结,内心感慨万千。最初只是想了解小伙伴们在这个月里又做了什么,打算做什么,可读完,竟像看了很多本...
    vellygao阅读 441评论 2 3
  • 人生固有几件大事:事业、婚姻、家庭、健康,今天就来聊聊婚姻。 提到婚姻,大部分人都抱有“不能嫁给穷人”得...
    鱿鱼干味阅读 350评论 0 1
  • 我越是想挣脱 越无法离开 我 越是想解决的她 却又无从落手 那是遍体鳞伤的痛苦 是满目疮痍的渴望 那是一种 痒
    安如山ls阅读 172评论 0 0
  • 班里刚转来一个同学,可能不太适应,上课听讲不专注,做题很慢错的还不少,怎么办呢?我着急。 星期一的数学课上,一道题...
    娟秀人生阅读 505评论 1 0