来自python的【模块、函数作用域(global、nonlocal)】

本文详细介绍了Python中的模块导入方式,包括`import`和`from...import`,并探讨了模块的搜索路径和初始化。此外,还深入讲解了参数作用域,强调了`global`和`nonlocal`关键字在修改全局和嵌套作用域变量时的作用,建议减少全局变量的使用以降低代码耦合度。
摘要由CSDN通过智能技术生成

模块定义

一个包含所有定义的函数和变量的文件,后缀名是.py,模块可以被别的程序引入,被调用,如同库一样。

import

  • 使用import来引入模块,每个模块中有着自己的内容,同样引入别的.py模块 也是使用import 进行调用。
  • 当解释器遇到import语句,会优先搜索当前的搜索路径,
  • 一个模块只会被导入一次,无论执行多少遍
  • 搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量,做一个简单的实验,在交互式解释器中,

from…import

  • 从整体模块中导入指定的模块from modname import name1[,name2.。。]
  • 从整体模块中导入所有的模块 from modname import *

模块深入

  • 模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。

  • 每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。也就是模块内部的变量并不影响外部,该是全局还是全局变量

  • 模块中也可以导入模块

  • 也可以只导入模块中特定的部分form modname import one,two..,比如函数、变量等。这个时候的modname是没有被导入如符号表中,只有one,two被导入了

  • from modname import * 导入模块中的所有内容,这将把所有的名字都导入进来,但是那些由单一下划线(_)开头的名字不在此例。因为引入的其它来源的命名,很可能覆盖了已有的定义。

>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
  • __name__属性 :能够使得模块中的某一内容,在被别人引用的时候不被调用。每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。,每一个模块都有__name__属性
if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')
  • dir(modname)内置函数,能够找到模块内定义的所有名称,返回字符串列表,如果dir()没有给定参数,那么多就会列出当前定义的属性列表的所有名称。
>>> import fibo, sys
>>> dir(fibo)
['__name__', 'fib', 'fib2']
>>> dir(sys)  
['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__',
 '__package__', '__stderr__', '__stdin__', '__stdout__',
 '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe',
 '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv',
 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder',
 'call_tracing', 'callstats', 'copyright', 'displayhook',
 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix',
 'executable', 'exit', 'flags', 'float_info', 'float_repr_style',
 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags',
 'getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit',
 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettotalrefcount',
 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',
 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path',
 'path_hooks', 'path_importer_cache', 'platform'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值