2018-10-31 16:09:38
模块
在解释器中,退出后在进入,原来的函数与变量会丢失。模块就是将程序语句编辑在一个文本中,这个就是所谓的脚本,程序大了之后,需要多个文件共同完成,这个就是模块。
模块,以.py为拓展名的文件;中间有定义方法(一个或者多个)
模块的名称,在全局变量中叫做:name
对于模块的导入:import module。这种方式下的导入,对于使用其中的方法需要这样做:mode = module.function1()
初始化模块是发生在import的时候。所以,一旦模块发生了变化,就需要重新执行文件。要是模块中只有一个方法需要更改,那就对这个方法进行重载:module.reload(function1)
模块中的变量会不会与全局变量冲突,一般不会,在模块中的变量为本地参数,模块的导入与方法的调用,需要使用传递参数,这个与全局参数也不一定相同,所以,一般不会出现变量命名冲突的情况。
在很多交互式会话的时候,有老师使用 from module import *
这个如果是在模块中使用的时候,最好还是不要使用这样的书写方式。
考虑到python对文件的预清除,推荐使用 from module import function as fun1
if name == “main”
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
执行当前的.py文件,模块的名字就是现在“主”,满足if的要求,会执行if下的语句;但是这个模块是被别人调用的话,这个模块名字不是“主”,“主”是调用这个模块的模块,当前这个模块只是被其他模块引用,因此,if下的语句是不会执行的。举一个例子说明下。
我有一套房子,朋友借去住,我就把钥匙给他了,他可以用家里的东西,不过有一间房间,是要人脸识别才能开的,也就是只有我能开,所以朋友是进不去的。就把它理解为隐私,或者仅仅是对自己开放的特权
模块搜索路径 6.12-6.1.3
没有研究明白,不知道怎么用。
标准模块
dir
这个函数是可以查找模块下的方法、变量、模块,比如模块名字叫a,下面有b,c,d,e
那么dir(a)=[‘b’,‘c’,‘d’,‘e’]
这个方法可以查询
builtins:这个没明白怎么回事。
包
import 包.子包.模块
使用这个模块中的方法时,需要写全。import sound.effects.echo 等同于 from sound.effects import echo
包.子包.模块.function1();
直接导入模块中的函数或者变量:导入函数echofilter()
from sound.effects.echo import echofilter
从包中导入*
all
init.py
import sound.effects.echo
import sound.effects.surround
from sound.effects import *
包内引用
from . import echo
from .. import formats
from ..filters import equalizer
多目录中的包(不常用)
path:保存__init__.py的目录名称。
输入输出
输出方式:
1、print():交互会话、执行脚本的打印
2、表达式语句:
3、write():输出到文件对象
输出的格式要求有多种方式:
1、格式化的字符串:在字符串的界定符,单双引号或者三重引号之前用 f 或者 F 开头。在这个字符串中的{}内部写上变量或者运算表达式,来达到输出的目的。下面是示例。
>>> year = 2016
>>> event = 'Referendum'
>>> f'Results of the {year} {event}'
>'Results of the 2016 Referendum'
2、str.format():这个是一种需要更多认为操作的格式方法,在{}中就是要替代的位置,不过需要提供相应的格式指令,比如输出类型,精度,位数等等。
>>> yes_votes = 42_572_654
>>> no_votes = 43_132_495
>>> percentage = yes_votes / (yes_votes + no_votes)
>>> '{:-9} YES votes {:2.2%}'.format(yes_votes, percentage)
' 42572654 YES votes 49.67%'
3、repr()、str():可以将任何值都可以转换为字符串。
这两个还是有一定的区别:str()人类可读;repr()解释器可读取;
字符串对齐填充:
1、str.rjust():右对齐,左填充
2、str.ljust():左对齐,右填充
3、str.center():中间对齐
4、str.zfill():左侧填充0
读写文件
open(filename,mode)
filename是文件名的字符串;
mode是对文件的操作方式:
‘r’:读 ;‘r+’:读写
‘w’:写
‘a’:追加内容到文件最后。
‘b’:二进制模式
对文件的操作不直接使用,采用with处理:
>>> with open('workfile') as f:
... read_data = f.read()
>>> f.closed
True
f.read(size):读取文件内容,返回字符串。读取完成返空字符串。
f.readline():读取文件行内容,直到出现换行符结束。
f.write(str):写入字符串,返回该字符串。
f.tell():这个没有明白。返回文件的当前位置。
f.seek():移动文件读取指针到指定位置。
用JSON()保存结构数据
读取内容中,直接返回的是字符串;read()
要读取数字,需要从返回的字符串中再提取有效数字;int()
json.dump():
json.dumps():将字典转换为字符串
json.loads():将字符串转换为字典
错误和异常
在学习1中已经学习过了。