《python基础教程》 --读书笔记(9)

模块

模块是程序

任何python程序都可以作为模块导入,导入模块多次和导入一次的结果是一样的,如果坚持多次导入,需要用到reload函数。
model1.py

# 简单模块
print("hello, python")

model2.py

import importlib
import model1 # 导入模块时程序被执行 结果: hello, python
import model1 # 再次导入,什么都没有发生
model = importlib.reload(model1) # 重新导入 结果: hello, python

__name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

在模块中定义函数

model3.py

# 包含函数的简单模块
def hello():
    if __name__ == '__main__':
        print("hello main")
    else:
        print("hello python")

if __name__ == '__main__':
    hello()   #  hello main

model4.py

import model1
model1.hello() #  hello python

模块可用

  • 将模块放在正确的位置
    site-packages目录是最佳选择,将模块放入该目录中,所有程序就都能将其导入了
import sys, pprint
# 如果你的数据结构过大,不能在一行打完,可以使用pprint模块中的pprint函数智能打印
pprint.pprint(sys.path)

# 结果展示
"""
['D:\\pythonspace\\pythontest',
 'D:\\pythonspace\\pythontest',
 'D:\\pythonspace\\pythontest\\venv\\Scripts\\python37.zip',
 'D:\\python1\\DLLs',
 'D:\\python1\\lib',
 'D:\\python1',
 'D:\\pythonspace\\pythontest\\venv',
 'D:\\pythonspace\\pythontest\\venv\\lib\\site-packages']
"""

目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,最简单的情况,放一个空的 :file:__init__.py就可以了。当然这个文件中也可以包含一些初始化代码或者为(将在后面介绍的) __all__变量赋值。
简单包布局

文件/目录描述
`\pythontest\drawing包目录
`\pythontest\drawing\__init__.py初始化drawing包
`\pythontest\drawing\model3.pymodel3模块
`\pythontest\drawing \model4.pymodel4模块

导入子模块

import drawing.model3 as m3
from drawing import (model3, model4)

m3.hello() # Hello I'm model3
model3.hello() # Hello I'm model3
model4.hello() # Hello I'm model4

探究模块

  • 使用dir
    查看模块包含的内容可以使用dir函数
import copy

print(dir(copy))
# 打印 模块外部方法
print([n for n in dir(copy) if not n.startswith("_")])
  • __all__函数
import copy

# __all__定义了模块公有接口,也就是从模块导入所有名字代表什么含义
print(copy.__all__) # ['Error', 'copy', 'deepcopy']
  • 使用help获取帮助
# help 函数
help(copy.copy)
"""
copy(x)
    Shallow copy operation on arbitrary Python objects.
    
    See the module's __doc__ string for more info.
"""
  • 文档
# 文档
print(copy.copy.__doc__)
  • 使用源代码
# 查找源码
print(copy.__file__)

标准库

1.sys
sys这个模块让你能够访问与python解释器联系紧密的变量和函数
sys模块中一些重要的函数和变量

函数/变量描述
argv命令行参数,包括脚本名称
exit([argv])退出当前程序,可选参数为给定的返回值或者错误信息
modules映射模块名字到载入模块的字典
path查找模块所在目录的目录名列表
stdin标准输入流
stdout标准输出流
stderr标准错误流

2.os
os模块提供了访问多个操作系统服务的功能
os模块中一些重要的函数和变量

函数/变量描述
environ对环境变量进行映射
system(command)在子shell中执行操作系统命令
sep路径中的分隔符
pathsep分隔路径的分隔符
linesep行分隔符

3.fileinput
fileinput模块让你能够轻松的遍历文本文件的所有行
fileinput.input 它会返回能够用于for循环遍历的对象,如果不想使用默认行为可以更改参数
基本格式
fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])
默认
fileinput.input (files=None, inplace=False, backup=’’, bufsize=0, mode=‘r’, openhook=None)

files:  #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]  
inplace:  #是否将标准输出的结果写回文件,默认不取代  
backup:  #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。  
bufsize:  #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可  
mode:  #读写模式,默认为只读  
openhook:  #该钩子用于控制打开的所有文件,比如说编码方式等;

fileinput.filename 返回当前正在处理的文件名
fileinput.lineno 返回当前行的行数,这个数值是累计的,完成上一个文件的处理并且开始处理下一个文件的时候,行数并不会重置
fileinput.filelineno 返回当前行的行数,每次处理完一个文件并且开始处理下一个文件时,行数都会重置为1
fileinput.isfirseline 在当前行是当前文件的第一行时返回真值,反之返回假值
fileinput.nextfile 会关闭当前文件,跳到下一个文件,跳过的行并不记
fileinput.close 关闭整个文件链,结束迭代
fileinput.filename函数返回当前正在处理的文件名

test.txt

java
python
shell
import fileinput

# 遍历文件每一行
def ergodic():
    for line in fileinput.input("test.txt"):
        print(line)

# 利用fileinput实现文件内容替换,并将原文件作备份
def backups():
    for line in fileinput.input("test.txt", backup = "bak", inplace=True):
        print(line.rstrip().replace("shell", "c/c++"))

4.双端队列
双端队列可通过可迭代对象比如(集合)创建

from _collections import deque

# 双端队列
q = deque(range(5))

# 队列右侧增减元素
q.append(5) # deque([0, 1, 2, 3, 4, 5])
# 队列左侧增加元素
q.appendleft(6) # deque([6, 0, 1, 2, 3, 4, 5])
# 队列左侧弹出元素
q.popleft() # deque([0, 1, 2, 3, 4, 5])
# 旋转元素
q.rotate() # deque([5, 0, 1, 2, 3, 4])
q.rotate(-1) # deque([0, 1, 2, 3, 4, 5])
q.rotate(1)# deque([5, 0, 1, 2, 3, 4])

5.time
time模块可获得当前时间,操作时间和日期,从字符串读取时间以及格式化时间为字符串

函数描述
asctime([tuple])将时间元组转换为字符串
localtime([secs])将秒数转换为日期元组,以本地时间为准
mktime(tuple)将时间元组转换为本地时间
sleep(secs)休眠secs秒
strptime(string[, format])将字符串解析为时间元组
time()当前utc时间

6.random
random模块包括返回随机数的函数,可以用于模拟或者用于产生任何随机输出程序

函数描述
random()返回0<n<=1之间的随机数n
gerrandbits(n)以长整型形式返回n个随机位
uniform(a, b)返回随机实数n,其中a<=n<b
randrange([start], stop, [step])返回range([start], stop, [step])中的随机数
choice(seq)从序列seq中返回随意元素
sample(seq, n)从序列seq中中选择n个随机独立的元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值