[Python] 常用模块(1):内建模块 -- random & datetime

Python 常用模块系列:

  • [Python] 常用模块(1):内建模块 – random & datetime(本文 )
  • [Python] 常用模块(2):内建模块 – re 以及正则表达式
  • [Python] 常用模块(3):内建模块 – math & itertools
  • [Python] 常用模块(4):NumPy 上
  • [Python] 常用模块(4):NumPy 中
  • [Python] 常用模块(4):NumPy 下
  • [Python] 常用模块(5):pandas 1
  • [Python] 常用模块(5):pandas 2
  • [Python] 常用模块(5):pandas 3
  • [Python] 常用模块(5):pandas 4
  • [Python] 常用模块(5):pandas 5
  • [Python] 常用模块(5):pandas 6
  • [Python] 常用模块(5):pandas 7
  • [Python] 常用模块(5):pandas 8
  • [Python] 常用模块(5):pandas 9

载入模块

在 Python 中载入模块非常简单:import 模块 语句即可。想用模块内的函数,以方法的形式使用:

>>> import datetime
>>> datetime.date.today()
datetime.date(2019, 6, 1)

有时候模块内还有子模块(比如上面的 date 就是 datetime 的子模块),也可以载入子模块,这样主模块就不需要写了。载入子模块的语句是 from 主模块 import 子模块

>>> from datetime import date
>>> date.today()
datetime.date(2019, 6, 1)

最一劳永逸的方法是只载入模块里的个别功能,语句和载入子模块一样,以 sklearn 模块里的 KNeighborsClassifier() 来说,载入这个功能以后可以直接以函数的方式调用:

from sklearn.neighbors import KNeighborsClassifier

(这个 sklearn 是一个机器学习的模块,以后有机会会讲到)

只载入个别函数虽然在使用这个函数的时候更方便,但是缺点是这样模块里的其它函数就用不了。因此只适用于需要的个别函数,像 numpypandas 这样需要大量内置函数的模块就不适用了。

random 模块

机器学习中大量需要随机生成一些数字,而有时候又需要能够对结果进行重现,怎么理解这个情况呢?假如我们有美国队长、钢铁侠、索尔、黑寡妇四人,需要为一件事随机把他们分成两小队,而以后再做同一件事情的时候我们需要一个机制,保证在随机的情况下有同样的小队分配。这就是计算机科学中的“伪随机性(Pseudorandomness)”。维基百科的解释是:

伪随机性是一个过程似乎是随机的,但实际上并不是。例如伪随机数是使用一个确定性的算法计算出来的似乎是随机的数序,因此伪随机数实际上并不随机。在计算伪随机数时假如使用的开始值不变的话,那么伪随机数的数序也不变。

换句话说,伪随机数的不同在于起点的不同,相同起点生成的伪随机数是完全一样的。这就带来了我们的第一个函数:

random.seed(n)

这个 seed 又被称为“种子”,它定义了伪随机数的初始位置。我们结合下面的随机整数生成函数来一起看看他们的作用。

random.randint(a, b)

返回随机整数 N 满足 a <= N <= b。

>>> import random
# 不指定种子
>>> random.randint(1, 10)
>>> random.randint(1, 10)
6
3
>>> random.randint(1, 10)
>>> random.randint(1, 10)
2
5
#指定种子
>>> random.seed(1)
>>> random.randint(1, 10)
>>> random.randint(1, 10)
3
10
>>> random.seed(1) # 初始化种子
>>> random.randint(1, 10)
>>> random.randint(1, 10)
3
10

可以看到,确定种子以后,两次的结果整体上看虽然还是随机的,但是完全相同。

random.suffle(x)

对 x 内的元素进行随机排序,没有返回值(结果直接储存在了 x 里)。

>>> lst = list(range(5)) # [0, 1, 2, 3, 4]
>>> random.shuffle(lst)
>>> lst
[2, 3, 1, 0, 4] # 没有指定种子,下同
random.sample(population, k)

返回从总体序列或集合中选择的唯一元素的 k 长度列表。 用于无重复的随机抽样。

>>> random.sample(range(100), 10)
[2, 3, 83, 69, 1, 48, 87, 27, 54, 92]
random.random()

返回 [0.0, 1.0) 范围内的下一个随机浮点数。这个函数没有变量。

>>> random.random()
0.22169166627303505

datetime

这个模块里的主要子模块是 date(即仅包含日期),datetime(即日期+时间),time(即时间)和 ztinfo(即时区)。


date 子模块


date.today()

返回当地的当前日期。

date.replace(year=self.year, month=self.month, day=self.day)

返回一个相同的日期,除非日期参数被指定修改。

>>> d = datetime.date.today()
>>> d.replace(day=2)
datetime.date(2019, 6, 2)
date.weekday()
date.isoweekday()

这两个之所以放在一起说,是因为它们都返回星期几:date.weekday() 返回的 0 代表星期一,6 代表星期天;date.isoweekday() 返回的 1 代表星期一,7 代表星期天。

d.weekday() # 今天是星期天
6
d.isoweekday()
7

datetime 子模块


datetime.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo)

datetime.replace 功能相同,只是增加了参数。

datetime.now(tz = None)

返回现在的日期和时间。

>>> datetime.datetime.now()
datetime.datetime(2019, 6, 2, 12, 12, 10, 97706) #年,月,日,小时,分钟,秒,微秒
datetime.date()

返回日期。

datetime.time()

返回时间。

datetime.timetz()

返回时间+时区。

datetime.weekday()
datetime.isoweekday()

同 date.weekday() 和 date.isoweekday() 。


time 子模块


time.replace(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo)

与 date.replace() 和 datetime.replace() 相同,只是参数不同。


上一篇练习的答案:

# 定义一个叫做 `fruit` 的类,接受“水果名字”和“水果数量”两个变量。同时放置一个判断,当水果数量小于 5 时,打印“\*\*水果只有\*\*个”;当水果数量多于 5 时,打印“\*\*水果有\*\*个”。示例:
>>> class fruit:
...     def __init__(self, f, n):
...         self.fruit = f
...         self.num = n
...     def count(self):
...         if self.num == 1:
...             print(self.fruit.capitalize(), "only has 1.") # 单数形式
...         elif self.num < 5:
...             print(self.fruit.capitalize(), " only have ", self.num, ".", sep = "")
...         else:
...             print(self.fruit.capitalize(), " have ", self.num, ".", sep = "")
>>> a = fruit("pear", 1)
>>> a.count()
Pear only has 1.
>>> b = fruit("apple", 3)
>>> b.count()
Apple only have 3.
>>> c = fruit("banana", 6)
>>> c.count()
Banana have 6.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值