Python3(五) 包、模块、函数与变量作用域
一.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(五) 包、模块、函数与变量作用域的更多相关文章
- Go 入门 - 包,函数和变量
主要内容来自中文版的官方教程Go语言之旅 目的为总结要点 包,函数和变量 包 import 语法,多个用括号换行扩起,包之间不需要间隔符,用引号引起 import ( "fmt" ...
- Python(五) 包、模块、函数与变量作用域
一.while循环与使用场景 CONDITION=1 while CONDITION <=5 : CONDITION +=1 print("hello") else: pri ...
- Python 包、模块、函数、变量作用域
Python 项目的组织结构 - 包 -- 模块 --- 类 ---- 函数.变量 Python是利用包和模块来组织一个项目的. 包: 包的物理表现是一个文件夹,但是一个文件夹却不一定是个包, ...
- python 函数及变量作用域及装饰器decorator @详解
一.函数及变量的作用 在python程序中,函数都会创建一个新的作用域,又称为命名空间,当函数遇到变量时,Python就会到该函数的命名空间来寻找变量,因为Python一切都是对象,而在命名空间中 ...
- python学习笔记三:函数及变量作用域
一.定义 def functionName([arg1,arg2,...]): code 二.示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encod ...
- php自定义函数之变量作用域
我们通过前面的章节函数定义部份的学习我们知道了几个不同的规矩: 函数定义时后括号里面接的变量是形式上的参数(形参),与函数体外的变量没有任何关系.仅仅是在函数内部执行大理石量具哪家好 函数内声明的变量 ...
- Python入门笔记(22):Python函数(5):变量作用域与闭包
一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...
- js:函数与变量作用域的提升
一.要彻底理解JS的作用域和Hoisting,只要记住以下三点即可: 1.所有申明都会被提升到作用域的最顶上 2.同一个变量申明只进行一次,并且因此其他申明都会被忽略 3 ...
- Python学习(21):Python函数(5):变量作用域与闭包
转自 http://www.cnblogs.com/BeginMan/p/3179040.html 一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除, ...
随机推荐
- Docker系列-第七篇Docker构建SpringBoot应用
1.基于Dockerfile构建SpringBoot镜像 1.1准备工作 将SpringBoot项目通过maven打成jar包 mvn clean package #使用maven打包项目 1.2使用 ...
- 3maven常用命令和配置依赖
依赖: 例:spring-context.jar 依赖 spring-aop.jar... A中的某些类 需要使用B中的某些类,则称为A依赖于B 在maven项目中,如果要使用 一个当时存在的Jar或 ...
- async-await 线程分析
这里没有线程 原文地址:https://blog.stephencleary.com/2013/11/there-is-no-thread.html 前言 我是在看 C#8.0 新特性异步流时在评论里 ...
- 开源导入导出库Magicodes.IE 导出教程
要点 导出特性 如何导出Excel表头 如何导出数据.如何进行数据的切割.如何使用筛选器 导出特性 ExporterAttribute Name: 名称(当前Sheet 名称) HeaderFontS ...
- Activiti CamelTask(骆驼任务)
Activiti CamelTask(骆驼任务) 作者:Jesai 人生想讲个不成熟的建议 前言: Camel任务可以从Camel发送和介绍消息,由此强化了activiti的集成功能. 注意camel ...
- [DP][SA][可持久化线段树]黑红兔
源自 xyz32768 菜鸡的 FJ 省冬令营模拟赛题 原题 CF1063F Statement 给定一个长度为 \(n\) 的字符串 \(s\),仅包含小写英文字母 要从中从左往右选出若干段不相交的 ...
- Treap基本用法总结
Treap=Tree+Heap 起名的人非常有才 Treap是啥? 一棵二叉搜索树可能退化成链,那样各种操作的效率都比较低 于是可爱的Treap在每个节点原先值v的基础上加了一个随机数rnd,树的形 ...
- Wordpress4.9.6 任意文件删除漏洞复现分析
第一章 漏洞简介及危害分析 1.1漏洞介绍 WordPress可以说是当今最受欢迎的(我想说没有之一)基于PHP的开源CMS,其目前的全球用户高达数百万,并拥有超过4600万次的超高下载量.它是一个开 ...
- python类型-序列-元组
元组是一种不可变类型,元组可用作一个字典的key. 1.创建一个元组并进行赋值 atuple = (123, 'abc', ('inner', 'tuple'), 7-9j) 2.访问元组中的值 元组 ...
- 生成链接中的全限定URL(Generating Fully Qualified URLs in Links) | 在视图中生成输出URL | 高级路由特性
结果:<a class="myCSSClass"href="https://myserver.mydomain.com/Home/Index/MyId#myFrag ...