千家信息网

Python中如何使用语句导入模块或包

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,小编给大家分享一下Python中如何使用语句导入模块或包,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!从一个模块导入全部f
千家信息网最后更新 2026年10月31日Python中如何使用语句导入模块或包

小编给大家分享一下Python中如何使用语句导入模块或包,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

  从一个模块导入全部

  from import * means意味着"我希望能访问中我有权限访问的全部名称"。例如以下代码something.py:

  # something.py

  public_variable = 42

  _private_variable = 141

  def public_function():

  print("I'm a public function! yay!")

  def _private_function():

  print("Ain't nobody accessing me from another module...usually")

  class PublicClass(object):

  pass

  class _WeirdClass(object):

  pass

  在Python解释器中,我们可以执行from something import *,然后看到如下的内容:

  >>> from something import *

  >>> public_variable

  42

  >>> _private_variable

  ...

  NameError: name '_private_variable' is not defined

  >>> public_function()

  "I'm a public function! yay!"

  >>> _private_function()

  ...

  NameError: name '_private_function' is not defined

  >>> c = PublicClass()

  >>> c

  >>> c = _WeirdClass()

  ...

  NameError: name '_WeirdClass' is not defined

  from something import *从something中导入了除了以_开头名称外的其他所有名称,按照规范,_开始的名称是私有的所以未被导入。

  嗯,不是特别糟!还有什么?

  上面没提到__all__是什么。all__是一个字符串列表,指定了当from import *被使用时,模块(或者如后文会提到的包)中的哪些符号会被导出。如果我们不定义__all(我们在上面的something.py就没定义),import *默认的导入方式是导入除了下划线(_)开头的所有名称。再说一次,编程惯例上下划线表示一个符号是私有的,不导入是合理的。让我们来看看在something.py中定义我们自己的__all__会发生什么。

  # something.py

  __all__ = ['_private_variable', 'PublicClass']

  # The rest is the same as before

  public_variable = 42

  _private_variable = 141

  def public_function():

  print("I'm a public function! yay!")

  def _private_function():

  print("Ain't nobody accessing me from another module...usually")

  class PublicClass(object):

  pass

  class _WeirdClass(object):

  pass郑州做人流手术 http://rl.zyfuke.com/

  现在,我们期望from something import *只会导入_private_variable和PublicClass:

  >>> from something import *

  >>> public_variable

  42

  >>> _private_variable

  ...

  NameError: name '_private_variable' is not defined

  >>> public_function()

  "I'm a public function! yay!"

  >>> _private_function()

  ...

  NameError: name '_private_function' is not defined

  >>> c = PublicClass()

  >>> c

  >>> c = _WeirdClass()

  ...

  NameError: name '_WeirdClass' is not defined

  包是怎样的呢?

  当从一个包中导入全部时,__all__的做法和模块基本一样,不过它处理的是包中的模块(而不是把模块中的名都导入)。所以当我们使用from import *.时__all__说明了所有需要被导入当前命名空间的模块。

  不同之处在于,如果你在一个包的__init__.py里面没有声明__all__,from import *语句不会导入任何东西(这个说法也不全对,正确的说法在此)

  但是,这有什么不好?

  写到这里,给大家推荐一个资源很全的python学习聚集地,点击进入,这里有资深程序员分享以前学习

  心得,学习笔记,还有一线企业的工作经验,且给大家精心整理一份python零基础到项目实战的资料,

  每天给大家讲解python最新的技术,前景,学习需要留言的小细节

  from import * 是不明确的。它没告诉我们我们正在导入什么或者我们把什么带入当前命名空间了。更好的做法是显式地导入我们需要的全部名称。这种方式下,读者(非常可能是未来的你自己)就不会困惑于你代码中使用的一个变量/方法/类/其他东西是哪儿来的,这也告诉了我们下一点:

  可读性很重要

  即使你需要导入很多东西,一个一个显式地导入也更清楚。使用PEP 328:

  from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,

  LEFT, DISABLED, NORMAL, RIDGE, END)

  你现在就能明确知道你的命名空间里有什么,使用ctrl+f能很快地告诉你它们是哪儿来的。

  同时,你还总是要承担模块/包作者更改list内容(加/减东西)的风险。也就是下面两者之一:

  作者从__all__里删除了一个字符串。如果你的代码使用了那个名字,你的代码就会报出NameError的错误,并且很难发现为什么。

  作者在__all__里加入了很多东西。你也许不需要这些增加的内容,所以你只是让这些你不关心的东西占满了你的命名空间。他们甚至在你不注意的时候会替代其他同名内容。

以上是"Python中如何使用语句导入模块或包"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

模块 东西 内容 名称 学习 代码 空间 语句 作者 篇文章 做法 字符 字符串 开头 方式 符号 说法 中导 私有 清楚 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技保险 金融科技还是互联网 互联网扶贫科技 极限挑战互联网科技 丰台科技园 互联网 无线互联网科技 苏州大垚互联网科技 互联网和高科技公司 互联网科技博主是什么意思 北京大学互联网科技怎么样 互联网科技实习生岗位职责 智腾互联网科技有限公司 呼和浩特新华互联网科技学院 企晟互联网信息科技有限公司 众安科技工业互联网合作 上海京穆互联网科技有限公司 互联网金融科技公司的优势 江苏互联网智能科技产品出厂价 中国新注册互联网科技 众联互联网络科技 朗涯互联网科技 苏州互联网科技贷款公司 北京禾田雨橡互联网科技 碳银互联网科技有限公司 无锡溥仪互联网科技有限公司 阿里巴巴算科技企业还是互联网 互联网公司科技股 花神(南京)互联网科技有限公司 华夏恒生互联网科技013171 科技互联网专业工作会议发言稿
0