以Mark Lutz著的《Python学习手册》为教程,每天花1个小时左右时间学习,争取两周完成。 --- 写在前面的话

2013-7-23 21:30 学习笔记

1,包导入是把计算机上的目录变成Python的命名空间。包导入时也可以使用import和from语句。目录路径只能以点号.间隔。例如有这样一个目录结构:

dir0/dir1/dir2/mod.py

则导入语句如下:

import dir1.dir2.mod

导入时必须遵循如下规则:

  • dir1和dir2目录中必须含有一个__init__.py文件
  • dir0是容器,不需要__init__.py文件;如果有,也会被忽略
  • dir0必须列在模块搜索路径中(即dir0必须是主目录,或是列在PYTHONPATH中,或是在.pth文件中)

2,__init__.py可以包含Python代码,也可以为空。它可以防止Python搜到名称相同的目录。通常__init__.py中会让一些初始化的代码。Python在首次导入时会自动执行该文件。

3,使用from *语句时,需要在__init__.py文件中用__all__列表定义需要导入的子模块的名称清单。

# File: dir1/__init__.py
x = 1
print 'dir1 init' # File: dir1/dir2/__init__.py
y = 2
print 'dir2 init' # File: dir1/dir2/mod.py
z = 3
print 'in mod.py'

导入包:

import dir1.dir2.mod
print dir1.x
print dir1.dir2.y
print dir1.dir2.mod.z

第一次执行该文件,输出结果:

dir1 init
dir2 init
in mod.py
1
2
3

4,在模块中隐藏数据是一种惯例,而不是一种语法约束。

5,使用from *语句时,Python会先寻找模块内的__all__列表,把其中的变量复制出来;如果没有定义__all__,则会复制开头没有单下划线(_X)的所有变量名。

__all__ = ["var1", "var2", "var3"]

要注意,这些约定只对from *有效,对import无效。

6,有些新的扩展特性需要使用类似如下的代码来导入。例如:

from __future__ import featurename

7,每个模块都有一个__name__内置属性,Python会自动设置它。如果文件以顶层程序文件运行,__name__属性会被设置成'__main__';如果文件被导入,__name__会被设置成客户端所了解的模块名。该特性常用来实现单元测试。例如:

def test():
print "This is a test." if __name__ == '__main__':
test()

8,通过修改sys.path的值可以修改模块的搜索路径。但这中修改只在该进程中才有效,Python结束后一切恢复如初。例如:

import sys
print sys.path
sys.path.append(r'd:\a\b')
print sys.path

输出结果为:

['', 'C:\\Python27\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']
['', 'C:\\Python27\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'd:\\a\\b']

9,imort as扩展可以让模块在脚本中有自定义的名称,这可以让一些名称较长的变量具有短名称。包导入时也可以使用。例如:

import longmodulename as name1
from module imort longname as name2

10,由于import和from语句总是默认在sys.path的绝对路径中寻找模块,这使得如果当前目录下有个模块文件名与系统模块名重名,则会导入系统模块名。通过在from语句中使用.(表示当前目录)和..(表示当前目录的父目录)可以实现相对导入,从而避免这个问题。例如:

from . import D			# imports A.B.D
from .. import E # imports A.E
from ..F import G # imports A.F.G

11,通常情况下,最好不要通过导入和重载来启动程序。

12,函数主体内的代码在函数被调用时采用执行。

13,不能递归imort,即不能A模块importB模块,B模块importA模块

14,通过变量名字符串导入模块有两种方法:

  • 使用exec语句。缺点是每次执行时都必须编译import语句。默认情况下会走当前作用域内执行代码,也可以通过传入参数来自定义。例如:
modname = 'mod'
exec 'import ' + modname
  • 使用内置的__import__函数,如果需要多次执行,这个方法可能会快一点。__import__方法会返回模块对象。
modname = 'mod'
mod = __import__(modname)

Python学习笔记(十四):模块高级的更多相关文章

  1. Python学习笔记十_模块、第三方模块安装、模块导入

    一.模块.包 1.模块 模块实质上就是一个python文件.它是用来组织代码的,意思就是把python代码写到里面,文件名就是模块的名称,test.py test就是模块的名称 2.包 包,packa ...

  2. python学习笔记十四:wxPython Demo

    一.简介 wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的.功能键全的GUI用户界面. wxPython是作为优秀的跨平台GUI库wxWidgets ...

  3. python学习笔记(十四): unittest

    Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 在说unittest之前,先说几个概念: TestC ...

  4. python 学习笔记十四 jQuery案例详解(进阶篇)

    1.选择器和筛选器 案例1 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  5. python学习笔记(十 四)、web.py

    使用web.py 通过python进行网页的编写,下面我们来简单了解一哈web.py 的使用 1 url处理 使用特定的url结构来解析我们发送的请求.如下面所示: urls = ( '/login' ...

  6. python 学习笔记(十四)有依赖关系的接口开发

    接口开发中存在很多有依赖关系的接口,例如:BBS中发帖的时候就需要进行校验用户是否登录,那么此时发帖的接口就与用户登录接口有依赖关系.在发帖时就需要先获取用户的session,与当前登录用户进行校验对 ...

  7. python学习笔记(十四)python实现发邮件

    import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart u ...

  8. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  9. Python学习笔记(四)函数式编程

    高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...

  10. Python学习笔记(四)

    Python学习笔记(四) 作业讲解 编码和解码 1. 作业讲解 重复代码瘦身 # 定义地图 nav = {'省略'} # 现在所处的层 current_layer = nav # 记录你去过的地方 ...

随机推荐

  1. STM32F412应用开发笔记之九:移植FreeRTOS到F412ZG平台

    在开发实际应用系统时,我们经常需要考虑数据的实时性和多任务,嵌入式实时操作系统的出现为实现这一目的提供了很好的助力.FreeRTOS是近年来比较流行的嵌入式实时操作系统,而且是开源免费的,STM32C ...

  2. VM 安装 linux Enterprise_R5_U4_Server_I386_DVD教程图解

    ocp 学习笔记 20161126--------linux 笔记整理 一:安装linux系统环境: 1:linux 系统安装包下载路径:链接:链接: https://pan.baidu.com/s/ ...

  3. -webkit-line-clamp 限制多行文字

    一.应用 CSS代码: .box { width: 100px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: ve ...

  4. laravel 接口跨域

    最方便的方法,新建一个middleWare,把这个middleware加入到全局中间件,所有的请求,都会经过这个中间件的过滤. php artisan make:middleware CrossHtt ...

  5. 性能测试三十六:内存溢出和JVM常见参数及JVM参数调优

    堆内存溢出: 此种溢出,加内存只能缓解问题,不能根除问题,需优化代码堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java h ...

  6. POJ 3050 Hopscotch【DFS带回溯】

    POJ 3050 题意: 1.5*5的方阵中,随意挑一格,记住这个格子的数字 2.可以上下左右走,走5次,每走一次记录下所走格子的数字 3.经过以上步骤,把所得6个数字连起来,形成一串数字.求共可以形 ...

  7. 高版本js实现live

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 自动化部署之gitlab权限管理--issue管理

    一.删除测试项目 先进入项目,选择编辑项目 二.拉取到最下方,移除项目 三 输入你要删除的项目名称 二 创建Group,User,Project 2.1 创建一个组,组名为java Group pat ...

  9. BZOJ1266 [AHOI2006]上学路线route Floyd 最小割 SAP

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1266 题意概括 一个无向图,第一问:从1~n的最短路. 第二问,删除价值总和最小的边,使得1~n的 ...

  10. P1510 精卫填海

    P1510 精卫填海二分答案二分背包容量,判断能否满足v.判断的话就跑01背包就好了. #include<iostream> #include<cstdio> #include ...