Python学习 Part4:模块
1. 模块是将定义保存在一个文件中的方法,然后在脚本中或解释器的交互实例中使用。模块中的定义可以被导入到其他模块或者main模块。
模块就是一个包含Python定义和语句的文件。文件名就是添加了.py扩展名的模块名。
在当前目录下建立一个包含以下内容的fibo.py文件:

ef fib(n):
a,b=0,1
while b<n:
print(b,end=' ')
a,b=b,a+b
print() def fib2(n):
result=[]
a,b=0,1
while b<n:
result.append(b)
a,b=b,a+b
return result

然后利用import fibo命令导入这个模块,便可直接引入fibo中定义的函数名

>>> import fibo
>>> fibo.fib(100)
1 1 2 3 5 8 13 21 34 55 89
>>> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'

如果频繁使用一个函数,可以赋予一个本地变量:
>>> fib=fibo.fib
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
>>>
2. 深入Python模块
除了包含函数定义以外,模块也可以包含可执行语句,这些语句一般用来初始化模块,他们仅在第一次被导入的地方执行一次。
每个模块都有自己私有的符号表,被模块内所有的函数定义作为全局符号表使用。
还有一种import语句的变体,可以从一个模块中将名字直接导入到当前模块的符号表中,但是这种方式不会把操作的模块名引入到当前符号表中
>>> from fibo import fib,fib2
>>> fib(400)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
>>>
更进一步,还有一种导入模块中定义的所有名称的变体(这会导入那些除了以下划线开头的名称):
>>> from fibo import *
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
>>>
注意:在一个解释器会话中每个模块仅被导入一次,所以,如果修改了模块,必须重启解释器-或者如果只是一个想要交互测试的模块,使用import.reload()方法。例如:
>>> import imp
>>> imp.reload(modulename)
2.1 模块的搜索路径
当一个名spam的模块被导入时,解释器首先会在当前目录搜索一个名为spam.py的文件,然后是在环境变量PYTHONPATH中定义的目录列表。如果没有定义PYTHONPATH,或者按照里面的路径没有找到文件,解释器会继续在Python默认安装路径中搜索。
实际上,模块都是在变量sys.path定义的目录列表中查找:
>>> import sys
>>> sys.path
['', 'C:\\Python33\\Lib\\idlelib', 'C:\\Windows\\system32\\python33.zip', 'C:\\Python33\\DLLs', 'C:\\Python33\\lib', 'C:\\Python33', 'C:\\Python33\\lib\\site-packages']
在每个Python解释器中,变量sys.ps1和sys.ps2分别定义了主提示符和次提示符使用的字符串(仅在Python命令行有效,在Python IDLE 中无效)

>>> import sys
>>> sys.ps1
'>>> '
>>> sys.ps2
'... '
>>> sys.ps1='>:'
>:print('Yuck!')
Yuck!
>:

Python学习 Part4:模块的更多相关文章
- Python学习--Selenium模块
1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台
- Python学习--Selenium模块学习(2)
Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制 ...
- Python学习---重点模块的学习【all】
time [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...
- Python学习之模块进程函数详解
今天在看<Beginning Linux Programming>中的进程相关部分,讲到Linux几个进程相关的系统函数: system , exec , fork ,wait . Pyt ...
- python学习——常用模块
在学习常用模块时我们应该知道模块和包是什么,关于模块和包会单独写一篇随笔,下面先来了解有关在python中的几个常用模块. 一.什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文 ...
- Python学习之模块基础
模块就是程序 编写以下简单代码 print('hello python') 并将py文件保存在c盘的python(假设新建)文件下,通过pycharm的Terminal 或者windom命令窗口调出p ...
- python学习之模块导入,操作邮件,redis
python基础学习06 模块导入 导入模块的顺序 1.先从当前目录下找 2.当前目录下找不到,再从环境变量中找,如果在同时在当前目录和环境变量中建立相同的py文件,优先使用当前目录下的 导入模块的实 ...
- Python学习——struct模块的pack、unpack示例
he struct module includes functions for converting between strings of bytes and native Python data t ...
- python学习day15 模块(重点)
模块(重点) python2,与py3的区别 py2:range() 在内存中立即把所有的值都创建,xrange() 不会再内存中立即创建,而是在循环时边环边创建. py3:range() 不会再内存 ...
随机推荐
- React native开发中常见的错误
react native环境搭建请移步:react native环境搭建 这里说说react native创建完成之后,运行中出现的常见问题, 问题1: java.lang.RuntimeExcept ...
- (十一)延时执行、圆角(可实现圆形label)、代理设计模式
延时执行: 使用控件的performSelector...方法,例如用于移除,可以写在一行. [lab performSelector:@selector(removeFromSuperview) w ...
- Linux学习笔记 --iptables防火墙配置
iptables防火墙配置 一.防火墙简介 1.功能: 1)通过源端口,源IP地址,源MAC地址,包中特定标记和目标端口,IP,MAC来确定数据包是否可以通过防火墙 2)分割内网和外网[附带的路由器的 ...
- Leetcode_53_Maximum Subarray
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43989997 Find the contiguous su ...
- Callable与Future
本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>的学习笔记. 在前面写的代码中,所有的任务执行也就执行了,run方法的返回值为空. 这一节我们说的Callable就是一个可以带 ...
- Visual studio2010和Modelsim配置SystemC开发(转)
本文转自一博文. 一.编译System库 1. 下载SystemC library source code, 到http://www.systemc.org注册会员账号后,即可下载SystemC li ...
- CMake添加-D_DEBUG宏
Linux下Debug版不会自动添加 _DEBUG宏,只有NDEBUG宏可用. cmake ../src _DCMAKE_BUILD_TYPE=Debug -D_DEBUG 会报错: -D_DEBUG ...
- 【45】java的封装剖析
类是构造对象的模板或蓝图. 封装的一些概念 从形式上看,封装不过是将数据和行为组合到一个包中,并对对象的使用者隐藏了数据的实现形式. 每个对象都包含实例域和方法.实例域的集合代表了一个集合的状态,通过 ...
- DB Query Analyzer 6.01 is released, SQL Execute Schedule function can be used
DB Query Analyzer is presented by Master Gen feng, Ma from Chinese Mainland. It has English versi ...
- linux下分割和重组文件
linux shell命令里的split和cat命令可以轻松完成这两个功能,举个例子来说,比如一个1GB大小的文件foo.zip,以100M为块分割: 分割: split -b 100M -d foo ...