zoukankan      html  css  js  c++  java
  • Modules,Python Tutorial阅读笔记(3)

      参考资料:

      Python官网Tutorial

      注:由于感觉自己的Python还没有学通透,在看项目的代码时还是有一些困难。所以想看一下Python官网的Tutorial自学一下,我在读的时候也是略过了自己已经会的地方,所以我写的东西都是自己学到的新东西。

      规范:黑体x)表示自己学到的东西模块,是一个大概的区分。4.1,4.2等表示在Tutorial中的位置。

      这一个tutorial的名字叫Modules,之前我转载过一篇文章辨析了module和package的关系。读者可以看这里:https://www.cnblogs.com/chester-cs/articles/13984840.html。所以这篇文章只讲学到的新东西。

      1) 6.1.3 “Compiled” Python files

      为了加速加载模块,Python会在模块所在的目录下缓存complied的module。比如你有一个Hello.py模块,import它之后,当前目录下就会出现一个__pycache__/文件夹,里面会出现一个类似Hello.cpython-38.pyc的文件。

      注意了,这个pyc文件只能加速加载module,并不能加速运行。

      2)6.2. Python在哪里寻找模块?

    >>> import sys
    >>> sys.path
    ['', 'D:\miniconda\python38.zip', 
    'D:\miniconda\DLLs', 
    'D:\miniconda\lib', 'D:\miniconda', 
    'D:\miniconda\lib\site-packages', 
    'D:\miniconda\lib\site-packages\win32', 
    'D:\miniconda\lib\site-packages\win32\lib',
    'D:\miniconda\lib\site-packages\Pythonwin']
    

      我们可以使用sys.path来看。这个sys.path其实就是继承了环境变量PYTHONPATH中的值。

      3)假设我们有下面这样的文件结构:

    sound/                          Top-level package
          __init__.py               Initialize the sound package
          formats/                  Subpackage for file format conversions
                  __init__.py
                  wavread.py
                  wavwrite.py
                  aiffread.py
                  aiffwrite.py
                  auread.py
                  auwrite.py
                  ...
          effects/                  Subpackage for sound effects
                  __init__.py
                  echo.py
                  surround.py
                  reverse.py
                  ...
          filters/                  Subpackage for filters
                  __init__.py
                  equalizer.py
                  vocoder.py
                  karaoke.py
                  ...
    

      通过我们已经学到的知识,我们已经知道Python会将哪些看成包,哪些看成module。但是在上面的例子里,假如我们import sound之后,使用sound.filters还是会报错,它会说sound下面没有这个模块,这是为什么呢?

      答案就在__init.py__文件里。

      我们平时import numpy as np,np.array()用的很舒服,但是其实都是软件的设计者在import numpy的时候设计的啦,比如numpy的__init__.py中会有from . import random,如果没有的话是不会加入到Python的symbol space中的。

  • 相关阅读:
    引号的区别
    QT中加载动态链接库
    QString 转换为 char *
    C++虚继承初识
    虚析构函数详解
    赋值兼容规则
    利用docker搭建spark hadoop workbench
    《用Java写一个通用的服务器程序》03 处理新socket
    《用Java写一个通用的服务器程序》02 监听器
    《用Java写一个通用的服务器程序》01 综述
  • 原文地址:https://www.cnblogs.com/chester-cs/p/14027624.html
Copyright © 2011-2022 走看看