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

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

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

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()会帮你处理这些细节。

相关推荐

编程学子看过来,竞赛刷题网站推荐

2022年编程竞赛已经公布,想要在今年取得竞赛成绩的学生,一定要把握寒假时间,学习知识的同时通过刷题,巩固所学知识,提升解题能力。小编为大家推荐几个刷题网站,想要竞赛的学生一定不要错过。USACO美国...

给大家推荐些好的c语言代码的网站

C语言,那就来推荐几个吧,部分含有C++:1、TheLinuxKernelArchives(kernel.org)Linux内核源码,仅限于C,但内核庞大,不太适合新手;2、redis(redi...

推荐几个编程入门学习网站_比较好的编程自学网站

有一些刚上大学的朋友和想对编程感兴趣的朋友经常会让我推荐学习网站,下面几个是我认为零基础学编程比较好的网站,希望大家都有收获!1.W3schoolhttp://www.w3school.com.c...

10个最值得收藏的编程学习网站_有什么学编程的网站

程序员是一个需要不断学习的职业。幸运的是,在这个互联网时代,知识就在那里,等着我们去获取。以下我列举一些免费的编程学习网站包含多个开发语言Java、php、html、javascript等多个。1、h...

6个超酷的练习算法,学习编程的网站

在不了解算法的前提下,您无法通过Google或Facebook的采访。那么为什么不现在学习。我是一位拥有15年以上经验的程序员。从高中开始的第一年,我在算法上学习和工作很多。在我毕业之前,我一直...

在线 python 编程的网站_python3在线编程,python3在线编译器,在线编辑器

以下是一些提供在线Python编程环境的网站:1.Repl.it:Repl.it提供了一个多语言在线编程平台,您可以使用它在任何地方编写、运行、共享代码。Repl.it支持多种编程语言,包括Pyth...

推荐 7 个能过招全球程序员的编程挑战网站,欢迎挑战!

作为程序员的你,是不是经常估不准自己的编程水平?下面推荐7个能过招全球程序员的编程挑战网站,助你磨练技巧,提升技能,最终问鼎代码江湖!1.HackerRank你可以参加各种编码竞赛,比如算法、数学...

盘点 20 个编程学习教程网站,建议收藏

欢迎关注@程序员柠檬橙私信回复「1024」获取海量编程学习资源!如果你想学习编程,现在互联网这么方便,不用着急报名培训班,有很多高质量的编程学习资源网站可供你学习,程序员日常浏览的技术教程网站有哪些...

Flask 数据可视化_flourish数据可视化

数据可视化是数据处理中的重要部分,前面我们了解了Flask的开发和部署,如何用Flask做数据可视化呢?今天我们来了解一下。Python语言极富表达力,并且拥有众多的数据分析库和框架,是数据...

【python 工具】selenium 浏览器操作

selenium的安装步骤:1.安装selenium,打开cmd控制台pipinstallselenium2.安装驱动程序(我这里安装的是chromedriver),用来启动chrome浏览器...

可视化爬虫工具,EasySpider软件体验

现在提起爬虫,大家可能会联想到Python语言,然后就是各种使用无头浏览器去网页上爬取数据,使用Python的过程相较于使用其他语言来说,简单了不少。但毕竟是编程语言,也需要去学习来适配各种网...

cursor+mcp+playwright,让AI给你推荐五一旅游胜地

阅读本文前提当你已了解mcp是什么,若不知,猛击:https://github.com/modelcontextprotocol/servers。最近有个小需求,根据用户输入内容,使用大模型来理解用户...

Cursor+Claude+Playwright:AI 让自动化测试效率暴涨,快到飞起!

一、引言随着AI时代的到来,软件测试变得越来越复杂,如何高效、准确地进行自动化测试成了每一个开发团队必须面对的问题。在日常工作中,测试工作常常面临各种挑战,比如功能复杂、需求频繁变更、时间紧迫等。传统...

推荐一个检测 JS 内存泄漏的神器_js内存泄漏的几种情况

大家好,我是Echa哥。作为一名Web应用程序开发者,排查和修复JavaScript代码的内存泄漏一直是最困扰我的问题之一。最近,Meta开源了一款检测JavaScript代码内存泄漏...

Python+Playwright自动化实战:高效爬虫全攻略

一、为什么选择Playwright?在信息爆炸的时代,数据获取能力直接决定内容生产效率。Playwright作为微软开源的新型自动化工具,凭借以下优势成为技术创作者的新宠:支持Chromium/Web...