当前位置: 首页 > news >正文

企业网站免费认证微信制作小程序的软件

企业网站免费认证,微信制作小程序的软件,电商网站建设精准扶贫的目的,设计公司企业画册6模块 退出 Python 解释器后#xff0c;再次进入时#xff0c;之前在 Python 解释器中定义的函数和变量就丢失了。因此#xff0c;编写较长程序时#xff0c;最好用文本编辑器代替解释器#xff0c;执行文件中的输入内容#xff0c;这就是编写 脚本 。随着程序越来越长再次进入时之前在 Python 解释器中定义的函数和变量就丢失了。因此编写较长程序时最好用文本编辑器代替解释器执行文件中的输入内容这就是编写 脚本 。随着程序越来越长为了方便维护最好把脚本拆分成多个文件。编写脚本还一个好处不同程序调用同一个函数时不用把函数定义复制到各个程序。 为实现这些需求Python 把各种定义存入一个文件在脚本或解释器的交互式实例中使用。这个文件就是 模块 模块中的定义可以 导入 到其他模块或 主 模块在顶层和计算器模式下执行脚本中可访问的变量集。 模块是包含 Python 定义和语句的文件。其文件名是模块名加后缀名 .py 。在模块内部通过全局变量 __name__ 可以获取模块名即字符串。例如用文本编辑器在当前目录下创建 fibo.py 文件输入以下内容 # Fibonacci numbers moduledef fib(n): # write Fibonacci series up to na, b 0, 1while a n:print(a, end )a, b b, abprint()def fib2(n): # return Fibonacci series up to nresult []a, b 0, 1while a n:result.append(a)a, b b, abreturn result现在进入 Python 解释器用以下命令导入该模块 import fibo此操作不会直接把 fibo 中定义的函数名称添加到当前 namespace 中请参阅 Python 作用域和命名空间 了解详情它只是将模块名称 fibo 添加到那里。 使用该模块名称你可以访问其中的函数: fibo.fib(1000) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987fibo.fib2(100) [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]fibo.__name__ fibo如果经常使用某个函数可以把它赋值给局部变量 fib fibo.fibfib(500) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 3776.1. 模块详解 模块包含可执行语句及函数定义。这些语句用于初始化模块且仅在 import 语句 第一次 遇到模块名时执行。[1] (文件作为脚本运行时也会执行这些语句。) 每个模块都有自己的私有命名空间它会被用作模块中定义的所有函数的全局命名空间。 因此模块作者可以在模块内使用全局变量而不必担心与用户的全局变量发生意外冲突。 另一方面如果你知道要怎么做就可以通过与引用模块函数一样的标记法 modname.itemname 来访问一个模块的全局变量。 模块可以导入其他模块。 根据惯例可以将所有 import 语句都放在模块或者也可以说是脚本的开头但这并非强制要求。 如果被放置于一个模块的最高层级则被导入的模块名称会被添加到该模块的全局命名空间。 还有一种 import 语句的变化形式可以将来自某个模块的名称直接导入到导入方模块的命名空间中。 例如: from fibo import fib, fib2fib(500) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377这条语句不会将所导入的模块的名称引入到局部命名空间中因此在本示例中fibo 将是未定义的名称。 还有一种变体可以导入模块内定义的所有名称 from fibo import *fib(500) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377这种方式会导入所有不以下划线_开头的名称。大多数情况下不要用这个功能这种方式向解释器导入了一批未知的名称可能会覆盖已经定义的名称。 注意一般情况下不建议从模块或包内导入 *因为这项操作经常让代码变得难以理解。不过为了在交互式编译器中少打几个字这么用也没问题。 模块名后使用 as 时直接把 as 后的名称与导入模块绑定。 import fibo as fibfib.fib(500) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377与 import fibo 一样这种方式也可以有效地导入模块唯一的区别是导入的名称是 fib。 from 中也可以使用这种方式效果类似 from fibo import fib as fibonaccifibonacci(500) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377备注 为了保证运行效率每次解释器会话只导入一次模块。如果更改了模块内容必须重启解释器仅交互测试一个模块时也可以使用 importlib.reload()例如 import importlib; importlib.reload(modulename)。 6.1.1. 以脚本方式执行模块 可以用以下方式运行 Python 模块 python fibo.py arguments这项操作将执行模块里的代码和导入模块一样但会把 __name__ 赋值为 __main__。 也就是把下列代码添加到模块末尾 if __name__ __main__:import sysfib(int(sys.argv[1]))这个文件既能被用作脚本又能被用作一个可供导入的模块因为解析命令行参数的那两行代码只有在模块作为“main”文件执行时才会运行 $ python fibo.py 50 0 1 1 2 3 5 8 13 21 34当这个模块被导入到其它模块时那两行代码不运行 import fibo这常用于为模块提供一个便捷的用户接口或用于测试把模块作为执行测试套件的脚本运行。 6.1.2. 模块搜索路径 当导入一个名为 spam 的模块时解释器首先会搜索具有该名称的内置模块。 这些模块的名称在 sys.builtin_module_names 中列出。 如果未找到它将在变量 sys.path 所给出的目录列表中搜索名为 spam.py 的文件。 sys.path 是从这些位置初始化的: 被命令行直接运行的脚本所在的目录或未指定文件时的当前目录。 PYTHONPATH 目录列表与 shell 变量 PATH 的语法一样。 依赖于安装的默认值按照惯例包括一个 site-packages 目录由 site 模块处理。 更多细节请参阅 sys.path 模块搜索路径的初始化。 备注 在支持符号链接的文件系统中“被命令行直接运行的脚本所在的目录”是符号链接最终指向的目录。换句话说符号链接所在的目录并 没有 被添加至模块搜索路径。 初始化后Python 程序可以更改 sys.path。脚本所在的目录先于标准库所在的路径被搜索。这意味着脚本所在的目录如果有和标准库同名的文件那么加载的是该目录里的而不是标准库的。这一般是一个错误除非这样的替换是你有意为之。详见 标准模块。 6.1.3. “已编译的” Python 文件 为了快速加载模块Python 把模块的编译版本缓存在 __pycache__ 目录中文件名为 module.version.pycversion 对编译文件格式进行编码一般是 Python 的版本号。例如CPython 的 3.3 发行版中spam.py 的编译版本缓存为 __pycache__/spam.cpython-33.pyc。这种命名惯例让不同 Python 版本编译的模块可以共存。 Python 对比编译版与源码的修改日期查看编译版是否已过期是否要重新编译。此进程完全是自动的。此外编译模块与平台无关因此可在不同架构的系统之间共享相同的库。 Python 在两种情况下不检查缓存。一从命令行直接载入的模块每次都会重新编译且不储存编译结果二没有源模块就不会检查缓存。为了让一个库能以隐藏源代码的形式分发通过将所有源代码变为编译后的版本编译后的模块必须放在源目录而非缓存目录中并且源目录绝不能包含同名的未编译的源模块。 给专业人士的一些小建议 在 Python 命令中使用 -O 或 -OO 开关可以减小编译模块的大小。-O 去除断言语句-OO 去除断言语句和 __doc__ 字符串。有些程序可能依赖于这些内容因此没有十足的把握不要使用这两个选项。“优化过的”模块带有 opt- 标签并且文件通常会一小些。将来的发行版或许会改进优化的效果。 从 .pyc 文件读取的程序不比从 .py 读取的执行速度快.pyc 文件只是加载速度更快。 compileall 模块可以为一个目录下的所有模块创建 .pyc 文件。 本过程的细节及决策流程图详见 PEP 3147。 6.2. 标准模块 Python 自带一个标准模块的库它在 Python 库参考此处以下称为库参考 里另外描述。 一些模块是内嵌到编译器里面的 它们给一些虽并非语言核心但却内嵌的操作提供接口要么是为了效率要么是给操作系统基础操作例如系统调入提供接口。 这些模块集是一个配置选项 并且还依赖于底层的操作系统。 例如winreg 模块只在 Windows 系统上提供。一个特别值得注意的模块 sys它被内嵌到每一个 Python 编译器中。sys.ps1 和 sys.ps2 变量定义了一些字符它们可以用作主提示符和辅助提示符: import syssys.ps1sys.ps2 ... sys.ps1 C C print(Yuck!) Yuck! C只有解释器用于交互模式时才定义这两个变量。 变量 sys.path 是字符串列表用于确定解释器的模块搜索路径。该变量以环境变量 PYTHONPATH 提取的默认路径进行初始化如未设置 PYTHONPATH则使用内置的默认路径。可以用标准列表操作修改该变量 import syssys.path.append(/ufs/guido/lib/python)6.3. dir() 函数 内置函数 dir() 用于查找模块定义的名称。返回结果是经过排序的字符串列表 import fibo, sysdir(fibo) [__name__, fib, fib2]dir(sys) [__breakpointhook__, __displayhook__, __doc__, __excepthook__,__interactivehook__, __loader__, __name__, __package__, __spec__,__stderr__, __stdin__, __stdout__, __unraisablehook__,_clear_type_cache, _current_frames, _debugmallocstats, _framework,_getframe, _git, _home, _xoptions, abiflags, addaudithook,api_version, argv, audit, base_exec_prefix, base_prefix,breakpointhook, 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, get_asyncgen_hooks, get_coroutine_origin_tracking_depth,getallocatedblocks, getdefaultencoding, getdlopenflags,getfilesystemencodeerrors, getfilesystemencoding, getprofile,getrecursionlimit, getrefcount, getsizeof, getswitchinterval,gettrace, hash_info, hexversion, implementation, int_info,intern, is_finalizing, last_traceback, last_type, last_value,maxsize, maxunicode, meta_path, modules, path, path_hooks,path_importer_cache, platform, prefix, ps1, ps2, pycache_prefix,set_asyncgen_hooks, set_coroutine_origin_tracking_depth, setdlopenflags,setprofile, setrecursionlimit, setswitchinterval, settrace, stderr,stdin, stdout, thread_info, unraisablehook, version, version_info,warnoptions]没有参数时dir() 列出当前已定义的名称 a [1, 2, 3, 4, 5]import fibofib fibo.fibdir() [__builtins__, __name__, a, fib, fibo, sys]注意它列出所有类型的名称变量模块函数……。 dir() 不会列出内置函数和变量的名称。这些内容的定义在标准模块 builtins 中 import builtinsdir(builtins) [ArithmeticError, AssertionError, AttributeError, BaseException,BlockingIOError, BrokenPipeError, BufferError, BytesWarning,ChildProcessError, ConnectionAbortedError, ConnectionError,ConnectionRefusedError, ConnectionResetError, DeprecationWarning,EOFError, Ellipsis, EnvironmentError, Exception, False,FileExistsError, FileNotFoundError, FloatingPointError,FutureWarning, GeneratorExit, IOError, ImportError,ImportWarning, IndentationError, IndexError, InterruptedError,IsADirectoryError, KeyError, KeyboardInterrupt, LookupError,MemoryError, NameError, None, NotADirectoryError, NotImplemented,NotImplementedError, OSError, OverflowError,PendingDeprecationWarning, PermissionError, ProcessLookupError,ReferenceError, ResourceWarning, RuntimeError, RuntimeWarning,StopIteration, SyntaxError, SyntaxWarning, SystemError,SystemExit, TabError, TimeoutError, True, TypeError,UnboundLocalError, UnicodeDecodeError, UnicodeEncodeError,UnicodeError, UnicodeTranslateError, UnicodeWarning, UserWarning,ValueError, Warning, ZeroDivisionError, _, __build_class__,__debug__, __doc__, __import__, __name__, __package__, abs,all, any, ascii, bin, bool, bytearray, bytes, callable,chr, classmethod, compile, complex, copyright, credits,delattr, dict, dir, divmod, enumerate, eval, exec, exit,filter, float, format, frozenset, getattr, globals, hasattr,hash, help, hex, id, input, int, isinstance, issubclass,iter, len, license, list, locals, map, max, memoryview,min, next, object, oct, open, ord, pow, print, property,quit, range, repr, reversed, round, set, setattr, slice,sorted, staticmethod, str, sum, super, tuple, type, vars,zip]6.4. 包 包是通过使用“带点号模块名”来构造 Python 模块命名空间的一种方式。 例如模块名 A.B 表示名为 A 的包中名为 B 的子模块。 就像使用模块可以让不同模块的作者不必担心彼此的全局变量名一样使用带点号模块名也可以让 NumPy 或 Pillow 等多模块包的作者也不必担心彼此的模块名冲突。 假设要为统一处理声音文件与声音数据设计一个模块集“包”。声音文件的格式很多通常以扩展名来识别例如.wav.aiff.au因此为了不同文件格式之间的转换需要创建和维护一个不断增长的模块集合。为了实现对声音数据的不同处理例如混声、添加回声、均衡器功能、创造人工立体声效果还要编写无穷无尽的模块流。下面这个分级文件树展示了这个包的架构 sound/ Top-level package__init__.py Initialize the sound packageformats/ Subpackage for file format conversions__init__.pywavread.pywavwrite.pyaiffread.pyaiffwrite.pyauread.pyauwrite.py...effects/ Subpackage for sound effects__init__.pyecho.pysurround.pyreverse.py...filters/ Subpackage for filters__init__.pyequalizer.pyvocoder.pykaraoke.py...导入包时Python 搜索 sys.path 里的目录查找包的子目录。 需要有 __init__.py 文件才能让 Python 将包含该文件的目录当作包来处理除非使用 namespace package这是一个相对高级的特性。 这可以防止重名的目录如 string 在无意中屏蔽后继出现在模块搜索路径中的有效模块。 在最简单的情况下__init__.py 可以只是一个空文件但它也可以执行包的初始化代码或设置 __all__ 变量这将在稍后详细描述。 还可以从包中导入单个模块例如 import sound.effects.echo这将加载子模块 sound.effects.echo。 它必须通过其全名来引用。 sound.effects.echo.echofilter(input, output, delay0.7, atten4)另一种导入子模块的方法是 from sound.effects import echo这也会加载子模块 echo并使其不必加包前缀因此可按如下方式使用: echo.echofilter(input, output, delay0.7, atten4)Import 语句的另一种变体是直接导入所需的函数或变量 from sound.effects.echo import echofilter同样这将加载子模块 echo但这使其函数 echofilter() 直接可用: echofilter(input, output, delay0.7, atten4)注意使用 from package import item 时item 可以是包的子模块或子包也可以是包中定义的函数、类或变量等其他名称。import 语句首先测试包中是否定义了 item如果未在包中定义则假定 item 是模块并尝试加载。如果找不到 item则触发 ImportError 异常。 相反使用 import item.subitem.subsubitem 句法时除最后一项外每个 item 都必须是包最后一项可以是模块或包但不能是上一项中定义的类、函数或变量。 6.4.1. 从包中导入 * 使用 from sound.effects import * 时会发生什么你可能希望它会查找并导入包的所有子模块但事实并非如此。因为这将花费很长的时间并且可能会产生你不想要的副作用如果这种副作用被你设计为只有在导入某个特定的子模块时才应该发生。 唯一的解决办法是提供包的显式索引。import 语句使用如下惯例如果包的 __init__.py 代码定义了列表 __all__运行 from package import * 时它就是被导入的模块名列表。发布包的新版本时包的作者应更新此列表。如果包的作者认为没有必要在包中执行导入 * 操作也可以不提供此列表。例如sound/effects/__init__.py 文件可以包含以下代码 __all__ [echo, surround, reverse]这意味着 from sound.effects import * 将导入 sound.effects 包的三个命名子模块。 请注意子模块可能会受到本地定义名称的影响。 例如如果你在 sound/effects/__init__.py 文件中添加了一个 reverse 函数from sound.effects import * 将只导入 echo 和 surround 这两个子模块但 不会 导入 reverse 子模块因为它被本地定义的 reverse 函数所遮挡: __all__ [echo, # refers to the echo.py filesurround, # refers to the surround.py filereverse, # !!! refers to the reverse function now !!! ]def reverse(msg: str): # -- this name shadows the reverse.py submodulereturn msg[::-1] # in the case of a from sound.effects import *如果没有定义 __all__from sound.effects import * 语句 不会 把包 sound.effects 中的所有子模块都导入到当前命名空间它只是确保包 sound.effects 已被导入可能还会运行 __init__.py 中的任何初始化代码然后再导入包中定义的任何名称。 这包括由 __init__.py 定义的任何名称以及显式加载的子模块。 它还包括先前 import 语句显式加载的包里的任何子模块。 请看以下代码: import sound.effects.echo import sound.effects.surround from sound.effects import *在本例中echo 和 surround 模块被导入到当前命名空间因为在执行 from...import 语句时它们已在 sound.effects 包中定义了。 当定义了 __all__ 时也是如此。 虽然可以把模块设计为用 import * 时只导出遵循指定模式的名称但仍不提倡在生产代码中使用这种做法。 记住使用 from package import specific_submodule 没有任何问题 实际上除了导入模块使用不同包的同名子模块之外这种方式是推荐用法。 6.4.2. 相对导入 当包由多个子包构成如示例中的 sound 包时可以使用绝对导入来引用同级包的子模块。 例如如果 sound.filters.vocoder 模块需要使用 sound.effects 包中的 echo 模块它可以使用 from sound.effects import echo。 你还可以编写相对导入代码即使用 from module import name 形式的 import 语句。 这些导入使用前导点号来表示相对导入所涉及的当前包和上级包。 例如对于 surround 模块可以使用: from . import echo from .. import formats from ..filters import equalizer注意相对导入基于当前模块名。因为主模块名永远是 __main__ 所以如果计划将一个模块用作 Python 应用程序的主模块那么该模块内的导入语句必须始终使用绝对导入。 6.4.3. 多目录中的包 包还支持一个特殊属性 __path__ 。在包的 __init__.py 中的代码被执行前该属性被初始化为一个只含一项的列表该项是一个字符串是 __init__.py 所在目录的名称。可以修改此变量这样做会改变在此包中搜索模块和子包的方式。 这个功能虽然不常用但可用于扩展包中的模块集。
http://www.zqtcl.cn/news/594875/

相关文章:

  • 做网站接广告网站注册页面怎么做
  • 西安建站价格表电脑做视频的网站比较好
  • 建筑中级职称查询网站百度指数功能模块
  • 建设网站只慧聪网怎样做网站友情链接
  • 德阳网站开发dedecms5.7装饰公司网站模板
  • 下步我院将建设网站信息保密浙江温州网络公司
  • 一键建站网站seo关键词快速排名介绍
  • 自己做网站 什么wordpress博客文章加密
  • 怎样做音视频宣传网站wordpress 推送
  • 网站图片上传代码专业的企业进销存软件定制
  • 商品网站模板wordpress文章推荐
  • 十里堡网站建设做吃的教程网站
  • 比较好的源码网站河南网站seo推广
  • 做网站推广什么好网站界面结构
  • 龙岗网站优化常见的渠道推广方式有哪些
  • wordpress 后台乱码成都百度推广优化
  • 大连 响应式网站wordpress保存图片不显示
  • 二手车网站建站网站建设企业建站要求
  • 海山免费网站建设做视频网站如何赚钱
  • 网站增加点击率 怎样做小店面设计装修网
  • 一 美食 视频网站模板下载安装外国优秀网站欣赏
  • 网站服务器部署重庆涪陵网站建设公司
  • php网站开发实践要做网站照片怎么处理
  • 网站短期就业培训班搜集关键词的网站
  • 社区网站开发淘宝网站打算找人做
  • 政务类网站网页管理平台
  • 淘宝联盟微信里做网站花卉市场网站建设基本步骤
  • 做网站广告语网站注册建设
  • 仓山福州网站建设哪个是网站建设里面的
  • 开网站流程开发公司起名