python — 模块(二)

1 第三方模块

先从网上下载,再安装,安装完成后才可以使用。

第三方模块安装的路径:python36\Lib\site-packages

把pip.exe 所在的路径添加到环境变量中。

安装:

  • pip包管理工具: pip install xlrd

  • 源码安装:

    • 下载源码包:压缩文件。

    • 解压文件

    • 打开cmd窗口,并进入此目录:cd C:\Python36\Lib\site-packages

    • 执行:python36 setup.py build

    • 执行:python36 setup.py install

pip install 要安装的模块名称 # pip install xlrd (在命令执行窗口去下载安装)

  • 网慢

  • python36 -m pip install --upgrade pip(pip安装路径问题报错执行前面这句话)

    安装完成后需要更新版本的

  • 安装完成后,如果导入不成功。

    • 重启pycharm。

    • 安装错了。

2 自定义模块

  1. 自定义模块安装的路径:当前执行python的路径

  • xxxx.py

    def f1():
        print('f1')
    ​
    def f2():
        print('f2')
  • x1.py

    # 调用自定义模块中的功能
    import xxxx
    xxxx.f1()
    xxxx.f2()
  • 运行

    python x1.py 
  1. 定义模块

    定义模块时可以把一个py文件或一个文件夹(包)当作一个模块,以方便于以后其他py文件的调用

  2. 对于包的定义:

    py2:文件夹中必须有_ _ init _ _.py

    py3:不需要_ _ init _ _.py

    推荐:以后写代码时,都要加上此文件。

    什么是包?

    1.文件夹 存储了多个py文件的文件夹
    2.如果导入的是一个包,这个包里的模块默认是不能用的
    3.导入一个包相当于执行 __init__.py文件中的内容

3 模块的调用

导入模块,加载此模块中所有的值到内容中。

3.1 示例一

# lizhongwei.py   模块文件
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def show():
    print('我司里种种')
​
def func():
    passprint(456)
# 导入模块,加载此模块中所有的值到内存。
import lizhongwei
​
print(123)
# 调用模块中的函数
lizhongwei.func()
# 导入模块
# 方法一
from lizhongwei import func,show   # 1  该方法有弊端:容易重名
from lizhongwei import func
from lizhongwei import show   # 2    1和2执行结果一样
# 方法二
from lizhongwei import *   # 导入lizhongwei中所有的函数   
​
func()


# 导入模块
# 方法三
from lizhongwei import func as f  # 给lizhongwei中的func重新命名为f
def func():
    print(123)
f()    # 函数中的func与模块中的func重名了,需要给模块中的func重新命名后再执行。

导入模块:

  • import 模块 模块.函数()

  • from 模块 import 函数 函数() 【as起别名 / *】

  • from 模块 import 函数 as 别名 别名()

3.2 示例二

lizohng
    - jd.py
    - pdd.py
    - tb.py
包.py
import lizhong.jd
lizhong.jd.f1()
from lizhong import jd
jd.f1()
from lizhong.jd import f1
f1()

3.3 总结(普通导入)

  • 模块和要执行的py文件在同一目录 且 需要 模块中的很多功能时,推荐用: import 模块

  • 其他推荐:from 模块 import 模块 模块.函数()

  • 其他推荐:from 模块.模块 import 函数 函数()

导入:

  • 绝对导入:

    • import 模块

    • from 模块.模块 import 模块

    • from 模块.模块.模块 import 函数

  • 相对导入【不推荐】

    from . import xxx
    from .. import xxx

调用模块内部元素

  • 函数()

  • 模块.函数()

3.4 多次导入

多次导入不会再重新加载

# jd.py ===> print(123)
import jd # 第一次加载:会加载一遍jd中所有的内容。   
import jd # 由于已经加载过,就不再重新加载。
print(456)  # 123  /n   456
import importlib
import jd
importlib.reload(jd)  # 重新加载一遍jd中所有的内容
print(456)

通过模块导入的特性也可以实现单例模式:

# jd.py
class Foo(object):
    pass
​
obj = Foo()
# app.py
import jd # 加载jd.py,加载最后会实例化一个Foo对象并赋值给obj
print(jd.obj)

 

posted @ 2019-04-09 15:54  一直努力的小羊  阅读(173)  评论(0编辑  收藏  举报