购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.8 函数

函数就是把具有独立功能的代码块组织成一个小模块,在需要时直接调用。函数又分为内置函数和自定义函数:内置函数是Python的开发者已经编写好的函数,用户可直接调用,如print()函数;自定义函数则是用户自行编写的函数。

1.8.1 内置函数

除了print()函数,Python还提供很多内置函数。下面介绍一些常用内置函数。

1. len()函数

len()函数在1.3.3节已介绍过,它能统计列表的元素个数,演示代码如下:

1  title = ['标题1', '标题2', '标题3']
2  print(len(title))

运行结果如下:

1  3

len()函数在实战中经常和range()函数一起使用,演示代码如下:

1  title = ['标题1', '标题2', '标题3']
2  for i in range(len(title)):
3      print(str(i+1) + '.' + title[i])

第2行代码中的range(len(title))相当于range(3),因此,for语句中的i会依次取值为0、1、2,在生成标题序号时就要写成i+1,并用str()函数转换成字符串,再用“+”运算符进行字符串拼接。运行结果如下:

1  1.标题1
2  2.标题2
3  3.标题3

len()函数还能统计字符串的长度,即字符串中字符的个数,演示代码如下:

1  a = '123abcd'
2  print(len(a))

运行结果如下,表示变量a所代表的字符串有7个字符。

1  7

2. replace()函数

replace()函数主要用于在字符串中进行查找和替换,其基本语法格式如下:

字符串.replace(要查找的内容, 要替换为的内容)

演示代码如下:

1  a = '<em>面朝大海,</em>春暖花开'
2  a = a.replace('<em>', '')
3  a = a.replace('</em>', '')
4  print(a)

在第2行和第3行代码中,replace()函数的第2个参数的引号中没有任何内容,因此,这两行代码表示“将查找到的内容删除”。运行结果如下:

1  面朝大海,春暖花开

3. strip()函数

strip()函数的主要作用是删除字符串首尾的空白字符(包括空格、换行符、回车符和制表符),其基本语法格式如下:

字符串.strip()

演示代码如下:

1  a ='    学而时习之 不亦说乎    '
2  a = a.strip()
3  print(a)

运行结果如下:

1  学而时习之 不亦说乎

可以看到,字符串首尾的空格都被删除,字符串中间的空格则被保留。

4. split()函数

split()函数的主要作用是按照指定的分隔符将字符串拆分为一个列表,其基本语法格式如下:

字符串.split('分隔符')

演示代码如下:

1  today = '2021-10-25'
2  a = today.split('-')
3  print(a)

运行结果如下:

1  ['2021', '10', '25']

如果想从拆分字符串得到的列表中提取年、月、日信息,可以通过如下代码实现:

1  a = today.split('-')[0]  # 提取列表的第1个元素,即年信息
2  a = today.split('-')[1]  # 提取列表的第2个元素,即月信息
3  a = today.split('-')[2]  # 提取列表的第3个元素,即日信息

1.8.2 自定义函数

内置函数的数量毕竟有限,只靠内置函数不可能实现我们需要的所有功能,因此,编程中常常需要将会频繁使用的代码编写为自定义函数。

1. 函数的定义与调用

在Python中使用def语句来定义一个函数,其基本语法格式如下:

1  def 函数名(参数):  # 注意不要遗漏冒号
2      实现函数功能的代码  # 注意代码前要有缩进

演示代码如下:

1  def y(x):
2      print(x + 1)
3  y(1)

第1行和第2行代码定义了一个函数y(),该函数有一个参数x,函数的功能是输出x的值与1相加的运算结果。第3行代码调用y()函数,并将1作为y()函数的参数。运行结果如下:

1  2

从上述代码可以看出,函数的调用很简单,只要输入函数名,如函数名y,如果函数含有参数,如函数y(x)中的x,那么在函数名后面的括号中输入参数的值即可。如果将上述第3行代码修改为y(2),那么运行结果就是3。

定义函数时的参数称为形式参数,它只是一个代号,可以换成其他内容。例如,可以把上述代码中的x换成z,演示代码如下:

1  def y(z):
2      print(z + 1)
3  y(1)

定义函数时也可以传入多个参数。以定义含有两个参数的函数为例,演示代码如下:

1  def y(x, z):
2      print(x + z + 1)
3  y(1, 2)

因为第1行代码在定义函数时指定了两个参数x和z,所以第3行代码在调用函数时就需要在括号中输入两个参数,运行结果如下:

1  4

定义函数时也可以不要参数,演示代码如下:

1  def y():
2      x = 1
3      print(x + 1)
4  y() 

第1~3行代码定义了一个函数y()。在定义这个函数时并没有要求输入参数,所以第4行代码中直接输入y()就可以调用函数,运行结果如下:

1  2

2. 定义有返回值的函数

在前面的例子中,定义函数时仅用print()函数输出函数的运行结果,之后就无法使用这个结果了。如果之后还需要使用函数的运行结果,则在定义函数时使用return语句来定义函数的返回值。演示代码如下:

1  def y(x):
2      return x + 1
3  a = y(1)
4  print(a)

第1行和第2行代码定义了一个函数y(),函数的功能不是直接输出运算结果,而是将运算结果作为函数的返回值返回给调用函数的代码;第3行代码在执行时会先调用y()函数,并以1作为函数的参数,y()函数内部使用参数1计算出1+1的结果为2,再将2返回给第3行代码,赋给变量a。运行结果如下:

1  2

3. 变量的作用域

简单来说,变量的作用域是指变量起作用的代码范围。具体到函数的定义,函数内使用的变量与函数外的代码是没有关系的,演示代码如下:

1  x = 1
2  def y(x):
3      x = x + 1
4      print(x)
5  y(3)
6  print(x)

请读者先思考一下:上述代码会输出什么内容呢?下面揭晓运行结果:

1  4
2  1

第4行和第6行代码同样是print(x),为什么输出的内容不一样呢?这是因为函数y(x)里面的x和外面的x没有关系。之前讲过,可以把y(x)换成y(z),演示代码如下:

1  x = 1
2  def y(z):
3      z = z + 1
4      print(z)
5  y(3)
6  print(x)

运行结果如下:

1  4
2  1

可以发现,两段代码的运行结果是一样的。y(z)中的z或者说y(x)中的x只在函数内部生效,并不会影响外部的变量。正如前面所说,函数的形式参数只是一个代号,属于函数内的局部变量,因此不会影响函数外部的变量。 SBoWgSTklmsR96fTmyawYkhL0eNSBXIjH2bbA6gA+eGHImvpcXyCuulT9wRRlhgx

点击中间区域
呼出菜单
上一章
目录
下一章
×