一、实验目的
- 解释器
- 模块的导入
- 包
- 默认/第三方模块介绍
- 命令行参数
二、知识要点
1.解释器
在实验1
中我们解释了在linux
系统下解释器的使用,在本文中我想通过学习Win32
系统中解释器来进行复习。Python的编程模式分为两种:交互式
,脚本式
,我们可以通过Win+R
在运行框中输入cmd
来启动命令提示符,当我们配置好Python环境时在命令提示符中输入python
并按下enter
此时即可启动Python的解释器,如图所示:
在这个窗口中输入python语句就可以直接得到运行的结果,这就是交互式编程。而我们通过记事本或者其他文本编辑器事先在文档中输入Python语句并保存为.py
文件,通过命令提示符调用该文件模式成为脚本式,例如,我在路径:D:\\python
中保存了一个名为hello.py
的脚本文件,通过:
可以发现Python解释器输出了脚本的内容。
2.模块
当我们退出解释器再进入时,我们定义的所有方法和变量就全部消失了,为此Python提供了一个方法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件就称之为模块
。
1 | import sys |
我们通过命令提示符输入:
1 | python module.py 1 2 |
输出为:
1 | 命令行参数如下: |
其中:
2.1 import
想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:1
import module1[, module2[,... moduleN]
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。例如我们创建一个print_f
模块:1
2
3def print_f( par ):
print ("Hello : ", par)
return
将上述文件保存为print_f.py
,在同一目录创建新脚本test.py
,在脚本中输入:1
2
3
4
5# 导入模块
import print_f
# 调用模块中的函数
print_f.print_f("hello")
运行会输出:1
Hello : hello
2.2 import……from
语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:1
from modname import name1[, name2[, ... nameN]]
我们创建一个名为Tmodule.py
的模块,在其中写入如下代码:1
2
3
4
5
6def module_1(var):
print("模块一已调用", var)
def module_2(var):
print("模块二已调用", var)
在同一目录创建test.py
,在test.py
脚本中输入:1
2
3
4from Tmodule import module_1
module_1(1)
module_2(1)
运行结果为:1
2
3
4
5模块一已调用 1
Traceback (most recent call last):
File "F:/Python/12/test.py", line 8, in <module>
module_2(1)
NameError: name 'module_2' is not defined
可以发现,通过from……import
语句,引入了Tmodule
模块中的module_1
函数而未引入module_2
函数。
2.3 __name__
属性
一个模块被另一个程序第一次引入时,其主程序将运行,而如果我们想在模块被引入的时候模块中的某一程序块不执行,我们可以使用__name__
属性来使该程序块仅在该模块自身运行时运行,例如我们在目录下创建name.py
,在其中输入:1
2
3
4if __name__ == '__main__':
print("我正在运行")
else:
print("我来自其他模块")
我们执行该脚本,会输出我正在运行
,如果我们在另一脚本中调用该模块:import name
会输出我来自其他模块
2.4 dir()
函数
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:
例如我们在test.py
中引入上文创建的所有脚本:1
2
3
4
5
6
7
8
9import name
import module
import Tmodule
import Delimiter
print(dir(name))
print(dir(module))
print(dir(Tmodule))
print(dir(Delimiter))
在运行的时候会输出:1
2
3
4
5*
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'i', 'sys']
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'module_1', 'module_2']
['Less_d', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'mult_d', 'plus_d']
dir()
函数不仅仅能显示用户自定义模块中的名称,只要是一个模块,dir()
函数都可显示。
3.包
包是一种管理 Python 模块命名空间的形式,采用”点模块名称”。他能有效的避免不同库之间的模块重名的情况,如下图的目录中:
目录只有包含一个叫做__init__.py
的文件才会被认作是一个包,最简单的情况,放一个空的文件__init__.py
就可以了。用户可以每次只导入一个包里面的特定模块,比如:1
import people.type.color
这将会导入子模块:people.type.color
。 他必须使用全名去访问:1
people.type.color.eye(input, output)
还有一种导入子模块的方法是:1
from people.type import color
这同样会导入子模块: color
,并且他不需要那些冗长的前缀,所以他可以这样使用:1
color.eye(input,output)
还有一种变化就是直接导入一个函数或者变量:1
from people.type.color import eye
同样的,这种方法会导入子模块: color
,并且可以直接使用他的 eye()
函数:1
eye(input,output)
三、实验内容
1.分隔符
- 代码:
1 | # "" |
- 结果:
我们通过在解释器或者其他脚本中输入:1
2
3
4
5import Delimiter
Delimiter.plus_d(10)
Delimiter.Less_d(10)
Delimiter.mult_d(10)
输出为:1
2
3++++++++++
----------
**********
四、实验结果
1.下载文件程序
- 代码:
1 | import requests |
- 结果:
1 | Enter a URL: https://codeload.github.com/iissnan/hexo-theme-next/zip/v5.1.4 |
敲击回车文件开始下载。
下一篇:13.Collections模块
上一篇:11.面向对象
目 录:Python学习