python总结-模块

1、模块是最高级别的程序组织单元

(1)在模块中,我们不但可以直接存放变量,还能存放函数,还能存放类。


image.png

(2)每一个单独的py文件,本质上都是一个模块。
(3)模块主要有两种方式,一种是自己建立模块并使用,另外一种是使用他人共享的模块。
An example:

a = '我是模块中的变量a'

def hi():
    a = '我是函数里的变量a'
    print('函数“hi”已经运行!')

class Go2:
    a = '我是类2中的变量a'
    def do2(self):
        print('函数“do2”已经运行!')

print(a)  # 打印变量“a”

hi()  # 调用函数“hi”

A = Go2()  # 实例化“Go2”类
print(A.a)  # 打印实例属性“a”
A.do2()  # 调用实例方法“do2”
2、模块相关的常用语句

(1)import
import语句导入一个模块,最主要的目的并不是运行模块中的执行语句,而是为了利用模块中已经封装好的变量、函数、类。
test.py

a = '我是模块中的变量a'

def hi():
    a = '我是函数里的变量a'
    print('函数“hi”已经运行!')

class Go2:
    a = '我是类2中的变量a'
    def do2(self):
        print('函数“do2”已经运行!')

main.py

# 这是主程序main.py
# 请阅读代码注释

import test  # 导入test模块

print(test.a)  # 使用“模块.变量”调用模块中的变量

test.hi()  # 使用“模块.函数()”调用模块中的函数

A = test.Go2()  # 使用“变量 = 模块.类()”实例化模块中的类
print(A.a)  # 实例化后,不再需要“模块.”
A.do2()  # 实例化后,不再需要“模块.”

import语句还有一种用法是import…as…。比如我们觉得import story太长,就可以用import story as s语句,意思是为“story”取个别名为“s”
当我们需要同时导入多个模块时,可以用逗号隔开。比如import a,b,c可以同时导入“a.py,b.py,c.py”三个文件。
(2)from...import...


image.png
from test import a,hi,Go2

print(a)  # 打印变量“a”

hi()  # 调用函数“hi”

A = Go2()  # 实例化“Go2”类
print(A.a)  # 打印实例属性“a”
A.do2()  # 调用实例方法“do2”

不过,一般情况下,我们不要为了图方便直接使用【from xx模块 import 】的形式。
这是因为,
模块.xx的调用形式能通过阅读代码一眼看出是在调用模块中的变量/函数/方法,而去掉模块.*后代码就不是那么直观了。
(3) if __name__ == '__main__'
程序的入口:对于Python和其他许多编程语言来说,程序都要有一个运行入口。
在Python中,当我们在运行某一个py文件,就能启动程序 ——— 这个py文件就是程序的运行入口。
简单情况:

image.png

复杂情况:
image.png

当我们有了一大堆py文件组成一个程序的时候,为了【指明】某个py文件是程序的运行入口,我们可以在该py文件中写出这样的代码:
image.png

image.png

当xx.py文件被直接运行时,代码块②将被运行

import story

if __name__ == '__main__':
    print(story.sentence)
    story.mountain()
    A = story.Temple()
    print(A.sentence)
    A.reading()
    print()

xx.py文件作为模块是被其他程序导入时,代码块②不被运行。

#module a
a = '我是模块中的变量a'

def hi():
    a = '我是函数里的变量a'
    print('函数“hi”已经运行!')

class Go1:  # 如果没有继承的类,class语句中可以省略括号,但定义函数的def语句括号不能省
    a = '我是类1中的变量a'
    @classmethod
    def do1(cls):
        print('函数“do1”已经运行!')

class Go2:
    a = '我是类2中的变量a'
    def do2(self):
        print('函数“do2”已经运行!')

if __name__ == '__main__':
    print('是主模块的时候才会执行以下语句:')
    print(a)
    hi()
    b = Go2()
    print(Go2.a)
    b.do2()


#module B
import A
#结果为无

(4)使用他人模块

import time   
print('第一句话,过两秒出现第二句。')
time.sleep(2)
print('第二句话。')


import random  
a = random.randint(0,100)  # 随机从0-100之间抽取一个数字
print(a)
3、自学模块

学习模块的核心是搞清楚模块的功能,也就是模块中的函数和类方法有什么作用,以及具体使用案例长什么样。
官方文档:https://docs.python.org/3.6/library/random.html](https://docs.python.org/3.6/library/random.html

image.png

CSV 模块的学习

import语句导入csv模块,然后用dir()函数看看它里面有什么东西:
import csv
for i in dir(csv):
    print(i)
image.png
import csv

with open('test.csv', newline = '', encoding = 'utf-8')  as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
print('程序结束')
#参数encoding = 'utf-8'防止出现乱码
#newline是为了解决写入时新增行与行之间的一个空白行问题。
image.png
import csv #导入模块
with open("test.csv", "a", newline="", encoding = "utf-8") as f:
    writer = csv.writer(f)
    writer.writerow([1,2,3,4,5]) #注意是writerow而不是writerrow
    writer.writerow([6,7,8,9,10])
image.png

你可能感兴趣的:(python总结-模块)