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前缀 浮点数 简单的小数就直接用小 ...
随机推荐
- 文献阅读报告 - Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks
paper:Gupta A , Johnson J , Fei-Fei L , et al. Social GAN: Socially Acceptable Trajectories with Gen ...
- PrepareStatement对象进行批处理的典型步骤顺序
https://www.yiibai.com/jdbc/preparestatement-batching-example.html 以下是使用PrepareStatement对象进行批处理的典型步骤 ...
- 关于torch.nn.Conv2d的笔记
先看一下CLASS有哪些参数: torch.nn.Conv2d( in_channels, out_channels, kernel_size, stride=1, padding=0, dilati ...
- @SpringBootApplication 标注非引导类
1.引导类 public class App { public static void main(String[] args) { SpringApplication.run(WebConfigura ...
- VScode 修改中文字体
打开vscode ctrl+,打开设置 找到font,第一个是首选的英文字体,第二个是中文字体.
- C++ 一个exe的两个运行实例之间共享数据
#pragma data_seg("Shared") volatile int iNum = 0; #pragma data_seg() #pragma comment(linke ...
- C#调用C++系列二:传结构体
这一篇记录下C#调用C++的结构体的方式来使用OpenCV的数据格式,这里会有两种方式,第一种是C#传一个结构体和图像的路径给C++,然后C++将图像加载进来,再把传进来的结构体填满即可,第二种是C# ...
- Angular表单 (一)表单简介
Angular 表单 angular提供了两种不同的方法来通过表单处理用户输入:响应式表单和模板驱动表单.二者都从视图中捕获用户输入事件.验证用户输入.创建表单模型.修改数据模型,并提供跟踪这些更改的 ...
- no.9亿级用户下的新浪微博平台架构读后感
微博平台的第三代技术体系,使用正交分解法建立模型:在水平方向,采用典型的三级分层模型,即接口层.服务层与资源层:在垂直方向,进一步细分为业务架构.技术架构.监控平台与服务治理平台. 水平分层 (1)接 ...
- python的debug神器PySnooper
同事给我推荐了这个调试神器,一直没工夫看,今天看了下. 原文链接: 史上最方便的Python Debug工具|腾讯技术说 体验了下,感觉最好的用法:1.优先逐行调试:2.一些复杂状态处理或者偶现的bu ...