python基础学习笔记(十二)
模块
前面有简单介绍如何使用import从外部模块获取函数并且为自己的程序所用:
>>> import math
>>> math.sin(0) #sin为正弦函数
0.0
模块是程序
任何python程序都可以作为模块导入。假设写如下程序,并且将它保存为以C:\python\hello.py
#hello.py
print "hello,world!"
下面通过python解释器调用:
>>> import sys
>>> sys.path.append('c:/python')
>>> import hello
hello,world!
再来一次:
>>> import hello >>>
怎么这次没结果?因为导入模块并不意味着在导入进执行某些操作。它们主要用于定义,比如变量、函数和类等。此外,因为只需要定义这些东西一次,导入模块多次和导入一次的效果是一样的。
模块用于定义
1、在模块中定义函数
假设我们编写了一个类似代码的模块,将其保存为hello2.py 文件。
#hello2.py
def hello():
print "hello, world !"
保存后,可以像下面这样导入:
>>> import hello2
模块会被执行,这意味着hello函数在模块的作用被定义了。因此可以通过以下方式来访问函数:
>>> hello2.hello()
hello.world!
2、在模块中增加测试代码
模块用来定义函数、类和其他内容,有时候在模块中添加一些检查模块本身是否正常工作的测试代码是非常有用的。

#hello3.py def hello():
print "hello.world!" def test():
hello() if __name__ == '__main__': test()

f __name__ == '__nain__' 解释:
python文件的后缀为.py ,.py文件可以用来直接运行,就像一个独立的小程序;也可以用来作为模块被其它程序调用。
__name__是模块的内置属性,如果等于'__main__' 侧表示直接被使用,那么将执行方法test()方法;如果是被调用则不执行 if 判断后面的test()方法。
执行结果:

>>> import hello3 #表示hello3模块被调用,不执行test方法,所以没有输出 >>> hello3.hello() #表示程序执行,调用test方法 hello.world! >>> hello3.hello() #这里是不是可以反复调用test方法 hello.world!

让模块可用
前面的例子中,我们改变了sys.path,其中包含了一个目录列表,解释器在该列表中查找模块。在理想情况下,一开始sys.path本身就应该包含正确的目录,有两方法可以做到这一点: 一是将模块放置在合适的位置,别外一种是告诉解释器去哪里查找需要的模块。
1、将模块放置在正确的位置
来看看python解释器会从哪里查找模块

>>> import sys,pprint
>>> pprint.pprint(sys.path)
['',
'I:\\Python27\\Lib\\idlelib',
'C:\\Windows\\system32\\python27.zip',
'I:\\Python27\\DLLs',
'I:\\Python27\\lib',
'I:\\Python27\\lib\\plat-win',
'I:\\Python27\\lib\\lib-tk',
'I:\\Python27',
'I:\\Python27\\lib\\site-packages',
'c:/python']

尽管这些目录下都可以被找到,但site-packages 目录是最佳选择。
2、告诉编译器去哪里找
以下情况是告诉编译器去哪儿找的原因:
** 不希望将自己的模块填满python解释器的目录
** 没有在python解释器目录中存储文件的权限
** 想将模块放到其它位置
编辑sys.path ,前面就已经使用了
>>> import sys
>>> sys.path.append('c:/python')
但更优雅的做法是配置pythonpath环境变量,方法和配置java 环境变量类似。
文档
模块信息的自然来源是文档,除了通过python书籍或标准python文档来查看某个函数的含义,也可以通过下面方式:

>>> print range.__doc__
range([start,] stop[, step]) -> list of integers Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
These are exactly the valid indices for a list of 4 elements.

这样就获得了关于range函数的精确描述。
time 模块
time模块所包括的函数能够实现 以下功能:获得当前时间,操作时间和日期,从字符串读取时间以及格式化时间为字符串。
time模块中重要的函数

time.asctime将当前时间格式化为字符串:
>>> time.asctime()
'Thu May 16 00:00:08 2013'
random模块
random模块包括返回随机的函数,可以用于模拟或者用于任何产生随机输出的程序。
random模块中的一些重要函数:

下面介绍使用random模块的例子,还需要用到time模块中的函数。
例1:首先获得代表时间间隔(2013年)限制的实数,这可以通过时间元组的方式来表示日期(使用 -1表示一周的某天,一年中某天和夏令时,以例让python自己计算),并且对这些元组调用mktime :

from random import *
from time import *
data1 = (2013 ,1,1,0,0,0,-1,-1,-1)
time1 = mktime(data1)
data2 = (2014 ,1,1,0,0,0,-1,-1,-1)
time2 = mktime(data2) #然后在这个范围内生成随机数
>>> random_time = uniform(time1,time2)
# 可以将数字转换成易读的日期形式
>>> print asctime(localtime(random_time))
Fri Jan 18 18:23:16 2013

例2:下面一个例子,假设三个人打牌,首先要保证54张牌没有重复的,第人发手里18张(斗地主就不能平均分配了)。

>>> values = range(1,13) + 'dwang xwang'.split() #定义13个数字与大小王
>>> suits = 'hei hong mei fang '.split() # 定义牌的四种类型(黑、红、梅、方)
>>> deck = ['%s of %s' %(v ,s ) for v in values for s in suits] #循环嵌套将其循环组合
>>> from pprint import pprint #调用pprint 模块
>>> pprint (deck [:18]) #输出18张牌
['1 of hei',
'1 of hong',
'1 of mei',
'1 of fang',
'2 of hei',
'2 of hong',
'2 of mei',
'2 of fang',
'3 of hei',
'3 of hong',
'3 of mei',
'3 of fang',
'4 of hei',
'4 of hong',
'4 of mei',
'4 of fang',
'5 of hei',
'5 of hong'] #显然上面的输出太整齐,调用随机函数,随机一点
>>> from random import shuffle
>>> shuffle(deck)
>>> pprint(deck[:18])
['5 of fang',
'6 of hong',
'5 of mei',
'dwang of fang',
'xwang of fang',
'10 of hong',
'7 of mei',
'12 of hong',
'6 of hei',
'12 of hei',
'7 of hei',
'8 of hei',
'4 of fang',
'dwang of hei',
'11 of hei',
'12 of fang',
'5 of hei',
'2 of hong']

不过,依然是有问题的,大小王不应该分类型(黑、红、梅、方),显然上面的结果不够完美。
python基础学习笔记(十二)的更多相关文章
- Python基础学习笔记(二)变量类型
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-chinese-encoding.html 3. http://w ...
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...
- python基础学习(十二)
模块 前面有简单介绍如何使用import从外部模块获取函数并且为自己的程序所用: >>> import math >>> math.sin(0) #sin为正弦函数 ...
- python基础学习(十二)变量进阶
目录 1. 变量的引用 1.1 引用的概念 1.2 变量引用 的实例 1.3 函数的参数和返回值的传递 2. 可变和不可变类型 哈希 (hash) 3. 局部变量和全局变量 3.1 局部变量 3.2 ...
- python基础学习笔记(二)
继续第一篇的内容,讲解,python的一些基本的东西. 注释 为了让别人能够更容易理解程序,使用注释是非常有效的,即使是自己回头再看旧代码也是一样. >>> #获得用户名: > ...
- JavaBean(web基础学习笔记十二)
一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...
- 【Python】学习笔记十二:模块
模块(module) 在Python中,一个.py文件就是一个模块.通过模块,你可以调用其它文件中的程序 引入模块 先写一个first.py文件,内容如下: def letter(): print(' ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
随机推荐
- IntelliJ IDEA 2017 永久注册方法
https://blog.csdn.net/weixin_39913200/article/details/80859897 在安装的idea下面的bin目录下面有2个文件 : 一个是idea64.e ...
- EntityFramework Code-First 简易教程(五)-------领域类配置
前言:在前篇中,总是把领域类(Domain Class)翻译成模型类,因为我的理解它就是一个现实对象的抽象模型,不知道对不对.以防止将来可能的歧义,这篇开始还是直接对Domain Class直译. 前 ...
- python写一个双色球彩票计算器
首先声明,赌博一定不是什么好事,也完全没有意义,不要指望用彩票发财.之所以写这个,其实是用来练手的,可以参考这个来预测一些其他的东西,意在抛砖引玉. 啰嗦完了,马上开始,先上伪代码 打开网址 读取内容 ...
- Linux regulator framework(1) - 概述【转】
转自蜗窝科技:http://www.wowotech.net/pm_subsystem/regulator_framework_overview.html 1. 前言 Regulator,中文名翻译为 ...
- shell 的条件表达式及逻辑操作符简单介绍
查看系统的shell: cat /etc/shells 文件测试表达式: -f 文件 文件存在且为普通文件则真,即测试表达式成立. -d 文件 文件存在且为目录文件则真,即测试表达式成立. -s ...
- 【PAT】B1082 射击比赛(20 分)
水提水题,直接贴代码啦 #include<cstdio> #include<algorithm> using namespace std; struct ppp{ int id ...
- PLS-00306: 调用 'SYNCRN' 时参数个数或类型错误
System.Data.OracleClient.OracleException (0x80131938): ORA-00604: 递归 SQL 级别 1 出现错误 ORA-06550: 第 1 行, ...
- 03LaTeX学习系列之---TeXworks的使用
目录 03TeXworks的使用 目录 前言 (一)Texworks的认识 1.TeXworks的安装 2.TeXworks的优点 3.TeXworks的界面 (二)Texworks的编译与查看 1. ...
- EJB3.0中的session bean以及MDB解析
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/aboy123/article/details/24587133 大型业务系统面临的主要问题就是高并发 ...
- Tribonacci UVA - 12470 (简单的斐波拉契数列)(矩阵快速幂)
题意:a1=0;a2=1;a3=2; a(n)=a(n-1)+a(n-2)+a(n-3); 求a(n) 思路:矩阵快速幂 #include<cstdio> #include<cst ...