【29】Python浅入六个常用模块

1.使用copy模块
copy模块包含了制作对象的拷贝的函数。当写程序时,有时候你可能需要多个相同的对象。这时候就可以用copy模块进行拷贝。
例如:
我们创建一个Ad类,它有一个init函数,参数为name(名字),school_record(学习成绩),color(颜色)

class Ad:
     def __init__(self,name,school_record,color):
            self.name=name
            self.school_record=school_record
            self.color=color

下面我们可以创建一个Ad类的新对象。
Harry=Ad("alex",80,"red")
假设我们想要多复制几条就可以使用copy模块

>>>import copy
>>>Harry=Ad("alex",80,"red")
>>>Harriet=copy.copy(Harry)
>>>print(Harry.name)
>>>print(Harriet.name)
alex
alex

在这个例子中我们创建对象并把它标记为Harry,然后我们创建了这个对象的一个拷贝,并标记为Harriet。尽管他们都是同一个人的成绩,但它们是两个完全不同的对象。在这里它的作用只是少写几行代码,但当对象更加复杂时,拷贝就更有用武之地。

>>>Harry=Ad("alex",80,"red")
>>>Carriet=Ad("Ying",99,"while")
>>>Jack=Ad("Li",30,"black")
>>>my_animals=[Harry,Carriet,Jack]
>>>more_animals=copy.copy(my_animals)
>>>print(more_animals[0].name)
>>>print(more_animals[1].name)

在前三行,我们创建了三个对象Harry,Carriet和Jack。在第四行我们将对象添加到my_animals列表中。我们用copy复制了这个列表。最后打印结果

alex
Ying

如果我们改变了某个学员的成绩,来看看将会发生什么?

>>>my_animals[0].name=10
>>>print(my_animals[0].name)
>>>print(more_animals[0].name)
10
10

太奇怪了,我们改的不是my_animals中的成绩嘛,为什么两个列表的值都变了?
成绩都变了,是因为copy实际上只做了浅拷贝,也就是说它不会拷贝我们要拷贝的对象中的对象。在这里,它拷贝的是list对象,但并没有copy其中的每个对象。因此我们得到的是一个新列表,但其中的对象并不是新的,列表more_animals中还是那三个同样的对象。
同样用这些变量,如果我们给第一个列表(my_animals)添加一个新的Ad的话,它不会出现拷贝(more_animals)中。下面可以进行验证

>>>salay=[‘Tom‘,55,‘pick‘]
>>>my_animals.append(salay)
>>>print(len(my_animals))
>>>print(len(more_animals))
4
3

结果如你所见!
在copy模块中的另一函数deepcopy,则会创建被拷贝对象中的所有对象的拷贝。当我们用deepcopy来复制my_animals时,我们会得到一个新列表,它的内容是对所有对象的拷贝。这样的结果是,对于原来列表中Ad对象的改动不会影响到新列表。看下面例子:

>>>more_animals=copy.deepcopy(my_animals)
>>>my_animals[0].name="ALEX"
>>>print(my_animals[0].name)
>>>print(more_animals[0].name)
ALEX
alex

总结:copy模块中两种函数浅拷贝copy与深拷贝deepcopy的区别。
当copy一个列表时。浅拷贝不会对列表里面的对象进行拷贝,所以当被拷贝列表里面新增对象的话,浅拷贝不会新增对象。而如果对被拷贝列表进行修改时,浅拷贝会跟着变动。而深拷贝会对列表里面的对象进行拷贝相当于独立一个列表,所以当被拷贝列表新增对象时,深拷贝也会新增对象,而如果对被拷贝列表进行修改时,深拷贝不会变化。

2.使用keyword模块
keyword模块记录的python自身的一些关键词,这些关键词是不可以被拿来做变量名使用的。可以使用如下方式查看包含哪些关键词。

>>>import keyword
>>>print(keyword.kwlist)
[‘False‘, ‘None‘, ‘True‘, ‘and‘, ‘as‘, ‘assert‘, ‘break‘, ‘class‘, ‘continue‘, ‘def‘, ‘del‘, ‘elif‘, ‘else‘, ‘except‘, ‘finally‘, ‘for‘, ‘from‘, ‘global‘, ‘if‘, ‘import‘, ‘in‘, ‘is‘, ‘lambda‘, ‘nonlocal‘, ‘not‘, ‘or‘, ‘pass‘, ‘raise‘, ‘return‘, ‘try‘, ‘while‘, ‘with‘, ‘yield‘]

3.使用random模块
可以通过random模块获取随机数。random模块中最有用的几个函数是randint,choice还有shuffle。
3.1 randint函数用于随机挑选一个数字

import random
num=random.randint(1,10)
print(num)

这里可以写个猜数字游戏。

import random
into=int(random.randint(1,100))
while True:
    num=int(input("Please input number: "))
    if num==into:
        print("恭喜你")
        break
    elif num > into:
        print("big")
    else:
        print("small")

运行结果:

Please input number: 50
small
Please input number: 70
big
Please input number: 60
small
Please input number: 69
恭喜你

3.2 choice函数用于从列表中随机挑选一个

>>>import random
>>>lists=[‘red‘,‘pick‘,‘while‘,‘black‘,‘yellow‘]
>>>t=random.choice(lists)
>>>print(t)
black

3.3 shuffle函数对列表重新"洗牌",适用于类似扑克牌类的游戏。

>>>import random
>>>lists_shuffle=[‘red‘,‘pick‘,‘while‘,‘black‘,‘yellow‘]
>>>random.shuffle(lists_shuffle)
>>>print(lists_shuffle)
[‘red‘, ‘yellow‘, ‘while‘, ‘black‘, ‘pick‘]

4.使用sys模块
在sys模块中有一些系统函数,用来控制python shell程序自身。
我们来看下如何使用exit函数,stdin和stdout对象,还有version变量。

4.1用exit函数来退出shell程序

import sys
sys.exit()

4.2从stdin对象读取
sys模块中的stdin对象(standard input标准输入)会提示用户输入信息,读取到shell程序中并在程序中使用。这个对象有个readline函数,它能读取从键盘输入的一行文本,直到用户按了回车。

>>>import sys
>>>v=sys.stdin.readline()
this is Python sys.
>>>print(v)
this is Python sys.

遗留问题:readline和input函数区别?

4.3从stdout对象来写入
与stdin对象不同,stdout对象(standard output标准输出)可以用来向shell程序写消息,而不是从中读入。在某些方面它与print相同,但是stout是一个文件对象。

>>>import sys
>>>sys.stdout.write("this is sys")
this is sys

4.4我们来看下当前python版本

>>>import sys
>>>print(sys.version)
3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]

5.使用time模块
python中的time模块包含了表示时间的函数,不过可能与你期望不太一样。

>>>import time
>>>print(time.time())
1521968583.4384

对于time()的调用所返回的数字实际上是从1970年1月1日00:00:00AM以来的秒数。单独看起来这种罕见的表示形式没法直接使用它,但它有它的目的。你可以用来记录一段程序执行的多长时间。

import time
def lost_of(max):
    start_time=time.time()
    for i in range(max):
        print(i)
    stop_time=time.time()
    print("花费时间:%s" %(stop_time-start_time))

lost_of(999)

5.1用asctime转换日期
asctime函数是以日期的元组为参数,并把它转换成更可读的形式。不用任何参数调用,asctime就会以可读的形式返回当前的日期和时间。

>>>import time
>>>print(time.asctime())
Sun Mar 25 17:10:46 2018

5.2用localtime来得到日期和时间

>>>import time
>>>print(time.localtime())
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=25, tm_hour=17, tm_min=11, tm_sec=36, tm_wday=6, tm_yday=84, tm_isdst=0)

tm_year:年份
tm_mon:月份
tm_mday:日期
tm_hour:小时
tm_min:分钟
tm_sec:秒
tm_wday:礼拜几(0等于礼拜一)
tm_yday:从1月1至今的天数
tm_isdst:夏令时(0不是夏令时)

5.3用sleep来休息一会儿

import time
for x in range(1,20):
    print(x)
    time.sleep(1)  ###这里sleep(1),表示休息1s

6.使用pickle模块
pickle模块可以用来保存信息,原意为"腌菜"。pickle模块用来把python对象转换成可以方便写入的文件和从文件读取的形式。
如果你在写一个游戏并且想保存玩家的进度信息的胡啊,可能会用得上pickle。
例如:给下列游戏信息增加一个保存功能。
我们可以把这个字典保存到文件里,只要已写入的方式打开文件,然后调用pickle里面的dump函数,像这样:

import pickle

game_dict={
    "name":"Dy",
    "ID":1203,
    "player":"Tank",
    "money":9999
}
t=open("save_game","wb")  ###以二进制写入方式打开文件
pickle.dump(game_dict,t) ###用dump,将game_dict信息写入文件saver_game中。这一过程叫序列化
t.close() ##关闭文件

打开game_dict文件后,你会发现它是不像一个文本文件,而是一个乱七八糟的混合体。这种文件可以用反序列化来重新读出数据。

被pickle过的python对象又叫序列化,至于为什么叫序列化这个名字,这个外国人起的我也不清楚,反正大家都是这么叫的。不过既然有序列化过程,当然就有反序列化,不然保存的文件又如何读取出来呢。反序列化就要用load函数。方法很简单,只要将保存的文件以可读的方式打开,用load反序列化即可。方法如下:

local_file=open("save_game","rb")
t_load=pickle.load(local_file) ###将打开文件,进行反序列化,变成可读文件
local_file.close()
print(t_load)

原文地址:http://blog.51cto.com/000011211684/2090909

时间: 2024-10-17 02:01:56

【29】Python浅入六个常用模块的相关文章

Python学习笔记六(常用模块、面向对象基础)

一.random模块 import random print(random.random()) #0-1之间的小数 print(random.randint(1,5)) #1-5之间(包括1和5)的整数 print(random.randrange(1,5)) #1-5之间(包含1,不好包含5)的整数 print(random.choice(['a','b','c'])) #给定列表中任意元素 print(random.sample(['a','b','c','d'],2)) #给定列表中任意n

学习Python必须要知道的常用模块

在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分.本文为你介绍了Python中的两种常用模块. os: 这个模块包含普遍的操作系统功能.利用这个模块可以写出与平台无关的程序,比如就是使用os.sep可以取代操作系统特定的路径分割符. 列举一些os模块中常用的方法: os.name:获取当前系统平台,Windows下返回'nt',Linux下返回'posix'. os.linesep:获取当前平台使用的行终止符.Windo

Python学习之路13?常用模块

一 time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型. 格式化的时间字符串(Format String) 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时) 1 import time 2 #

Python基础-第五天-常用模块

本篇内容: 1.sys模块 2.os模块 3.time模块和datetime模块 4.random模块和string模块 5.shutil模块 6.json模块和pickle模块 7.shelve模块 8.hashlib模块和hmac模块 9.logging模块 10.re模块 一.sys模块 1.sys模块简介 sys模块是Python标准库中自带了一个模块,sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境 2.sys模块的使用 ①pyt

Python学习—基础篇之常用模块

常用模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. python常用模块主要有: 1. time模块 2. random模块 3. hashlib模块 4. os模块 5. sys模块 6. logging模块 7. 序列化模块 8. configpar

python入门(九)常用模块

python的常用模块很多比如日志模块logging调用日志模块 import logging 级别高低顺序: DEBUG < INFO < WARNING < ERROR < CRITICAL默认从warning以后包含warning开始打印如果想打印全面,可以调整默认的模版 import logging logging.basicConfig(level=logging.DEBUG) 可以随意定义也可以自己定义打印的级别,比如输出某个字符串,我定义这个输出为WARNING级别

python之路5:常用模块

模块简介 time & datetime模块 random os sys shutil json & pickle shelve xml处理 configparser hashlib subprocess logging模块 re正则表达式 模块简介: 模块,是用一堆代码实现了某个功能的代码集合,n个.py文件组成的代码集合就称为模块. 模块分为三种: 自定义模块(自己手动编写的python代码文件) 内置标准模块(又称标准库) 开源模块 导入模块有以下几种方法: import modul

Python全栈之路----常用模块----subprocess模块

我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python2有os.system, >>> os.system('uname -a') Darwin Alexs-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Sun Jun 4 21:43:07 PDT 2017; root:xnu-3

Python开发安装的一些常用模块

一.BeautifulSoup模块 关于BeautifulSoup模块主要用于规范化网页源代码,利用其一些特定的解析标签函数来分析网页,的得到一些特定的内容,用起来方便简单容易入门,但仍然有一些弊端,比如说对于网页中含有js代码的就不能有效读取与分析,所以常结合正则表达式来进行使用,效率特别好 二.Scrapy + Selenium 模块 这两个模块结合起来使用常用于解析javascript,安装与配置比较麻烦,具体安装过程及需要额外安装哪些文件自行百度 三.MySQLdb模块 此模块用于连接M