#!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