一、环境
环境 | 版本 |
---|---|
操作系统 | CentOS 7.9.2009 |
Python | 3.9.7 |
二、函数概念
我们经常需要在同一个程序里多次复用相同的代码,函数可以很好的帮助我们完成这一点。我们在函数里写我们要重复做的事,然后我们在任何需要的时候调用它。函数有参数和返回值,在函数内部对参数进行处理,并把处理结果返回给调用者。
2.1 内置函数
内置函数就是 Python 解释器中不用引入任何包,一直可以使用的函数。
如 len()
、type()
、input()
、range()
2.2 自定义函数
- 函数代码块以
def
关键词开头,后接函数标识符名称和圆括号()
。 - 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
return
[表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
三、定义和调用
我们使用关键字 def
来定义一个函数,定义函数后需要在函数名的括号中写上参数,最后加 :
,再换行输入函数内部的代码,注意函数内部代码的缩进:
定义函数 printme
,将一个字符串作为传入参数,再输出。
脚本 3.1.py
#!/usr/bin/env python3
def printme( a ):
return print(a)
调用函数
修改脚本 3.1.py
#!/usr/bin/env python3
def printme( a ):
return print(a)
if __name__ == '__main__':
s = input("Enter a string: ")
printme(s)
[root@localhost 4]# python3 3.1.py
Enter a string: lolol
lolol
四、参数
4.1 必选参数
此类参数最为常见,使用函数时必选参数可以不写参数名,但必须对其赋值,参数赋值顺序是定义的时候指定的,所以必选参数又称为位置参数。如果不按照定义顺序传参,就要使用参数名进行传参。
脚本 4.1.py
#!/usr/bin/env python3
def server_info(ipaddress,port):
print("IP:",ipaddress)
print("Port",port)
print('参数默认的顺序')
server_info('192.168.1.1','22')
print('错误的顺序')
server_info('22','192.168.1.1')
print('错误的顺序,参数名传参')
server_info(port='22',ipaddress='192.168.1.1')
[root@localhost 4]# python3 4.1.py
参数默认的顺序
IP: 192.168.1.1
Port 22
错误的顺序
IP: 22
Port 192.168.1.1
错误的顺序,使用参数名传参
IP: 192.168.1.1
Port 22
4.2 默认参数
函数的参数可以设定默认值,这种参数称为默认参数。调用函数时,如果我们对默认参数没有赋值,则会自动赋其默认值。 改变上面的程序,将端口号设为默认参数,默认值为 22:
脚本 4.2.py
#!/usr/bin/env python3
def server_info(ipaddress,port='22'):
print("IP:",ipaddress)
print("Port",port)
print('参数赋值')
server_info('192.168.1.1','2222')
print('参数不赋值,使用默认值')
server_info('192.168.1.1')
[root@localhost 4]# python3 4.2.py
参数赋值
IP: 192.168.1.1
Port 2222
参数不赋值,使用默认值
IP: 192.168.1.1
Port 22
注意点:
1、默认参数后面不能再有必选参数,例如 f(a,b=90,c) 就是错误的;
2、默认参数的默认值必须设为不可变的数据类型(如字符串、元组、数字、布尔值、None 等)。
4.3 可变参数
顾名思义,可变参数意味着参数的数量是可变的,调用函数时,在可变参数的位置直接传入一个元组或者任意数量的参数。又叫不定长参数。
可变参数的定义格式是在参数名前面加上 *
,参数名可以自定义,通常写成 *args
。
脚本 4.3.py
#!/usr/bin/env python3
def server_info(ipaddress,*ports):
print("IP:",ipaddress)
for port in ports:
print("Port:",port)
print('一个ports参数')
server_info('192.168.1.1','22')
print('两个ports参数')
server_info('192.168.1.1','22','23')
print('三个ports参数')
server_info('192.168.1.1','22','23','24')
[root@localhost 4]# python3 4.3.py
一个ports参数
IP: 192.168.1.1
Port: 22
两个ports参数
IP: 192.168.1.1
Port: 22
Port: 23
三个ports参数
IP: 192.168.1.1
Port: 22
Port: 23
Port: 24
4.4 关键字参数
以上三种函数的参数(必选参数、默认参数、可变参数)在赋值时都可以不写参数名,而关键字参数允许传入零个或任意多个带参数名的参数,其中参数名可自定义,这些关键字参数会在函数内部自动生成一个字典,用来扩展函数的功能。
关键字参数的定义格式是在参数名前面加上 **
,参数名可以自定义,通常写成 **kw
。
脚本 4.4.py
#!/usr/bin/env python3
device = {
'OS':'CentOS','CPU':'4','Mem':'8G'}
def server_info(ipaddress,**kw):
print("IP: ", ipaddress)
for key,value in kw.items():
print('{}: {}'.format(key, value))
server_info('192.168.1.1',**device)
[root@localhost 4]# python3 4.4.py
IP: 192.168.1.1
OS: CentOS
CPU: 4
Mem: 8G