学习Python 时间也不短了,从今天开始做个总结 :smile:

Python 函数

函数定义

def add(x,y):
    print(x + y)
    return x + y

函数定义:

  1. def 表示定义一个函数, 紧接着是函数名 函数名后面用一对小括号列出参数列表,参数列表后面使用一个冒号开始函数体;
  2. 函数体内是正常的Python语句,可以包含任意结构;
  3. 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.

可变参数

可变参数发生函数定义的时

  • 位置可变参数: 参数名前加一个星号, 构成元组, 传参只能以位置参数的形式
  • 关键字可变参数: 参数名前加两个信号, 构成字典, 传参只能以关键字参数的形式

位置可变参数和关键字参数一起使用时:

  1. 当位置可变参数和可变关键字参数一起使用时, 可变位置参数必须在前面;
  2. 普通参数可以和可变参数一起使用,但是传参的时候必须匹配
  3. 位置可变参数可以在普通参数之前, 但是在位置可变参数之后的普通参数变成了keyword-only参数
  4. 关键字可变参数不允许在普通参数之前
  5. 当默认参数和可变参数一起出现的时候, 默认参数相当于普通参数

所以,在使用中应该遵循一定规则;

  • 默认参数靠后
  • 可变参数靠后
  • 默认参数和可变参数不同时出现
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

注意:

  1. ** 关键字参数解构, key必须是str **
  2. 参数解构发生在函数调用时, 可变参数发生函数定义的时候

返回值

函数是代码块处理的结果。

  • 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