一、模块

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语言学习:模块的更多相关文章

  1. python语言学习

    前段时间要做视频直播需要编写自动模块,就考虑使用python脚本语言,python的好多语法都是很独特的,比如数据类型不需要预定义,缩进的方式等,另外功能也很强大,豆瓣就是用python写的.我写的部 ...

  2. Python语言学习之Python入门到进阶

    人们常说Python语言简单,编写简单程序时好像也确实如此.但实际上Python绝不简单,它也是一种很复杂的语言,其功能特征非常丰富,能支持多种编程风格,在几乎所有方面都能深度定制.要想用好Pytho ...

  3. Python语言学习之C++调用python

    C++调用python 在C/C++中嵌入Python,可以使用Python提供的强大功能,通过嵌入Python可以替代动态链接库形式的接口,这样可以方便地根据需要修改脚本代码,而不用重新编译链接二进 ...

  4. #python基础学习模块:marshal 对象的序列化

    #标准库地址:https://docs.python.org/2/library/marshal.html"""有时候,要把内存中一个对象持久化保存磁盘或者序列化二进制流 ...

  5. python语言学习1——初识python

    Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 龟叔给Python的定位是“优雅”.“明确”.“简单”,所以Python ...

  6. python语言学习笔记整理

    什么是程序? 程序等于数据结构加算法,那么数据结构是一个静态的东西,算法是一个动态的东西,我们用一个新的语言编写这个程序,我们要考虑到语言也主要由数据结构和算法相关的东西,或静态或动态的东西来构成,所 ...

  7. [学习总结] python语言学习总结 (三)

    函数闭包 定义 延伸了作用域的函数(能访问定义体之外定义的非全局变量 作用 共享变量的时候避免使用了不安全的全局变量 允许将函数与某些数据关联起来,类似于简化版面向对象编程 相同代码每次生成的闭包,其 ...

  8. python语言学习8——字符串和编码

    Unicode编码 计算机只能处理数字,如果要处理文本,就必须把文本转化为数字才能处理 有许多编码标准,但是不同的编码标准有时候会混乱,所以Unicode应运而生 Unicode把所有语言统一到一套编 ...

  9. python语言学习7——数据类型和变量

    整数 python可以处理任意大小的整数,包括负整数,在程序中的表示方法和数学上的写法一样 计算机由于使用二进制,有时候采用十六进制表示整数比较方便,十六进制数用0x前缀 浮点数 简单的小数就直接用小 ...

随机推荐

  1. 2. react 简书 头部 (header) 样式编写

    1. 在 src 下 创建 common 文件下 创建 header 文件夹下 创建 index.js #src/common/header/index.js import React, {Compo ...

  2. BZOJ 5059 前鬼后鬼的守护

    题解: 解法一:用函数斜率什么的,不会,留坑 解法二: 某一个序列都变成一个值那么中位数最优 加入一个元素,与前面那一段区间的中位数比较 x>=mid什么事也不做 x<mid合并两端区间 ...

  3. Spring(5) -(14) pointcut 语法

    AOP的规范本应该由SUM公司提出,但是被AOP联盟捷足先登.AOP联盟指定AOP规范,首先就要解决一个问题,怎么表示切入点,也就是在哪些方法上增强(where) AspectJ 是一个面向切面的框架 ...

  4. struts2模型驱动传值问题

    控制台错误提示: 2020-01-08 18:34:40,292 [http-nio-8080-exec-3] [org.apache.struts2.dispatcher.Dispatcher]-[ ...

  5. java后台读取excel模板数据

    /** * 读取EXCEL模板数据 * * @param excelFilePath excel文件路径 * @param dataRowNum 开始读取数据的行数 * @param keyRowNu ...

  6. JavaEE--JNDI(上,简介)

    参考:https://blog.csdn.net/yan372397390/article/details/50450332 https://www.landui.com/help/show-6158 ...

  7. C#调用C++系列二:传结构体

    这一篇记录下C#调用C++的结构体的方式来使用OpenCV的数据格式,这里会有两种方式,第一种是C#传一个结构体和图像的路径给C++,然后C++将图像加载进来,再把传进来的结构体填满即可,第二种是C# ...

  8. HyperLedger Cello学习笔记

    HyperLedger Cello学习笔记 转载请注明出处:HyperLedger Cello学习笔记 概述 Hyperledger Cello是Hyperledger下的一个子项目,其主要功能如下: ...

  9. Java并发分析—synchronized

    在计算机操作系统中,并发在宏观上是指在同一时间段内,同时有多道程序在运行. 一个程序可以对应一个进程或多个进程,进程有独立的存储空间.一个进程包含一个或多个线程.线程堆空间是共享的,栈空间是私有的.同 ...

  10. UML-架构分析-阶段

    初始阶段:架构概念验证原型--->确定其可行性 细化阶段:因素表.技术备忘录.SAD(软件架构文档) 移交阶段:可能会修改SAD->确保与最终部署版本的一致性 后续进化循环:重温架构性因素 ...