Python语言学习:模块
一、模块
1. 模块(Module):以.py结尾的文件,包含python对象定义和python语句。使代码段更容易理解和使用。
模块分为两种:标准库(直接导入的库)和第三方库(需要下载安装的库)。
2. 模块的引入
a. import语句:当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。
如果想要导入模块support.py,需要把命令放在脚本的顶端。
import module
例如:import sys
b.from...import语句:从模块中导入一个指定的部分到当前命名空间中。
from modname import name
c.from...import * 语句:把一个模块的所有内容全部导入到当前的命名空间也是可行的
from modname import *
3.索引路径:当导入一个模块,python解析器对模块位置的搜索顺序如下:
a.当前目录
b.如果不在当前目录,python则搜索在shell变量PYTHONPATH下的每个目录
c.如果还找不到,python会察看默认路径,Unix下,默认路径是/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
4. PYTHONPATH变量:作为环境变量,PYTHONPATH由装在一个列表里的许多目录组成。PYTHONPATH的语法和shell变量PATH一样。
a. 在windows系统,典型的PYTHONPATH如下:
set PYTHONPATH= c:\python27\bin;
具体看安装的默认路径
b.在Unix系统,典型的PYTHONPATH如下:
set PYTHONPATH = /usr/local/lib/python
具体看安装的默认路径
5.命名空间和作用域
a. 变量是拥有匹配对象的名字(标识符)。
命名空间是一个包含了变量名称(键)和它们各自相对应的对象(值)的字典。
一个python表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和全局变量重名,则局部变量会覆盖全局变量。
每个函数都有自己的命名空间。类的方法的作用域规则和通常函数一样。
python会智能的猜测一个变量是局部还是全局。它假设任何函数内赋值的变量都是局部的。因此,如果给函数内的全局变量赋值,需要使用到global语句。这个语句会告诉python这个变量是全局变量。
如果不给函数的变量前加global,那么久会报UnboundLocalError的错误,如下:
# Author:Crystal
#!/usr/bin/env python
Money = 2000
def AddMoney():
# 需要加入global Money这个声明,python才知道以下这个Money和上面定义的局部变量Money不同,这个是全局变量Money
Money = Money +1 #UnboundLocalError: local variable 'Money' referenced before assignment
print (Money)
AddMoney()
print (Money)
6. dir()函数:一个排好序的字符串列表,内容是一个模块里定义过的名字
#! /usr/bin/evn python import math #导入内置math模块
content = dir(math)
print (content)
备注:特殊字符串变量_name_指向模块的名字,_file_指向该模块的导入文件名
7.globals()和locals()函数:可被用来返回全局和局部命名空间里的名字。
如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名
如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字
两个函数的返回类型都是字典。所以名字们能用key()函数摘取
8. reload()函数:重新导入之前顶层的代码进行执行的操作。
reload(module_name)
9. python中的包:是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的python的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在_init_.py文件,该文件的内容可以为空。_init_.py用于标识当前文件夹是
一 个包。包由类组成,类是一个文件中放置很多函数组成。
10. 模块例子:
# Author:Crystal
#! /usr/bin/env python '''import sys
#print(sys.path) #path是打印环境变量
print(sys.argv) #argv打印绝对路径 import os
#cmd_res= os.system("dir") #os.system只是执行命令,不保存结果
cmd_res= os.popen("dir").read() #os.popen可以执行命令并保存结果,read()是将结果读取出来
print(cmd_res)
os.mkdir("new_dir") #os.mkdir增加新的文件夹''' import login #调用同一个目录下的文件,如果调用的文件和此文件不在同一个目录,就把被调用的文件放置在第三方库的目录下进行调用
部分内容摘录自菜鸟课程:https://www.runoob.com/python/
Python语言学习:模块的更多相关文章
- python语言学习
前段时间要做视频直播需要编写自动模块,就考虑使用python脚本语言,python的好多语法都是很独特的,比如数据类型不需要预定义,缩进的方式等,另外功能也很强大,豆瓣就是用python写的.我写的部 ...
- Python语言学习之Python入门到进阶
人们常说Python语言简单,编写简单程序时好像也确实如此.但实际上Python绝不简单,它也是一种很复杂的语言,其功能特征非常丰富,能支持多种编程风格,在几乎所有方面都能深度定制.要想用好Pytho ...
- Python语言学习之C++调用python
C++调用python 在C/C++中嵌入Python,可以使用Python提供的强大功能,通过嵌入Python可以替代动态链接库形式的接口,这样可以方便地根据需要修改脚本代码,而不用重新编译链接二进 ...
- #python基础学习模块:marshal 对象的序列化
#标准库地址:https://docs.python.org/2/library/marshal.html"""有时候,要把内存中一个对象持久化保存磁盘或者序列化二进制流 ...
- python语言学习1——初识python
Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 龟叔给Python的定位是“优雅”.“明确”.“简单”,所以Python ...
- python语言学习笔记整理
什么是程序? 程序等于数据结构加算法,那么数据结构是一个静态的东西,算法是一个动态的东西,我们用一个新的语言编写这个程序,我们要考虑到语言也主要由数据结构和算法相关的东西,或静态或动态的东西来构成,所 ...
- [学习总结] python语言学习总结 (三)
函数闭包 定义 延伸了作用域的函数(能访问定义体之外定义的非全局变量 作用 共享变量的时候避免使用了不安全的全局变量 允许将函数与某些数据关联起来,类似于简化版面向对象编程 相同代码每次生成的闭包,其 ...
- python语言学习8——字符串和编码
Unicode编码 计算机只能处理数字,如果要处理文本,就必须把文本转化为数字才能处理 有许多编码标准,但是不同的编码标准有时候会混乱,所以Unicode应运而生 Unicode把所有语言统一到一套编 ...
- python语言学习7——数据类型和变量
整数 python可以处理任意大小的整数,包括负整数,在程序中的表示方法和数学上的写法一样 计算机由于使用二进制,有时候采用十六进制表示整数比较方便,十六进制数用0x前缀 浮点数 简单的小数就直接用小 ...
随机推荐
- 2. react 简书 头部 (header) 样式编写
1. 在 src 下 创建 common 文件下 创建 header 文件夹下 创建 index.js #src/common/header/index.js import React, {Compo ...
- BZOJ 5059 前鬼后鬼的守护
题解: 解法一:用函数斜率什么的,不会,留坑 解法二: 某一个序列都变成一个值那么中位数最优 加入一个元素,与前面那一段区间的中位数比较 x>=mid什么事也不做 x<mid合并两端区间 ...
- Spring(5) -(14) pointcut 语法
AOP的规范本应该由SUM公司提出,但是被AOP联盟捷足先登.AOP联盟指定AOP规范,首先就要解决一个问题,怎么表示切入点,也就是在哪些方法上增强(where) AspectJ 是一个面向切面的框架 ...
- struts2模型驱动传值问题
控制台错误提示: 2020-01-08 18:34:40,292 [http-nio-8080-exec-3] [org.apache.struts2.dispatcher.Dispatcher]-[ ...
- java后台读取excel模板数据
/** * 读取EXCEL模板数据 * * @param excelFilePath excel文件路径 * @param dataRowNum 开始读取数据的行数 * @param keyRowNu ...
- JavaEE--JNDI(上,简介)
参考:https://blog.csdn.net/yan372397390/article/details/50450332 https://www.landui.com/help/show-6158 ...
- C#调用C++系列二:传结构体
这一篇记录下C#调用C++的结构体的方式来使用OpenCV的数据格式,这里会有两种方式,第一种是C#传一个结构体和图像的路径给C++,然后C++将图像加载进来,再把传进来的结构体填满即可,第二种是C# ...
- HyperLedger Cello学习笔记
HyperLedger Cello学习笔记 转载请注明出处:HyperLedger Cello学习笔记 概述 Hyperledger Cello是Hyperledger下的一个子项目,其主要功能如下: ...
- Java并发分析—synchronized
在计算机操作系统中,并发在宏观上是指在同一时间段内,同时有多道程序在运行. 一个程序可以对应一个进程或多个进程,进程有独立的存储空间.一个进程包含一个或多个线程.线程堆空间是共享的,栈空间是私有的.同 ...
- UML-架构分析-阶段
初始阶段:架构概念验证原型--->确定其可行性 细化阶段:因素表.技术备忘录.SAD(软件架构文档) 移交阶段:可能会修改SAD->确保与最终部署版本的一致性 后续进化循环:重温架构性因素 ...