python的应用领域和常用函数模块有哪些_【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文件后,你会发现它是不像一个文本文件,而是一个乱七八糟的混合体。这种文件可以用反序列化来重新读出数据。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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

local_file=open("save_game","rb")

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

local_file.close()

print(t_load)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值