函数的参数
函数的参数
在Python3中主要有四大参数。
必选参数(位置参数)
不需要传递参数名,但是要按照定义的顺序传递参数值
代码
#!/usr/bin/env python
def connect(ip,port):
print("ip:",ip)
print("port:",port)
connect("192.168.1.1",22)
运行结果
┌──(root㉿kali)-[~/python_code/python_2]
└─# python client.py
ip: 192.168.1.1
port: 22
如果我们换个方式调用
代码
#!/usr/bin/env python
def connect(ip,port):
print("ip:",ip)
print("port:",port)
connect(22,"192.168.1.1")
运行结果:会发现反过来了
┌──(root㉿kali)-[~/python_code/python_2]
└─# python client.py
ip: 22
port: 192.168.1.1
我们可以这样调用
代码
#!/usr/bin/env python
def connect(ip,port):
print("ip:",ip)
print("port:",port)
connect(port=22,ip="192.168.1.1")
运行结果
┌──(root㉿kali)-[~/python_code/python_2]
└─# python client.py
ip: 192.168.1.1
port: 22
总结:虽然可以不带参数名,但是当我们不按照顺序去传参的时候,需要带上参数名才能保证输出顺序的准确性。
默认参数
顾名思义就是带有默认值的参数
代码
#!/usr/bin/env python
def connect(ip,port=22):
print("ip:",ip)
print("port:",port)
connect("192.168.1.1")
运行结果:不传参数值就使用默认值
┌──(root㉿kali)-[~/python_code/python_2]
└─# python client.py
ip: 192.168.1.1
port: 22
换个调用方式
#!/usr/bin/env python
def connect(ip,port=22):
print("ip:",ip)
print("port:",port)
connect("192.168.1.1",80)
运行结果:如果传入了参数值就使用传入的
┌──(root㉿kali)-[~/python_code/python_2]
└─# python client.py
ip: 192.168.1.1
port: 80
注意点:默认值参数后面不能有其它必选参数,可以有多个默认值参数。默认参数的默认值必须是不可变对象(int,str,float,tuple等)。
错误示例
#!/usr/bin/env python
def connect(ip,port=22,proto):
print("ip:",ip)
print("port:",port)
print("proto:",proto)
connect("192.168.1.1",80,"static")
运行结果:报错
┌──(root㉿kali)-[~/python_code/python_2]
└─# python client.py
File "/root/python_code/python_2/client.py", line 3
def connect(ip,port=22,proto):
^^^^^
SyntaxError: parameter without a default follows parameter with a default
可变参数
允许传入多个参数或者传入一个元组,可变参数会在内部自动组装成一个元组。
代码
#!/usr/bin/env python
def connect(ip,*port):
print("ip:",ip)
for p in port:
print("port:",p)
connect("192.168.1.1",22,80,88)
运行结果
┌──(root㉿kali)-[~/python_code/python_2]
└─# python client.py
ip: 192.168.1.1
port: 22
port: 80
port: 88
关键字参数
允许传入多个带参数名的参数或者传入一个字典,在内部自动组装成一个字典。
代码
#!/usr/bin/env python
def connect(ip,*port,**kwargs):
print("ip:",ip)
for p in port:
print("port:",p)
for k,v in kwargs.items():
print(f"{k}:{v}")
ports = (22,80,88)
kws = {"netcard":"eth0","proto":"static"}
connect("192.168.1.1",*ports,**kws)
运行结果
┌──(root㉿kali)-[~/python_code/python_2]
└─# python client.py
ip: 192.168.1.1
port: 22
port: 80
port: 88
netcard:etho
proto:static
命名关键字参数
这里不讲解命名关键字参数,后面项目中用到会详细讲解,这里只是提一嘴,命名关键字参数与关键字参数类似,区别在于命名关键字参数定义了传入的参数名,不允许传入没有定义的参数。
浙公网安备 33010602011771号