百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

python散装笔记——43: 模块导入(1)

itomcoil 2025-02-08 11:22 16 浏览

1: 导入一个模块

使用导入语句:

>>> import random
>>> print(random.randint(1, 10))
4

import 模块将导入一个模块,然后允许你使用 module.name 语法引用其对象,例如值、函数和类。在上例中,导入了包含 randint 函数的 random 模块。因此,通过导入 random 可以使用 random.randint 调用 randint

你可以导入一个模块,然后将其指定为不同的名称:

>>> import random as rn
>>> print(rn.randint(1, 10))
4

如果您的 python 文件 main.pycustom.py 位于同一文件夹。可以这样导入

import custom

也可以从模块中导入函数:

>>> from math import sin
>>> sin(1)
0.8414709848078965

要向模块的更深处导入特定函数,只能在 import 关键字的左侧使用点操作符(.):

from urllib.request import urlopen

在 python 中,我们有两种从顶层调用函数的方法。一种是 "import",另一种是 "from"。当名称可能发生冲突时,我们应该使用 import。假设我们的 hello.py 文件和 world.py 文件中的函数名称相同。那么 "import" 语句就会很好用。

from hello import function
from world import function

function() # world's 的函数将被调用。而不是 hello 的

一般来说,import 将为您提供一个命名空间。

import hello
import world

hello.function() # 将专门调用 hello 的函数
world.function() # 将专门调用 world 的函数

但是,如果你确信在整个项目中不可能有相同的函数名,就应该使用 from 语句。

可以在同一行中进行多次导入:

>>> # 多个模块
>>> import time, socket, random
>>> # 多个函数
>>> from math import sin, cos, tan
>>> # 多个常量
>>> from math import pi, e

>>> print(pi)
3.141592653589793
>>> print(cos(45))
0.5253219888177297
>>> print(time.time())
1482807222.7240417

上述关键字和语法也可以组合使用:

>>> from urllib.request import urlopen as geturl, pathname2url as path2url, getproxies
>>> from math import factorial as fact, gamma, atan as arctan
>>> import random, time, sys

>>> print(time.time())
1482807222.7240417
>>> print(arctan(60))
1.554131203080956
>>> filepath = "/tmp/cute cat(demo).png"
>>> print(path2url(filepath))
/tmp/cute%20cat%28demo%29.png

2: __all__特殊变量

模块可以使用名为 __all__ 的特殊变量来限制使用 from mymodule import * 时导入的变量。

下面是一个模块

# mymodule.py

__all__ = ['imported_by_star']

imported_by_star = 42
not_imported_by_star = 21

使用 from mymodule import * 时,只导入 imported_by_star

>>> from mymodule import *
>>> imported_by_star
42
>>> not_imported_by_star
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'not_imported_by_star' is not defined

不过,not_imported_by_star 可以明确导入:

>>> from mymodule import not_imported_by_star
>>> not_imported_by_star
21

3: 从任意文件系统位置导入模块

如果要导入一个既不是 Python 标准库内置模块也不是侧包的模块,可以在 sys.path中添加模块所在目录的路径。当一台主机上存在多个 Python 环境时,这可能会很有用。

import sys
sys.path.append("/path/to/directory/containing/your/module")
import mymodule

重要的是,你要追加的是找到 mymodule 的目录路径,而不是模块本身的路径。

4: 从模块导入所有名称

from module_name import *

例如

from math import *
sqrt(2) # instead of math.sqrt(2)
ceil(2.7) # instead of math.ceil(2.7)

这将把 math 模块中定义的所有名称导入全局名称空间,但以下划线开头的名称除外(下划线表示编写者认为该名称仅供内部使用)。

警告: 如果已经定义或导入了同名函数,它将被覆盖推荐的方法是只导入特定的名称 from math import sqrt, ceil

def sqrt(num):
  print("I don't know what's the square root of {}.".format(num))

sqrt(4)
# Output: I don't know what's the square root of 4.

from math import *
sqrt(4)
# Output: 2.0

星号导入只允许在模块级使用。尝试在类或函数定义中执行星号导入会导致 SyntaxError

def f():
  from math import *

class A:
  from math import *

都是以失败告终:

SyntaxError: import * only allowed at module level

5: 程序化导入

要通过函数调用导入模块,请使用 importlib模块(从 Python 2.7 版开始包含该模块):

import importlib
random = importlib.import_module("random")

importlib.import_module()函数还可以直接导入软件包的子模块:

collections_abc = importlib.import_module("collections.abc")

对于旧版本的 Python,请使用 imp 模块。

Python 2.x 版本 ≤ 2.7

使用函数 imp.find_moduleimp.load_module 执行编程导入。

摘自 标准库文档

import imp, sys
def import_module(name):
  fp, pathname, description = imp.find_module(name)
  try:
    return imp.load_module(name, fp, pathname, description)
  finally:
    if fp:
      fp.close()

切勿使用 __import__()以编程方式导入模块!有一些涉及 sys.modulesfromlist 参数等的微妙细节很容易被忽略,而 importlib.import_module()会帮你处理这些细节。

相关推荐

Python Qt GUI设计:将UI文件转换Python文件三种妙招(基础篇—2)

在开始本文之前提醒各位朋友,Python记得安装PyQt5库文件,Python语言功能很强,但是Python自带的GUI开发库Tkinter功能很弱,难以开发出专业的GUI。好在Python语言的开放...

Connect 2.0来了,还有Nuke和Maya新集成

ftrackConnect2.0现在可以下载了--重新设计的桌面应用程序,使用户能够将ftrackStudio与创意应用程序集成,发布资产等。这个新版本的发布中还有两个Nuke和Maya新集成,...

Magicgui:不会GUI编程也能轻松构建Python GUI应用

什么是MagicguiMagicgui是一个Python库,它允许开发者仅凭简单的类型注解就能快速构建图形用户界面(GUI)应用程序。这个库基于Napari项目,利用了Python的强大类型系统,使得...

Python入坑系列:桌面GUI开发之Pyside6

阅读本章之后,你可以掌握这些内容:Pyside6的SignalsandSlots、Envents的作用,如何使用?PySide6的Window、DialogsandAlerts、Widgets...

Python入坑系列-一起认识Pyside6 designer可拖拽桌面GUI

通过本文章,你可以了解一下内容:如何安装和使用Pyside6designerdesigner有哪些的特性通过designer如何转成python代码以前以为Pyside6designer需要在下载...

pyside2的基础界面(pyside2显示图片)

今天我们来学习pyside2的基础界面没有安装过pyside2的小伙伴可以看主页代码效果...

Python GUI开发:打包PySide2应用(python 打包pyc)

之前的文章我们介绍了怎么使用PySide2来开发一个简单PythonGUI应用。这次我们来将上次完成的代码打包。我们使用pyinstaller。注意,pyinstaller默认会将所有安装的pack...

使用PySide2做窗体,到底是怎么个事?看这个能不能搞懂

PySide2是Qt框架的Python绑定,允许你使用Python创建功能强大的跨平台GUI应用程序。PySide2的基本使用方法:安装PySide2pipinstallPy...

pycharm中conda解释器无法配置(pycharm安装的解释器不能用)

之前用的好好的pycharm正常配置解释器突然不能用了?可以显示有这个环境然后确认后可以conda正在配置解释器,但是进度条结束后还是不成功!!试过了pycharm重启,pycharm重装,anaco...

Conda使用指南:从基础操作到Llama-Factory大模型微调环境搭建

Conda虚拟环境在Linux下的全面使用指南:从基础操作到Llama-Factory大模型微调环境搭建在当今的AI开发与数据分析领域,conda虚拟环境已成为Linux系统下管理项目依赖的标配工具。...

Python操作系统资源管理与监控(python调用资源管理器)

在现代计算环境中,对操作系统资源的有效管理和监控是确保应用程序性能和系统稳定性的关键。Python凭借其丰富的标准库和第三方扩展,提供了强大的工具来实现这一目标。本文将探讨Python在操作系统资源管...

本地部署开源版Manus+DeepSeek创建自己的AI智能体

1、下载安装Anaconda,设置conda环境变量,并使用conda创建python3.12虚拟环境。2、从OpenManus仓库下载代码,并安装需要的依赖。3、使用Ollama加载本地DeepSe...

一文教会你,搭建AI模型训练与微调环境,包学会的!

一、硬件要求显卡配置:需要Nvidia显卡,至少配备8G显存,且专用显存与共享显存之和需大于20G。二、环境搭建步骤1.设置文件存储路径非系统盘存储:建议将非安装版的环境文件均存放在非系统盘(如E盘...

使用scikit-learn为PyTorch 模型进行超参数网格搜索

scikit-learn是Python中最好的机器学习库,而PyTorch又为我们构建模型提供了方便的操作,能否将它们的优点整合起来呢?在本文中,我们将介绍如何使用scikit-learn中的网格搜...

如何Keras自动编码器给极端罕见事件分类

全文共7940字,预计学习时长30分钟或更长本文将以一家造纸厂的生产为例,介绍如何使用自动编码器构建罕见事件分类器。现实生活中罕见事件的数据集:背景1.什么是极端罕见事件?在罕见事件问题中,数据集是...