函数就是把具有独立功能的代码块组织成一个小模块,在需要时直接调用。函数又分为内置函数和自定义函数:内置函数是Python的开发者已经编写好的函数,用户可直接调用,如print()函数;自定义函数则是用户自行编写的函数。
除了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. 函数的定义与调用
在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只在函数内部生效,并不会影响外部的变量。正如前面所说,函数的形式参数只是一个代号,属于函数内的局部变量,因此不会影响函数外部的变量。