Python内建函数与模块

  • 常用内建函数

在前面的学习中,我们接触了诸如print(), abs()这样的函数————只要打开Python交互界面就可以直接使用。这些函数被称作Python内建函数(built in functions)。在这一章节,我们首进一步认识几个内建函数:

print()函数:我们可以用print()函数打印多个内容,例如:

>>> age = 15
>>> print('我今年',age,'岁了')
我今年 15 岁了

我们会发现15的前后都有空格,这是因为,print()默认把打印的多个元素之间用空格隔开了,我们可以更改分隔元素的符号,例如上一例中,我们希望print()用空字符串”来分隔而不是空格’ ‘:

>>> print('我今年', age, '岁了', sep = '')
我今年15岁了

注意sep要写在需要打印元素的后面,不能穿插在需要打印元素的中间。当然,你也可以用其他字符花式分隔多个被打印元素:

>>> print('我今年', age, '岁了', sep = '哟哟')
我今年哟哟15哟哟岁了

range()函数:可以返回一个整数序列,先观察下面语句:

>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(1, 5))
[1, 2, 3, 4]
>>> list(range(1, 5, 2))
[1, 3]

注意几点:
1. range(x, y)得到的是x开头,y-1结尾的整数序列,如果x为0可以不写
2. range(x, y, z)得到的是x开头,公差为z的等差整数序列,序列中最大数不大于y,如果z为1可以不写
3. range()函数返回的不是一个列表!上述的例子使用了list()将结果强制转换为列表方便大家看清。试试直接输入type(range(5))会返回什么
4. 现在你返回到上一章第7节的最后,是不是有新发现啦~

input()函数:可以让用户输入一些信息,例如:

>>> name = input('请输入你的名字:')
请输入你的名字:欧耶
>>> name
'欧耶'

在input后面的括号内,我们可以自由输入一个字符串,作为用户输入内容的提示语。当我们写完第一行按下回车的时候,Python就执行了input()这个函数,并出现了一行可以互动的语句,我们可以在该行输入任意信息,最后,我们输入的信息被赋值给了变量name。

观察下面的程序:

>>> num = input('请输入一个数字:')
请输入一个数字:233
>>> num + 1
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in 
    num + 1
TypeError: must be str, not int
>>> num
'233'
>>> type(num)
<class 'str'>

我们发现,当使用input()函数时,不论用户输入什么信息,都被Python自动转化成了字符串(str)。要记住,input()函数返回的结果一定是一个字符串。那么,有没有办法让用户输入的字符串变成数字呢?

eval()函数:该函数的括号内可以填入一个字符串,Python将根据这个字符串的内容,自动转换数据类型:

>>> num = eval(input('请输入一个数字:'))
请输入一个数字:233
>>> num + 1
234

我们知道input()函数必然返回一个字符串,因此我们可以将input()填在eval()函数的括号中,Python自动将字符串中的内容转换成了整数。

有的小伙伴就会问了,那可不可以用之前学过的强制转换类型来实现字符串到整数的转换呢?答案是可以的,如果我们明确知道要转换的类型,可以直接使用强制转换:

>>> num = int(input('请输入一个数字:'))
请输入一个数字:233
>>> type(num)
<class 'int'>

在这个字符串’233’转换到整数233的例子中,两种方法都一样简单可行。学习到后期我们会发现,eval()函数还能自动判断一些更复杂的字符串,并转换相应类型。

 

  • 什么是Python模块

当使用abs()函数时,只要在括号内输入一个数,就会得到它的绝对值。但是我们知道,从数学角度来说,要计算一个数的绝对值,我们是要分情况讨论的:当x >= 0, |x| = x;当x < 0, |x| = -x。也就是说我们在使用abs()函数的同时,这个函数代替我们完成了这一系列判断与计算的过程 —— 那么这些过程都写在哪里呢?还有print(), eval()和我们还没学到的函数,它们的过程是什么?都写在哪里呢?

在Python中,函数的定义被写在一个个后缀为.py的文件中。这些.py文件,被称为Python的模块(modules)。 之所以输入abs(-1)我们可以得到1这个结果,是因为Python加载了一个模块,在这个模块里,发明Python的大神已经写好了abs()遵守:当x >= 0, |x| = x;当x < 0, |x| = -x这个规则。

类似于abs(),print(),eval()这些内建函数,它们具体在.py文件里面具体是如何定义的,我们目前不用知道,我们只用知道它们有什么功能即可。这些内建函数所在的模块,Python是自动加载的,打开Python就能使用。

 

  • 使用其他Python模块

我们安装Python之后,Python自带一个标准库(Python Standard Library),这个标准库里面有大大小小200多个模块可以供我们使用,网上还有数不清的Python模块可以下载。想使用这些模块,我们需要手动加载它们。这里我们介绍两个非常常用的:

math模块:顾名思义,这个模块内定义了大量和数学有关的函数。使用该模块,我们首先需要输入:

>>> import math

回车之后,如果没有报错,那么就成功引入了math模块。math模块中定义了N多函数,可以输入help(math)查看。列举两例:sqrt()开平方根;log(x,y)以y为底x的对数。要想使用这些函数,函数名字前必须写上math.

>>> math.sqrt(4)
2.0
>>> sqrt(4) #如果不写math.就会这样
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in 
    sqrt(4)
NameError: name 'sqrt' is not defined

 

random模块:这是一个用来生成随机数的模块。与math一样,我们首先要加载random模块,然后可以用help(random)查看该模块中所有的函数,这里我们只介绍两个:

>>> import random

randrange()函数:这个函数可以理解为random(随机)和range()的组合体,括号内填写的内容和上面我们说的range()函数规则一样;最终该函数将在生成的整数序列里面随机返回一个数。例如,在1,2,3,4四个整数中随机抽取一个:

>>> random.randrange(1, 5)
3
>>> random.randrange(1, 5)
2
>>> random.randrange(1, 5)
3

shuffle()函数,这个函数可以用于随机打乱一个列表的顺序:

>>> import random
>>> lst = [1, 2, 3, 4, 5, 6]
>>> random.shuffle(lst)
>>> lst
[6, 4, 3, 1, 5, 2]
>>> random.shuffle(lst)
>>> lst
[6, 3, 5, 1, 4, 2]

 

如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~

发表评论

邮箱地址不会被公开。 必填项已用*标注