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

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

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

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

相关推荐

Excel新函数TEXTSPLIT太强大了,轻松搞定数据拆分!

我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!最近我把WPS软件升级到了版本号:12.1.0.15990的最新版本,最版本已经支持文本拆分函数TEXTSPLIT了,并...

Excel超强数据拆分函数TEXTSPLIT,从入门到精通!

我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!今天跟大家分享的是Excel超强数据拆分函数TEXTSPLIT,带你从入门到精通!TEXTSPLIT函数真是太强大了,轻松...

看完就会用的C++17特性总结(c++11常用新特性)

作者:taoklin,腾讯WXG后台开发一、简单特性1.namespace嵌套C++17使我们可以更加简洁使用命名空间:2.std::variant升级版的C语言Union在C++17之前,通...

plsql字符串分割浅谈(plsql字符集设置)

工作之中遇到的小问题,在此抛出问题,并给出解决方法。一方面是为了给自己留下深刻印象,另一方面给遇到相似问题的同学一个解决思路。如若其中有写的不好或者不对的地方也请不加不吝赐教,集思广益,共同进步。遇到...

javascript如何分割字符串(javascript切割字符串)

javascript如何分割字符串在JavaScript中,您可以使用字符串的`split()`方法来将一个字符串分割成一个数组。`split()`方法接收一个参数,这个参数指定了分割字符串的方式。如...

TextSplit函数的使用方法(入门+进阶+高级共八种用法10个公式)

在Excel和WPS新增的几十个函数中,如果按实用性+功能性排名,textsplit排第二,无函数敢排第一。因为它不仅使用简单,而且解决了以前用超复杂公式才能搞定的难题。今天小编用10个公式,让你彻底...

Python字符串split()方法使用技巧

在Python中,字符串操作可谓是基础且关键的技能,而今天咱们要重点攻克的“堡垒”——split()方法,它能将看似浑然一体的字符串,按照我们的需求进行拆分,极大地便利了数据处理与文本解析工作。基本语...

go语言中字符串常用的系统函数(golang 字符串)

最近由于工作比较忙,视频有段时间没有更新了,在这里跟大家说声抱歉了,我尽快抽些时间整理下视频今天就发一篇关于go语言的基础知识吧!我这我工作中用到的一些常用函数,汇总出来分享给大家,希望对...

无规律文本拆分,这些函数你得会(没有分隔符没规律数据拆分)

今天文章来源于表格学员训练营群内答疑,混合文本拆分。其实拆分不难,只要规则明确就好办。就怕规则不清晰,或者规则太多。那真是,Oh,mygod.如上图所示进行拆分,文字表达实在是有点难,所以小熊变身灵...

Python之文本解析:字符串格式化的逆操作?

引言前面的文章中,提到了关于Python中字符串中的相关操作,更多地涉及到了字符串的格式化,有些地方也称为字符串插值操作,本质上,就是把多个字符串拼接在一起,以固定的格式呈现。关于字符串的操作,其实还...

忘记【分列】吧,TEXTSPLIT拆分文本好用100倍

函数TEXTSPLIT的作用是:按分隔符将字符串拆分为行或列。仅ExcelM365版本可用。基本应用将A2单元格内容按逗号拆分。=TEXTSPLIT(A2,",")第二参数设置为逗号...

Excel365版本新函数TEXTSPLIT,专攻文本拆分

Excel中字符串的处理,拆分和合并是比较常见的需求。合并,当前最好用的函数非TEXTJOIN不可。拆分,Office365于2022年3月更新了一个专业函数:TEXTSPLIT语法参数:【...

站长在线Python精讲使用正则表达式的split()方法分割字符串详解

欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中使用正则表达式的split()方法分割字符串详解》。使用正则表达式分割字符串在Python中使用正则表达式的split(...

Java中字符串分割的方法(java字符串切割方法)

技术背景在Java编程中,经常需要对字符串进行分割操作,例如将一个包含多个信息的字符串按照特定的分隔符拆分成多个子字符串。常见的应用场景包括解析CSV文件、处理网络请求参数等。实现步骤1.使用Str...

因为一个函数strtok踩坑,我被老工程师无情嘲笑了

在用C/C++实现字符串切割中,strtok函数经常用到,其主要作用是按照给定的字符集分隔字符串,并返回各子字符串。但是实际上,可不止有strtok(),还有strtok、strtok_s、strto...