一.Python项目的组织结构

最顶级的组织结构:包(文件夹)

第二个层级:模块(文件)

第三个层级:类

第四个层级:函数、变量(不属于组织结构,是类本身的特性)

二.Python包与模块的名字

1.区分不同包的同名模块:包名.模块名
形成的模块的路径叫做命名空间

2.一个包下面可以有子包,模块可以和包平级

3.普通文件夹想要变成包必须要有__init__.py文件
__init__.py本身也是一个模块,可以不写内容只是标注包
特殊的,__init__.py模块的名字就是包名

三.import 导入模块

对于重复的定义可以从其他模块里引用,不需要重复编写。

1.语法: import 模块名 

若被导入模块在子包下面,要加上命名空间,语法:import  子包名.模块名

2.引用导入模块的某一个变量的语法:模块名.变量名

import t.c
print(t.c.a)

3.可以用as进行简写

import t.c as m
print(m.a)
#print(t.c.a)

四.from import

1.导入变量

from t.c import a
print(a)
#不需要写成print(t.c.a)

2.导入模块(不推荐)

from t import c
print(c.a)

3.引用大量变量时使用 * :

from c import *

4."*"会一次性的把模块下面所有的变量或者函数全部导入进来,但是在实际的编码过程中不太可能在引入的时候需要全部的变量,那么就需要我们控制 * 的行为,让 * 导入的时候只导入我们指定的变量。

#test1.c
__all__ = ['a','c']    #用内置变量__all__来控制 * 的选择范围
a = 1
b = 2
c = 3
d = 4 #test1.c2 
from c import *
print(a)
print(c)
print(d)       #d没有被打印,报错
运行结果:1   3 

五.__init__.py 的用法

1.__init__.py文件的作用:

当包被导入时,init.py会首先自动被执行

#t.__init__.py
a = 'This is a __init__.py file'
print(a) #c11.py
import t #导入包t,t里面的__init__.py文件就会被自动执行 运行结果:This is a __init__.py file

假如不导入包,而是导入包里面模块的某个变量,init文件依旧会自动运行

#t.c7.py
__all__ = ['a','c']
a = 2
c = 3
d = 4 #c12.py
from t.c7 import a 运行结果:This is a __init__.py file

2. __init__.py的应用场景:

#t.__init__.py
__all__ = ['c7'] #初始化*,标明哪些模块被导出 #t.c7.py
__all__ = ['a','c']
a = 2
c = 3
d = 4 #t.c8.py
e = 2
f = 3
g = 4 #c11.py
from t import * #* 表示导入 t 包里的所有模块
print(c7.a) #c7在init中被定义,可引用
print(c8.e) #c8在init中未定义,不可引用 运行结果是2

3. __init__.py的重要作用

#t包下面的__init__.py
import sys #批量导入库,内置标准库
import datetime
import io #c13.py
import t
print(t.sys.path) #在这里插入代码片

六.注意要点

1.包和模块是不会被重复的导入的,只会执行一次
2.避免循环导入,不要形成闭环(多个模块之间形成闭环)
3.导入模块的时候会执行模块里所有的代码

Python3(五) 包、模块、函数与变量作用域的更多相关文章

  1. Go 入门 - 包,函数和变量

    主要内容来自中文版的官方教程Go语言之旅 目的为总结要点 包,函数和变量 包 import 语法,多个用括号换行扩起,包之间不需要间隔符,用引号引起 import ( "fmt" ...

  2. Python(五) 包、模块、函数与变量作用域

    一.while循环与使用场景 CONDITION=1 while CONDITION <=5 : CONDITION +=1 print("hello") else: pri ...

  3. Python 包、模块、函数、变量作用域

    Python 项目的组织结构 - 包 -- 模块 --- 类 ---- 函数.变量   Python是利用包和模块来组织一个项目的.   包: 包的物理表现是一个文件夹,但是一个文件夹却不一定是个包, ...

  4. python 函数及变量作用域及装饰器decorator @详解

    一.函数及变量的作用   在python程序中,函数都会创建一个新的作用域,又称为命名空间,当函数遇到变量时,Python就会到该函数的命名空间来寻找变量,因为Python一切都是对象,而在命名空间中 ...

  5. python学习笔记三:函数及变量作用域

    一.定义 def functionName([arg1,arg2,...]): code 二.示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encod ...

  6. php自定义函数之变量作用域

    我们通过前面的章节函数定义部份的学习我们知道了几个不同的规矩: 函数定义时后括号里面接的变量是形式上的参数(形参),与函数体外的变量没有任何关系.仅仅是在函数内部执行大理石量具哪家好 函数内声明的变量 ...

  7. Python入门笔记(22):Python函数(5):变量作用域与闭包

    一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...

  8. js:函数与变量作用域的提升

    一.要彻底理解JS的作用域和Hoisting,只要记住以下三点即可:      1.所有申明都会被提升到作用域的最顶上      2.同一个变量申明只进行一次,并且因此其他申明都会被忽略      3 ...

  9. Python学习(21):Python函数(5):变量作用域与闭包

    转自 http://www.cnblogs.com/BeginMan/p/3179040.html 一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除, ...

随机推荐

  1. 如何利用Map2Shp进行快速格式转换

    有时,用户仅需要进行GIS数据格式的简单转换,对文字注记.制图表达.投影信息无特别要求,可进行快速格式转换.做为MapGIS文件与Shape文件间的格式转换工具,Map2Shp软件操作过程十分简单,只 ...

  2. P4550 收集邮票

    P4550 收集邮票 题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由 ...

  3. Spring学习记录4——Spring对DAO的支持

    Spring对DAO的支持 随着持久化技术的持续发展,Spring对多个持久化技术提供了集成支持,包括Hibernate.MyBatis.JPA.JDO:此外,还提供了一个简化JDBC API操作的S ...

  4. dp - 逆序数序列

    对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数 ...

  5. 使用git将本地文件提交到github存储库

    1.首先你要安装git https://git-for-windows.github.io/ 去官网自行下载对应版本 2.安装好git服务器后,找到你项目的文件夹,右键git bash here打开命 ...

  6. NOIP复活了

    众所周知,NOIP以一种奇葩而又不可避免的方式(CSP)复活了.

  7. [LOJ#2017][轮廓线DP][KMP]「SCOI2016」围棋

    题目传送门 看到 \(m\le 12\) 和 \(c\le 6\) ,容易想到状压 DP 考虑转化成 \(3^{nm}\) 减去不合法的方案数,轮廓线 DP :\(f[i][j][S][k][h]\) ...

  8. [bzoj2186] [洛谷P2155] [Sdoi2008] 沙拉公主的困惑

    Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...

  9. 【javaScript】报getElementId()为Null的错误

    若JavaScript代码写在<head>块中,若是javaScript,写JavaScript代码写在里面 window.οnlοad=function(){ js代码内容 } 若是jq ...

  10. python笔记05

    python笔记05 数据类型 上个笔记知识点总结: 列表中extend特性:extend,(内部循环,将另外一个列表,字符串.元组添加到extend前的列表中) li.extend(s),将s中元素 ...