python通配符怎么用_关于python:使用通配符导入的原因是什么?

我刚刚学习了有关导入模块的知识,但对通配符导入感到有些困惑。

from module_name import *

我完全不了解使用它的原因,我看到有人说根本不使用它。

有人可以弄清楚它的真正含义,为什么要使用它?

这意味着您导入了模块的所有内容,并且有可以使用的小模块,但是在大型模块中,您将获得大量的加载时间,并且程序将变得非常缓慢

如果您要使用从模块导出的所有内容,则分别导入每个内容是多余的,不是吗? 您的另一个选择是仅导入module,然后在任何地方使用module.thing。 两种解决方案都不会产生美观的代码

假设您有一个带有100个函数的模块util.py。 现在,您要使用其中的50个,可能要使用from util import *而不是一个一个地导入它们。

通配符导入不好的一个示例:做import os,想知道为什么open突然不再像open那样工作。

@Matthias我认为您的意思是from os import *

@reportgunner:那是一个OutOfCoffeeError。 你是对的。

哈哈我只是在运行我的moar_coffee()例程

根据[Python 3.Docs]:模块-有关模块的更多信息(强调是我的):

There is even a variant to import all names that a module defines:

>>> from fibo import *

>>> fib(500)

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

This imports all names except those beginning with an underscore (_). In most cases Python programmers do not use this facility since it introduces an unknown set of names into the interpreter, possibly hiding some things you have already defined.

Note that in general the practice of importing * from a module or package is frowned upon, since it often causes poorly readable code. However, it is okay to use it to save typing in interactive sessions.

因此,这意味着:将模块/包导出的所有符号(请在上一页中查看__all__变量的含义)都导入当前名称空间。

通常(如上所述),当控制台中的某个人想要通过不"手动"地导入所需的所有内容来节省时间时使用。一些不知道要导入什么的人也使用它(所以他们导入了所有东西,因为他们并不真正知道自己在做什么-当然有例外,但是很少见)。

无论如何,这可能是最有说服力的示例(因为它仅依赖于Python):说明了其陷阱:

>>> with open("out.txt","w") as f:

...     f.write("DON'T USE wildcard imports!")

...

27

>>>

>>> from os import *

>>>

>>> with open("out.txt","w") as f:

...     f.write("USING wildcard imports ...")

...

Traceback (most recent call last):

File"", line 1, in

TypeError: an integer is required (got type str)

通配符导入阴影:

[Python 3.Docs]:内置函数-打开(文件,模式=" r",缓冲= -1,编码=无,错误=无,换行=无,closefd = True,打开器=无)

通过:

[Python 3.Docs]:os.open(path,flags,mode = 0o777,*,dir_fd = None)

处理第三方模块时,事情甚至变得更加混乱(碰撞命中率可能成倍增长)。

@ Jperkins98:这是否回答了您的问题?

from module import *通常从给定的模块导入evey名称(尽管模块可以使用__all__来限制它)。通常最好避免这种情况,因为这组名称可能会随时间变化,从而可能会更改代码可用的名称。

不过,有时为了方便起见,有时会在交互式会话中使用它。

这用于从模块导入所有内容。建议您不要使用它的原因是因为它可能会使您混淆所使用的函数或类的来源。而且,某些东西在不同的模块中可能具有相同的名称,这样导入它们将覆盖先前导入的那些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值