方法一:from import导入

  • from 源模块名 import 导入内容
  • 导入内容为*代表把原模块整块导入(相当于把整个源模块搬入当前程序)
  • 如下面示例,导入后会把print('源模块主程序执行的语句')也执行
  • 解决方法:源模块主程序添加判定条件 if _ _name_ _== '_ _main_ _':
  • print(_ _name_ _)打印运行的程序名字
  • _ _main_ _表示当前程序
  • 权限控制_ _ all_ _ = [可被调用的内容,'Classname','字符','函数名']
  • 函数名不要加括号
  • def mutl(),在里面写'mutl'
  • m=10,在里面写'm'
  • 需要什么(函数、变量、类等),导入什么
  • 详细示例:
# from A import variable用法示例
#下述两部分代码在同一dict下的不同python文件
# 源模块    # 函数A
m = 9
n = 99
def mult():
    print(m * n)

# 当前执行函数    函数B
from import_source import m, n, mult
print(m, n)
mult()

### 当前函数B输出内容为:
# 9 99
# 891
# ---------------------------------------------------------------------------------
# from A import *结果示例,解决A中主程序执行问题示例
# 原模块    # 函数A
m = 9
n = 99
def mult():
    print(m * n)

class Mathsign:
    def __init__(self):
        self.signa = '+'
        self.signb = '-'
    def printsign(self):
        print(self.signa, self.signb)
# if _ _name_ _== '_ _main_ _':
print('源模块主程序执行的语句')    # 源模块主程序级别的语句
# 比上一个示例多了源模块主程序级别的语句、和类,Mathsign

# 当前执行函数    函数B
from import_source import *
print(m, n)
mult()
signtotal = Mathsign()
signtotal.printsign()

### 当前函数B输出内容:
# 源模块主程序执行的语句
# 9 99
# 891
# + -
# ---------------------------------------------------------------------------------
# 若将第31行注释取消,执行if _ _name_ _== '_ _main_ _':
# 则第43行语句:源模块主程序执行的语句不会出现
# ---------------------------------------------------------------------------------
# 权限控制语句示例
# 代码表示仅n和函数mult可以被from import导入
__all__ = ['n', 'mult']
m = 9
n = 99
def mult():
    print(m * n)
  • 43行结果说明,import*后会执行原函数A的主程序语句
  • 第43、45行结果说明,输出语句(源模块主程序执行的语句),比值891先执行,源命令行分别为第36、38行,符合程序运行规律
  • 第44、45行说明,调用模块正常使用原函数A的值和函数

方法二 import导入

  • import A 导入内容
  • 表示A导入当前程序可用.调用其内容,
  • 源主程序语句会执行,不设置权限控制
  • 详细示例:
# 源模块
m = 9
n = 99
def mult():
    print(m * n)
# 执行模块            
import import_source
print(import_source.m, import_source.n)
import_source.mult()
  • 若导入内容A名字太长,可以使用import A as alias(alias是不和A有重复部分的别名)
  • import person.clothes.money as person 是错误的
  • eg import person.clothes.money as k 是正确的

其他相关知识

  • 后导入内容会覆盖前导入内容
  • 循环嵌套最后显示no define(套娃导入)
  • 包下的_ _init_ _函数,导入包时被执行,导入多重包
  • 应用:简化导包过程,按照规则走