Python进阶---Python工程的组织结构;包、模块、类

1.Python包与模块的名字:

包:文件夹(Python)    模块:文件夹里的文件即.py文件(Python.test1.py)

模块的命名:包名.模块名.py(Python.test1.py)

2.导包:

# 导包方式一:

import t.demo1 as m

print(m.a)

#导包方式二---导入一个变量

from t.demo1 import a

print(a)

#导包方式二-----导入多个变量用*这个符号

from t.demo1 import *

print(a)

print(d)

print(c)

#导包方式二----导入模块

from t import demo1

print(demo1.a)

from t.demo1 import a,b,\

c

print(a)

print(b)

print(c)

3.__init__.py文件的作用:

# 作用1:

# 在文件夹里加__init__.py文件时,Python会自动认为这是一个包,若不加会被认为是普通文件夹

# _init_.py的用法-------->>>>>>不用在控制台终端单独执行,在Python里面呢这个会被自动执行,就像这个直接import t 就可以执行t文件下的__init__

# 文件,终端会输出:This is a __init__.py file

# import t

# 反过来说,假如我导的不是import t而是导入的是一个模块即当前的demo1.py-------运行结果告诉我们__init__文件里的内容仍然会被自动执行从而了解

# Python中的__init__文件的功能

# 作用2:

# __init__.py文件还可以控制文件下面模块的使用,即当前__init__.py文件的内容

# a = 'This is a _init_.python file'
# print(a)

__all__ = ['demo1','demo3']

上面的代码告诉我们__init__.py文件定义了一个 变量,允许 demo1和demo3里面的变量都可以使用,在demo2运行:

备注:

# 模块的内置变量和内置属性

# __all__ = ['a','c','d']

# a=22
# c=99
# d=99

__all__ = ['a', 'b', 'c']
a = 'a'
b = 'b'
c = 'c'

 

e = 33

f = 66

g = 99

 

            demo1的代码              demo3的代码

 

 

 

 

 

 

 

 

运行代码:

from t import *
print(demo1.a)
print(demo3.e)

运行结果:

 如果将__init__文件里的定义的变量去掉demo3,其他不变,则运行结果为:

# 作用3:

可以批量导入----就是说如果你的每一个模块都需要Python标准的内库内容,不可能你每在一个模块写代码都重要写入所需的内库内容那么__init__.py文件则会帮助你解决这个问题

__init__.py文件的代码为:

#导入的是Python里面系统内置的标准内库
import sys
import datetime
import io

我的模块这里就重新加入demo4即代码如下:(在任意的模块都用下面这段代码都会执行标准内库的内置函数)

import t

print(t.sys.path)

得到的运行结果:

4.包与模块的几个常见错误:

①、包和模块是不会重复导入的

②、避免循环导入:

在重新创立一个文件夹:这里拿博主我的来讲(我创建的是p文件)

p1.py文件的代码是:

from p2 import p2

p1 = 1
print(p2)

p2.py文件的代码是:

from p1 import p1

p2 = 2

下面则我们来运行一下p1.py的代码结果:

很明显上述结果出错了:原因就是:在你运行p1.py文件的时候要导入p2模块的p2变量,那么首先它将去p2模块导入,不巧的是p2模块的第一行代码是要导入p1模块的p1变量,如此循环,则造成循环导入的问题,编译则不会通过

如果将p2.py的代码: from p1 import p1删除,让我们再来看删除之后的运行结果:

哈哈哈,结果正如我们所猜到的一样!!!

注意:下面则也是一个导入循环的一个错误案例

如果在p文件下导入p3.py和p4.py两个模块:(p1.py代码不变,剩下的如下改变)

p2模块的代码是:

from p3 import p3

p2 = 2

p3模块的代码是:

from p4 import p4

p3 = 3

p4模块的代码是:

from p1 import p1

p4 = 4

下面我们则运行p1.py的程序:

报错了!!!

参考第一个导入循环案例,我想大家应该知道错误的原因以及修改的办法了吧:

解决方案:将p4.py的代码第一行删除:

运行结果如下:

 程序成功运行了!!!

案例3:

p1.py文件的代码是:

import p2

p2.py文件的代码是:

p2 = 2

print(p2)

则还是运行p1.py文件的程序:

运行结果:

到这里我想大家是不是疑惑重重,为什么会出现这样的结果呢???

原因:在Python里面一旦在一个模块里导入另外的一个模块,那么它将会执行导入模块里的所有代码(不信???那我们实践说话)

将p2.py文件的代码改为:

p2 = 2

print(p2)
print ('孟小鱼真帅啊')

运行p1.py的程序结果:

经过验证确实如此

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值