Python import和from import的区别(最好懂 看完不懂 我倒立洗头)

按照惯例先bb两句
能搜到帖子的时候,估计大家已经知道Python要调用一些函数,需要import XX、
比如random,datetime
但是还有一种语法是from X import XX
这两种语法区别对于初学者估计是有点懵懂的

简单来说

1.把import XX 理解成 运行XX要更好,

import xx = python xx.py

2.把py文件理解成菜谱,把运行py文件理解成炒菜
一个py文件你写了,你不运行,它就不起作用
一个菜谱放在那,你不炒菜,菜也不可能看着菜谱自己动起来
然后再把一个个py文件里面的函数理解成一个一个菜
ok看一点例子就好了
Python import和from import的区别(最好懂 看完不懂 我倒立洗头)_第1张图片

来点例子

这是一个菜谱,文件名是caipu.py

# caipu.py
# -*- coding: utf-8 -*-
# 这是一个菜谱

# 这是肉蛋葱鸡的做法
def  roudancongji():
        print "这波啊 这波是肉蛋葱鸡"
# 这是麻辣香锅
def  mlxg():
        print "这是一道麻辣香锅"

先来理解import
首先是在交互界面测试

>>> import caipu
>>> caipu.roudancongji()
这波啊 这波是肉蛋葱鸡
>>> caipu.mlxg()
这是一道麻辣香锅

import caipu就相当于拿了菜谱过来,并且获得了每一道菜的做法(获得了每一个函数的定义)

为什么说import基本和直接运行一样呢

如果在caipu.py末尾追加一个

roudancongji()

那么。。
import的时候,它也会执行一次那个函数
Python import和from import的区别(最好懂 看完不懂 我倒立洗头)_第2张图片
说完import 再说下

from caipu import *

>>> from caipu import *
这波啊 这波是肉蛋葱鸡
>>> roudancongji()
这波啊 这波是肉蛋葱鸡
>>> mlxg() 这是一道麻辣香锅
>>> caipu.mlxg()
Traceback (most recent call last):
File “”, line 1, in
NameError: name 'caipu’is not defined

区别就是调用的时候不需要说明这个roudancongji()函数是caipu.py下的

如果是

import caipu

调用caipu.py的肉蛋葱鸡菜谱时,需要使用

caipu.roudancongji()

如果是

from caipu import *

个人感觉from xx import yy的用法比直接import要好

调用caipu.py的肉蛋葱鸡菜谱时,就使用

roudancongji()

最后说下
from caipu import some

from caipu import *
的区别

>>> from caipu import roudancongji
这波啊 这波是肉蛋葱鸡
>>> roudancongji()
这波啊 这波是肉蛋葱鸡
>>> mlxg()
Traceback (most recent call last):
File"", line 1, in
NameError: name ‘mlxg’ is not defined

如果from caipu import roudancongji的话
就只会拿到肉蛋葱鸡的菜谱了
所以想尝试麻辣香锅的菜谱就报错了
NameError: name ‘mlxg’ is not defined相当于没有找到mlxg这个菜的菜谱!

可能你会想问。。
那为什么我不直接from caipu import * 呢
万一我做菜做着还想要用到菜谱的其他菜呢?(调用别的.py可能还需要其他函数和功能)

。。。
简单来说就是 如果caipu.py有10000+道菜呢。。
import的时候就耗时间了,生成了无意义的函数功能,

就好像一本菜谱和一本辞海一样重的情况下,
你需要做几个菜,你是拿你需要的那几页去厨房,还是抱着一整本书去厨房呢

你可能感兴趣的:(Python,python,运维)