python在项目中用得少_一日一技:如何在Python项目中挖坑害人

本文揭示了在Python编程中使用`from module import *`可能导致的命名冲突问题,通过实例解释了这种导入方式如何覆盖已有的模块引用,从而引发错误。作者警告程序员避免在大型项目中使用这种导入方式,以防止代码维护困难和潜在的运行时错误。
摘要由CSDN通过智能技术生成

一日一技:如何在Python项目中挖坑害人

有不少人在写Python的时候,喜欢这样导入模块:

.

from re import *

text = 'adfa123adfasd'

num = findall('(\d+)', text)

print(num)

我今天要告诉你,你这样写就是在给自己挖坑。

我们来看一下这个坑是怎么样的:

首先你创建一个 main.py文件,内容如下:

.

import datetime

print(datetime.datetime.now())

现在我们运行一下,发现一切正常。

接下来,创建一个 bug.py,内容如下:

.

from datetime import datetime

def anyfunc():

print(123)

接下来,修改 main.py,内容如下:

import datetime

from bug import anyfunc

anyfunc()

print(datetime.datetime.now())

此时,你会发现一切正常。如下图所示。

好了,我们来挖个坑,再次修改 main.py,改成下面这样:

import datetime

from bug import *

anyfunc()

print(datetime.datetime.now())

现在,函数 anyfunc正常运行,但是你会发现, datetime.datetime.now()报错了,如下图所示。

这是因为,当你 frombugimport*的时候,原来在 bug.py第一行的 fromdatetimeimportdatetime导入的 datetime.datetime对象也会被导入到 main.py中,此时由于 datetime.datetime对象和 datetime模块的名字相同,就会使得 datetime.datetime对象覆盖了原来的 datetime模块。所以就报错了。

由于一个大项目很多人合作,可能有些人喜欢

import datetime

datetime.datetime.now()

datetime.date.today()

有些人喜欢

from datetime import datetime, date, timedelta

datetime.now()

date.today()

如果再遇上一个人喜欢 fromxxximport*

那么恭喜你——卒。

珍爱生命,请禁止使用 fromxxximport*这种写法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值