关于python引入模块问题

1. 问题由来

关于import和from import使用一直存在疑惑,这几天写爬虫,调用其他的文件,才知道接口可以利用from import实现,具体问题是这样的:

from datetime import datetime

print(datetime.now()) 

就可以执行,但是用import就不行:

import datetime

print(datetime.now())

报错:AttributeError: module ‘datetime’ has no attribute ‘now’

import datetime.datetime 
print(datetime.now())

报错:ImportError: No module named ‘datetime.datetime’; ‘datetime’ is not a package

2. 具体解释

Python标准库中有些东西容易糊弄住我们这些刚刚接触python新手,比如你说的datetime模块,datetime模块中有一个与datetime.py文件同名的类 ,now是它的一个静态方法,可以不用生成实例直接以Class.method()的方式调用。

from module import Something

module是一个模块,说白了是一个文件,比如 datetime.py文件。
Something是模块的一个具体对象,可以是函数,可以是变量,可以是类。这点接口问题说的很直白。

3. 注意

一般情况下尽量使用import a,此时访问B时,可以通过a.B的形式。

有节制的使用from a import B,这样可以直接使用B。

避免使用from a import *,这种方法会污染命名空间,而且不能直观的显示导入哪些对象

4. 知乎完美回答

说的清晰明了,233333

你有一个工具箱,箱子里有剪刀,有钳子,有螺丝刀等等。
现在你想拧螺丝。然后你一个操作是:从 工具箱 里拿 螺丝刀,然后用 螺丝刀 去拧螺丝 ( from import)。别一个操作是: 拿了 工具箱 ,没打开呢,直接就去 拧螺丝 ( import )。

------*** end*** ------