当前位置:   article > 正文

从0开始学python----6_使用什么将整个模块导入也可以使用什么将模块中的标识符直接导入当前环境

使用什么将整个模块导入也可以使用什么将模块中的标识符直接导入当前环境

目录

模块

import语句

模块使用方法示例

全局变量__name__

 系统模块

from import

as

子包

闭包


声明:本文章内容均摘自mooc中的python编程基础。

模块

python提供了交互式和脚本式两种运行方式。当要执行的代码比较长、且需要重复使用时,我们通常将代码放在扩展名.py的python脚本文件中。

当我们要编写一个规模较大的程序时,如果将所有代码都放在一个脚本文件中,则不方便维护和多人协同开发。

对于可以在多个程序中重用的功能,我们也最好将其放在单独的脚本文件中,以方便多个程序通过引用该脚本文件、共享这些功能。

此时,我们需要按照代码功能的不同,将代码分门别类地放在不同的脚本文件中,这些脚本文件就是模块(Module)。

import语句

当要使用一个模块中的某些功能时,我们可以通过import方式将该模块导入。例如,假设模块A中定义了一些变量和函数,如果希望在模块B中使用,则可以在模块B中通过import将模块A导入,此时在模块B中就可以使用这些变量并调用模块A的所有函数。

语法格式:

  1. import module1
  2. import module2
  3. ...
  4. imopot modulen
  5. import module1,module2,...,moduleN

模块使用方法示例

  1. fibo.py
  2. def PrintFib(n): #定义函数PrintFib,输出斐波那契数列的前n项
  3. a,b=1,1
  4. for i in range(1,n+1): #i的取值一次为1,2,...,n
  5. print(a,end='') #输出斐波那契数列的第i项
  6. a,b=b,a+b;
  7. print() #输出一个换行
  8. def GetFib(n): #定义函数GetFib,返回斐波那契数列的前n项
  9. fib=[] #定义一个空列表fib
  10. a,b=1,1
  11. for i in range(1,n+1):
  12. fib.append(a)
  13. a,b=b,a+b
  14. return fib
  15. testfibo.py
  16. import fibo #导入fibo模块
  17. fibo.PrintFib(5) #调用fibo模块中的PrintFib函数,输出斐波那契数列的前五项
  18. ls=fibo.GetFib(5)
  19. print(ls)

全局变量__name__

每个模块中都有一个全部变量__name__。

__name__的作用是获取当前模块的名称,如果当前模块是单独执行的,则其__name__的值就是__main__;否则,如果是作为模块导入,则其__name__的值就是模块名字。

例如上分代码:在fibo.py中执行中执行print(__name__),则屏幕上输出:__main__;而在testfibo.py的脚本文件中import fibo,则会在屏幕上输出。

修改后的fibo.py脚本文件:

  1. fibo.py
  2. def PrintFib(n): #定义函数PrintFib,输出斐波那契数列的前n项
  3. a,b=1,1
  4. for i in range(1,n+1): #i的取值一次为1,2,...,n
  5. print(a,end='') #输出斐波那契数列的第i项
  6. a,b=b,a+b;
  7. print() #输出一个换行
  8. def GetFib(n): #定义函数GetFib,返回斐波那契数列的前n项
  9. fib=[] #定义一个空列表fib
  10. a,b=1,1
  11. for i in range(1,n+1):
  12. fib.append(a)
  13. a,b=b,a+b
  14. return fib
  15. if__name__=='__main__': #只有单独执行fibo.py时该条件才成立
  16. PrintFib(10)
  17. ls=GetFib(10)
  18. ptint(ls) #输出列表中ls的元素

当执行fibo.py时,将在屏幕上输出如下结果:

  1. 1 1 2 3 5 8 13 21 34 55
  2. [1,1,2,3,5,8,13,21,34,55]

 当执行testfibo.py时,将在屏幕上输出如下结果:

  1. 1 1 2 3 5
  2. [1,1,2,3,5]

 系统模块

可以直接导入 系统提供的模块,使用其中的功能

例:通过sys模块获取运行Python脚本时传入的参数

修改后的testfibo.py脚本文件:

  1. import fibo
  2. import sys
  3. n=int(sys.argv[1]) #通过sys模块的argv获取执行脚本时传入的参数
  4. fibo.PrintFib(n)
  5. ls=fibo.GetFib(n)
  6. print(ls)

from import

除了使用import将整个模块导入,也可以使用from import将模块中的标识符(变量名、函数名)直接导入当前环境,这样我们在访问这些标识符时就不再需要指定模块名。

语法格式:

from 模块名 import 标识符1,标识符2,...,标识符N

例: 直接导入模块中的标识符

  1. from fibo import PrintFib,GetFib #导入fibo模块中的PrinFib和GetFib
  2. PrintFib(5) #忽略fibo模块名直接调用PrintFib函数
  3. ls=GetFib(5)
  4. print(ls)

提示:如果导入一个模块中的所有标识符,也可以使用“from 模块名 import* ”的方式。例如,对于“from fibo import PrintFib GetFib”,可以直接改为“from fibo import”

如果一个模块定义了列表__all__,则from 模块名 import* 语句智能导入__all__列表中存在的标识符。例如,对于fibo.py脚本文件,如果在第一行加入__all__列表的定义__all__=['PrintFib'],则通过“from fibo import* ”只能导入fibo模块中的PrintFib,而不会导入GetFib。

as

导入的标识符过长,可以使用as为模块或者标识符起别名。例如:

  1. import fibo as f #导入fibo模块,并为fibo起了别名f
  2. f.PrintFib(5) #调用fibo模块中的PrintFib函数

Python中的包(Package)的作用与操作系统中文件夹的作用相似,利用包可以将多个关系密切的模块组成在一起,一方面方便进行各脚本文件的管理,另一方面可以有效避免模块明面冲突问题。

定义一个包,就是创建一个文件夹并在该文件夹下创建一个__init__.py文件,文件夹的名字就是包名。

子包

另外,可以根据需要在该文件夹下再创建子文件夹,子文件夹中创建一个__init__.py文件,则又形成了一个子包。

模块可以放在任何一个包或子包中,在导入模块时需要指定所在的包和子包的名字。例如,如果要导入包A中的模块B,则需要使用“import A.B”。

示例:

  1. sound/顶级包
  2. __init__.py #初始化这个声音包
  3. formats #文件格式转换子包
  4. __init__.py
  5. wavread.py
  6. wavwrite.py
  7. aiffread.py
  8. aiffwrite.py
  9. auread.py
  10. auwrite.py
  11. effects.py
  12. ...
  13. effcets/子包
  14. __init__.py
  15. echo.py

如果要使用sound包中的echo模块,则可以通过下面方式导入:

import sound.effects.ech

假设在ehco模块中有一个echo模块中有一个echofilter函数,则调用该函数时必须指定完整的路径名字,即:

import sound.effects.echo.echofilter(实参列表)

也开始使用from import的方式导入包中的模块(推荐),如:

  1. from sound.effects import echo
  2. echo.echofilter(实参列表) #不需要加包名

也可以使用from import直接导入模块中的标识符:

  1. from sound.effects.echo.import.echofilter
  2. echofilter(实参) #可以直接调用函数

闭包

闭包是一种特殊情况,外层函数在结束时会发现其定义的局部变量将会在内层函数中使用,此时外层函数就会把这些自由变量绑定到内层函数。

所谓闭包,实际上就是将内层函数的代码以及自由变量(外层函数定义,但会由内层函数使用)打包在一起了,例如:

  1. def outer(x): #定义函数outer
  2. y=10 #定义局部变量y并赋为10
  3. def inner(z): #在outer函数中定义
  4. nonlocal x,y #nonloal声明
  5. return x+y+z
  6. return inner
  7. f=outer(5)
  8. g=outer(50)
  9. print('f(20)的值为:',f(20))
  10. print('g(20)的值为:',g(20))
  11. print('f(30)的值为:',f(30))
  12. print('g(30)的值为:',g(30))
  13. 输出:
  14. f(20)的值为:35
  15. g(20)的值为:80
  16. f(30)的值为:45
  17. g(30)的值为:90

 闭包的主要作用在于可以封存函数执行的上下文环境。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/833461
推荐阅读
相关标签
  

闽ICP备14008679号