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‘]

不过,依然是有问题的,大小王不应该分类型(黑、红、梅、方),显然上面的结果不够完美。

时间: 2024-10-06 14:44:49

python基础学习(十二)的相关文章

python基础-第十二篇-12.1jQuery基础与实例

一.查找元素 1.选择器 基本选择器 $("*") $("#id") $(".class") $("element") $(".class,p,div") 层级选择器 $(".outer div")  后代 $(".outer>div")  子代 $(".outer+div") .outer后面的兄弟div(后面一个) $(".ou

python基础学习(二)--函数

return返回值: python函数都有返回值,函数体内无return,默认返回值None, 函数参数: 1.普通参数 严格按照顺序,将实际参数赋值给形式参数,一一对应. 例: def send(xxx,z,content): print(xxx,z,content) send("yy","dd",'niubi') 2.默认参数 必须放在参数列表的最后,且实际参数可以缺省和覆盖. 例: def send(xxx,z,content=123): print(xxx,

python基础(十二)

一. Mysql的介绍 1.1. 数据库介绍 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大量数据量.所谓的关系型数据库,是建立的关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据. RDBMS即关系数据库管理系统的特点: 1.数据以表格

Python基础学习(二)

Python列表 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列都可以进行的操作包括索引,切片,加,乘,检查成员. 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使

python基础学习(二)注释和算术运算符

注释 1. 注释的作用 注释就是对某些代码进行标注说明,以增强代码的可读性.我们在写程序的时候,编写的某一部分代码的意图不太明显,这时候就需要对这一部分代码加以说明,来明确这一部分到的意图.一般的编程语句有单行注释和多行注释 2. 单行注释 单行注释是以#开头,#右边的所有的文字都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用 示例代码如下(为了保障可读性,#后面一般要加上一个空格): # 这是单行注释 print("Hello word") 在代码的后面加上单行注释 为了

CSS基础学习十二:CSS样式

CSS样式包括:CSS背景,CSS文本,CSS字体,CSS列表,CSS表格,CSS轮廓等样式.我们就目前用到的 CSS样式简单地介绍一下. 下面只是总结性的一些东西,具体的可以参考:CSS样式教程 (1)背景色 background-color 设置背景颜色 可能的值: 颜色名称:如red,yellow,blue 十六进制颜色值:如#ffffff rgb颜色值:如rgb(255,255,255(十六进制为ff)) transparent:默认的,背景颜色透明 inherit:继承父元素的背景色

python基础(十二)--小知识点汇总及编码进阶

'''python2 python3 '''#python2#print()  print 'abc'#range()   xrange() 生成器# raw_input() #python3#print('abc')#range()# input() # = 赋值 == 比较值是否相等   is 比较,比较的是内存地址  id(内容)# li1 = [1,2,3]# li2 = li1# li3 = li2# print(id(li1),id(li2)) #数字,字符串 小数据池#数字的范围

Python基础学习(十)

Python I/O模型 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 概念说明 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件

python基础学习 第十七天 (二)

python基础学习 第十七天 (二) 一. 魔法方法 定义:双下方法是特殊方法,他是解释器提供的 由爽下划线加方法名加双下划线 方法名的具有特殊意义的方法,双下方法主要是python源码程序员使用的,我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更有益于我们阅读源码. 调用:不同的双下方法有不同的触发方式,就好比盗墓时触发的机关一样,不知不觉就触发了双下方法,例如:init 1.1 len class B: def __len__(self): print(666) b = B()

进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量.所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来