Python基础41:py文件的2种用途以及2种导入模块的方式

py文件的2种用途以及2种导入模块的方式

foo.py文件:

# **************************************************************************
# Python学习
# **************************************************************************
# ** 所属主题: 模块
# ** 所属分层: foo
# ** 功能描述: foo
# ** 创 建 者: 陈红伟
# ** 创建日期: 2021/4/17 11:28 下午
# **************************************************************************
# ** 修改日期     修改人    修改内容
# ** 2021/4/17   陈红伟    新增学习内容代码
# **************************************************************************
"""
该文件只是在学习模块的时候需要
"""

def add(x,y):
    return x+y


x = 1

def f():
    print(x)


print(__name__)
# __main__

def get():
    return x

def change():
    global x
    x= 10
    return x
# **************************************************************************
# Python学习
# **************************************************************************
# ** 所属主题: 模块
# ** 所属分层: 41 py文件的几种用途、导入模块的两种方式
# ** 功能描述: 41 py文件的几种用途、导入模块的两种方式
# ** 创 建 者: 陈红伟
# ** 创建日期: 2021/4/18 12:19 上午
# **************************************************************************
# ** 修改日期     修改人    修改内容
# ** 2021/4/18   陈红伟    新增学习内容代码
# **************************************************************************

"""
py文件的用途:
1、当成模块导入  eg:import foo
2、当成程序执行  eg:直接运行.py文件
"""

# 怎么判断一个py文件是被当成模块还是程序运行呢?
# 在py文件中使用 __name__ 来判断
# 如果是当成程序运行:
print(__name__)  #  __main__
# 如果是当成模块运行:
# import foo
# # 这里会直接打印foo,因为foo中写了代码: print(__name__)



"""
导入模块的方式:
1、直接import 模块名
2、from 模块名 import 模块内对象
"""
# # 第一种,直接import 模块名: (这里演示要注释掉前面导入过foo模块的代码,不然会有影响)
# import foo
# x=999
# print(x) # 999
# print(foo.x) # 1
# print(foo.get()) # 1
# print(foo.change()) # 10
# print(foo.get()) # 10
# print(x) # 999
# print(foo.x) # 10  直接导入的方式(import foo):在当前文件中产生的有一个名字foo,该名字指向步骤2中产生的名称空间,所以是打印10, 而不是1

# 第二种,from 模块名 import  模块内对象  (这里演示要注释掉导入过foo模块的代码,不然会有影响)
from foo import x as f  # f=模块foo中x的值(此处是1)的内存地址
from foo import get
from foo import change
x = 8888
print(x) # 8888
print(f) # 1
print(get()) # 1
print(change()) # 10
print(get()) # 10
print(f) # 1  ⚠️特别注意⚠️特别注意⚠️:这里是返回1 , 因为f是当前文件的名称空间的值,f=模块foo中x的值(此处是1)的内存地址
# 那如果想要获得foo中change后的x,可以重新导入一次即可
from foo import x
print(x) # 10,可以看到这里结果为10
"""
根据上述结果得到结论,两种导入方式的异同点:
    相同点:
        步骤1、执行被导入模块的文件(foo.py)
        步骤2、产生被导入模块(foo.py)的名称空间,将foo.py运行过程中产生的名字都丢到foo的名称空间中
    异同点:(前两个步骤相同)
        步骤3:
            直接导入的方式(import foo):在当前文件中产生的一个模块名(foo),该名字指向「步骤2」中产生的名称空间。所以方法1中最后print(foo.x)输出的是10
            采用第二种方式(from 模块名 import  模块内对象):在当前文件中产生的一个模块名(foo),该名字指向「当前文件」的名称空间。所以方法2中最后print(f)输出的是1,因为调用的是当前名称空间的变量
                [ps:那如果想要获得foo中change后的x,可以重新导入一次即可]
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值