python函数(一)

一、函数的定义

函数:可以用对重复使用的功能代码进行封装,提高代码的复用性,提高工作效率,降低代码的耦合性
函数的定义:通过关键字def
    def 函数的名字():
          函数内部的功能代码

    函数名 (# 通过函数名直接调用函数)   

关于函数的一些注意点:

代码格式规范性:1.定义函数前,上面空两行

                             2. 注释写在函数模块内

                             3.调用函数,需与函数空两行

def func(n):
    """函数举例"""
    for i in range(1,n+1):
        for j in range(i):
            print("* ", end="")
        print()


func(3)
func(5)
func(10)

 python函数(一)_第1张图片

 二、函数的参数

1.形参

形参:定义的参数称为形参
  三种定义方式:
           1.必需参数(必备参数):定义了就一定要传,不能多也不能少
           2.默认参数(缺省参数):定义的时候可以设置默认值,调用时可以传,也可以不传(不传时使用默认值)
           3.不定长参数(动态参数/可变参数):可以接受0个或者多个参数
      *args:只能接受位置传参,以元组的形式保存
      **kwargs:只能接受关键字传参,以字典的形式保存

# 一、形参:
# 1,必需参数
def add(a, b):
    print("a:", a)  # 6
    print("b:", b)  # 8
    print(a+b)


# add()    # 报错 TypeError: add() missing 2 required positional arguments: 'a' and 'b'
# add(1)   # 报错 TypeError: add() missing 1 required positional argument: 'b'
add(3, 5)   # 正常,不会报错,

# 2,缺省参数(默认参数)
def add(a, b, c =99):
    print("a:", a)  # 3
    print("b:", b)  # 5
    print("c:", c)  # 99      # 10086
    print(a+b)


add(3, 5)         # 参数c 不调用时,默认一开始设置的值 99
add(3, 5, 10086)  # 参数c 调用时,则会传递,变为10086

# 3.动态参数
# 3.1,*agrs
def func(*args):
    print(args)


func()    # 打印结果为 ()      接收位置参数,转换为元组类型  
func(11)   # 打印结果为 (11,)
func("aaa", "bbb", 12345)   # 打印结果为 ('aaa', 'bbb', 12345)

# 3.2,**kwargs
def func2(**kwargs):
    print(kwargs)


func2()   # 打印结果为 {}   接收关键字参数,转换为字典类型
func2(a=11)    # 打印结果为 {'a': 11}
func2(a=2, b=3, c=4)    # 打印结果为 {'a': 2, 'b': 3, 'c': 4}

2.实参

实参:调用实际的传递行为叫做实参
两种形式:
  1、位置传参:按照参数定义的位置进行传递

  2、关键字传参:通过参数名字,指定传递

注意点:如果使用两种形式混合传递参数,先写位置参数,再写关键字参数(不然会报错)!!!

# 举例1:位置传参
def add(a, b):
    print("a:", a)  # 6
    print("b:", b)  # 8
    print(a+b)


add(6, 8)    # 14

# 举例2:关键字传参
def add(a, b):
    """举例2:关键字传参"""
    print("a:", a)  # 7
    print("b:", b)  # 10
    print(a+b)   # 17


add(b=10, a=7)

# 举例3:混合传参
def add(a, b, c, d):
    print("a:", a)  # 11
    print("b:", b)  # 44
    print(a+b)   # 55


# add(b=11, 22, 33, 44)   # 这种情况会报错,因为没有先写位置参数,

add(11, c=22, d=33, b=44)   # 当混合传参时,必须先写位置参数,才不会报错

3.函数拆包

与上面的形参中的动态参数有联系

这里实际上就是一个*号还是两个**号的区别

*:
  *加在形参前面(定义函数参数的时候使用),接收位置参数,转换为元组
  *加在实参前面(调用函数参数的时候使用),可以将元组(列表)拆包成多个位置参数
**:
  ** 加在形参前面(定义函数参数的时候使用),接收关键字参数,转换为字典
  **加在实参前面(调用函数参数的时候使用),可以将字典成多个关键字参数

# 拆元组 *
def func2(a,b,c,d):
    print(a,b,c,d)


tu = ('jack', 'boy', '178', 18)
func2(*tu)                        # 运行后的结果:jack boy 178 18


# 拆字典  **
def func3(a,b,c,d):
    print(a,b,c,d)


dic = {"a": 11, "b": 22, "c": 33, "d": 44}
func3(**dic)               # 运行后的结果: 11 22 33 44

 

你可能感兴趣的:(python函数(一))