一.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. pc和H5响应式方案

    pc响应式:(所有应用在pc端) 解决方案1.媒体查询 2.flex,百分比  3.栅格布局 媒体查询 @media screen and (max-width:768px) @media scree ...

  2. python二维列表求解所有元素之和

    2020-01-14 相信很多初学小伙伴都会遇到二维列表求解所有元素之和问题,下面给出两种两种常见的求和方法. 方法1: 思想:遍历整个二维列表元素,然后将所有元素加起来 def Sum_matrix ...

  3. python的requests用法详解

    Requests是一个Python语言写的http相关设置或者请求的一个库 安装:pip install Requests或者pip3 install requests 使用的时候要import re ...

  4. Java.前端模板.Thymleaf

    1. Input 日期格式化 <input id="renewalDate" name="renewalDate" th:value="${#d ...

  5. [bzoj3529] [洛谷P3312] [Sdoi2014] 数表

    Description 有一张n×m的数表,其第i行第j列(1 < =i < =n,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...

  6. C++ 一篇搞懂多态的实现原理

    虚函数和多态 01 虚函数 在类的定义中,前面有 virtual 关键字的成员函数称为虚函数: virtual 关键字只用在类定义里的函数声明中,写函数体时不用. class Base { virtu ...

  7. Spring Cloud Alibaba 之 Sentinel 限流规则和控制台实例

    这一节我们通过一个简单的实例,学习Sentinel的基本应用. 一.Sentinel 限流核心概念 在学习Sentinel的具体应用之前,我们先来了解一下Sentinel中两个核心的概念,资源和规则. ...

  8. Dart语言学习(九) 运算符

    一.运算符及其描述 二.Dart运算符注意点 1. 除法运算符"/" 和 整除运算法"~/" 的区别 除法运算符 "/"  结果是浮点型 整 ...

  9. CentOS7主机名的查看和修改

    CentOS7主机名的查看和修改 在CentOS7中,有三种定义的主机名: 静态的(Static hostname) "静态"主机名也称为内核主机名,是系统在启动时从/etc/ho ...

  10. ajax--->http头信息的content-type是application/x-www-form-urlencoded或application/json区别

    ajax请求时http头信息的content-type是application/x-www-form-urlencoded或application/json区别 content-type请求头是干嘛的 ...