Python3模块

本文详细介绍了Python模块的导入方式(import和from...import),包的概念及管理,如何利用__name__属性控制模块执行,以及dir函数的使用。通过实例演示了模块导入的灵活性和包组织的优势。
摘要由CSDN通过智能技术生成
#!usr/bin/python
#coding=UTF-8
'''
Python3模块
'''

'''
模块:
    模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。
    模块可以被别的程序引入,以使用该模块中的函数等功能。
    模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。
'''
import sys          #引入 python 标准库中的 sys.py 模块;
print(sys.argv)     #输出 ['E:/Program Files/pythonProject/python/15module/15module_file.py']
for i in sys.argv:  #sys.argv 是一个包含命令行参数的列表。
    print(i)    #输出 E:/Program Files/pythonProject/python/15module/15module_file.py
print('python路径是:',sys.path) #sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表。
#输出 python路径是: ['E:\\Program Files\\pythonProject\\python\\15module', 'E:\\Program Files\\pythonProject\\python', 'E:\\Program Files\\PyCharm2020\\plugins\\python\\helpers\\pycharm_display', 'E:\\Program Files\\Python3.9.2\\python39.zip', 'E:\\Program Files\\Python3.9.2\\DLLs', 'E:\\Program Files\\Python3.9.2\\lib', 'E:\\Program Files\\Python3.9.2', 'E:\\Program Files\\Python3.9.2\\lib\\site-packages', 'E:\\Program Files\\PyCharm2020\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

'''
import 语句:想使用 Python 源文件,只需在另一个源文件里执行 import 语句
    语法:import module1[, module2[,... moduleN]
    
    1、一个模块只会被导入一次,不管你执行了多少次import。
    2、当我们使用import语句时,Python的搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。
        搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量
    3、模块是可以导入其他模块的。
'''
import support
support.print_func('Python3')   #输出 Hello :  Python3

import fibo
print(fibo.fibonacci(10))   #输出 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

#如果要经常使用一个函数,可以把它赋给一个本地的名称
fib = fibo.fibonacci
print(fib(6))   #输出 [0, 1, 1, 2, 3, 5]
print(fib(5))   #输出 [0, 1, 1, 2, 3]

'''
from...import语句
    from 语句让你从模块中导入一个指定的部分到当前命名空间中
    语法:from modname import name1[, name2[, ... nameN]]
'''
from fibo import fibonacci,print_all
print(fibonacci(7)) #输出 [0, 1, 1, 2, 3, 5, 8]
print_all('Python') #输出 print_all: Python
#print_all2('Python2')   #输出 NameError: name 'print_all2' is not defined

#由此可见:from...import 不会把整个fibo模块导入到当前的命名空间中,它只会将fibo里的fibonacci函数,print_all函数引入进来。

'''
from...import * 语句
    把一个模块的所有内容全都导入到当前的命名空间
    语法:from modname import *
    这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
'''
from fibo import *
print_all2('Python3')   #输出 print_all2: Python3

'''
__name__属性
    一个模块被另一个程序第一次引入时,其主程序将运行。
    如果我们想在模块被引入时,模块中的某一程序块不执行,
    我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
    
    每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。
'''
if __name__ == '__main__':
    print('程序自己运行')     #输出 程序自己运行
else:
    print('程序被外部引入')    #如果被引入时,则输出 程序被外部引入

'''
dir函数:内置的函数 dir() 可以找到模块内定义的所有名称,以一个字符串列表的形式返回;
'''
import fibo
print(dir(fibo))
#输出 ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fibonacci', 'print_all', 'print_all2']

import fibo
fib = fibo.fibonacci
print(dir())    #如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称:
#输出 ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fibo', 'fibonacci', 'i', 'print_all', 'print_all2', 'support', 'sys']


'''
包
    包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。
    比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。
    
    在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。
    目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。
'''

#这将会导入子模块:sound.round。 必须使用全名去访问
import sound.round
sound.round.print_round('python')   #输出 Hello sound round:  python
#导入子模块:round
from sound import round
round.print_round('Python2')    #输出 Hello sound round:  Python2
#直接导入一个函数或者变量
from sound.round import print_round
print_round('Python3')  #输出 Hello sound round:  Python3

'''
from package import item 这种形式的时候,对应的 item 既可以是包里面的子模块(子包),或者包里面定义的其他名称,比如函数,类或者变量。
import 语法会首先把 item 当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,抛出一个 :exc:ImportError 异常。
反之,如果使用形如 import item.subitem.subsubitem 这种导入形式,除了最后一项,都必须是包,
而最后一项则可以是模块或者是包,但是不可以是类,函数或者变量的名字。
'''

fibo.py文件代码

#!/usr/bin/python3
# Filename: fibo.py
#输出斐波那契数列,num为输出几个
def fibonacci(num):
    list1 = []
    a,b=0,1
    i = 0
    while i < num:
        list1.append(a)
        a,b = b,a+b
        i = i + 1
    return list1

def print_all(str):
    print('print_all:',str)

def print_all2(str):
    print('print_all2:',str)

support.py文件代码:

#!/usr/bin/python3
# Filename: support.py

if __name__ == '__main__':
    print('程序自己运行')
else:
    print('程序被外部引入')

def print_func(str):
    print("Hello : ", str)
    return

包sound中round.py文件代码:

#!/usr/bin/python3
# Filename: round.py


def print_round(str):
    print("Hello sound round: ", str)
    return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风之梦丽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值