python 函数介绍
学习Python 时间也不短了,从今天开始做个总结
Python 函数
函数定义
def add(x,y):
print(x + y)
return x + y
函数定义:
- def 表示定义一个函数, 紧接着是函数名 函数名后面用一对小括号列出参数列表,参数列表后面使用一个冒号开始函数体;
- 函数体内是正常的Python语句,可以包含任意结构;
- return 语句表示函数的返回值。
定义函数的时候,并不会执行函数体,调用的时候,才会执行其中的语句块。
函数调用
调用时,需要注意:
- 传入参数必须和函数定义时的参数相匹配
- 位置参数:参数按照定义的顺序传入,这样的传参方法叫做位置参数
- 关键字参数:参数按照定义时的变量名传递, 这样的传参方法叫做关键字参数,关键字参数和顺序无关
- 当位置参数和关键字参数混合使用时, 位置参数必须在前面, 否则会抛出语法错误
add(3,5)
8
8 ## 参数
参数默认值
参数默认值在函数定义时
- 参数可以有默认值,当一个参数有默认值时, 调用时如果不传递此参数,会使用默认值,通在传参时,使用关键字参数参数给予赋值
- 参数默认值和关键字参数一起使用,会让代码非常简洁
def connect(host="127.0.0.1",port=22):
print("Connect to {}:{}.".format(host,port))
connect()
Connect to 127.0.0.1:22.
connect(host="192.168.1.100")
Connect to 192.168.1.100:22.
可变参数
可变参数发生函数定义的时
- 位置可变参数: 参数名前加一个星号, 构成元组, 传参只能以位置参数的形式
- 关键字可变参数: 参数名前加两个信号, 构成字典, 传参只能以关键字参数的形式
位置可变参数和关键字参数一起使用时:
- 当位置可变参数和可变关键字参数一起使用时, 可变位置参数必须在前面;
- 普通参数可以和可变参数一起使用,但是传参的时候必须匹配
- 位置可变参数可以在普通参数之前, 但是在位置可变参数之后的普通参数变成了keyword-only参数
- 关键字可变参数不允许在普通参数之前
- 当默认参数和可变参数一起出现的时候, 默认参数相当于普通参数
所以,在使用中应该遵循一定规则;
- 默认参数靠后
- 可变参数靠后
- 默认参数和可变参数不同时出现
def sum(*lst):
print(type(lst))
sum = 0
for i in lst:
sum += i
return sum
sum(1,2,3,4,5)
<class 'tuple'>
15
def connect(**kwargs):
print(type(kwargs))
for k in kwargs.keys():
print("message:{} = {}.".format(k,kwargs[k]))
connect(host="127.0.0.1",port=22)
<class 'dict'>
message:host = 127.0.0.1.
message:port = 22.
参数解构
调用在传递参数时,会将结构体内的值,分解赋予函数各个参数。
- 一个星号 解构的对象:可迭代对象 解构的结果:位置参数
- 两个星号 解构的对象:字典 解构的结果:关键字参数
t = (1,2)
sum(*t)
<class 'tuple'>
3
注意:
- ** 关键字参数解构, key必须是str **
- 参数解构发生在函数调用时, 可变参数发生函数定义的时候
返回值
函数是代码块处理的结果。
- return 语句除了返回值之外,还会结束函数, return之后的语句将不会被执行
- 一个函数可以有多个return语句, 执行到哪个return由哪个return返回结果并结束函数
- 当函数需要返回多个值时, 可以用封装把返回值封装成一个元组,可以通过解构获取多返回值
- 当函数没有return语句的时候,默认返回None,return None 可以简写为 return, 通常用于结束函数
def fn(x):
for i in range(x):
if x >3:
return i
else:
return ("Not bigger than 3",-1)
print("this line will not print")
error,errorcode = fn(2)
print(error,errorcode)
Not bigger than 3 -1
print(fn(4))
0