按照惯例先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看一点例子就好了
这是一个菜谱,文件名是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的时候,它也会执行一次那个函数
说完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的时候就耗时间了,生成了无意义的函数功能,
就好像一本菜谱和一本辞海一样重的情况下,
你需要做几个菜,你是拿你需要的那几页去厨房,还是抱着一整本书去厨房呢