[Python3]函数

# _author_:wyq
# _date_:2018/7/21
函数
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
特性: 1.减少重复代码
      2.使程序变的可扩展
      3.使程序变的易维护

语法定义:
    def sayhi():  # 函数名
        print("hello, I'm nobody! ")

    sayhi()     # 调用函数

函数参数:
    形参变量:只有在被调用时才分配内存单元,在调用结束时即可释放所分配的内存单元。形参只有在函数内部有效。
    实参:    可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使参数获得确定值。

默认参数:
    默认参数在调用时如果不指定,就默认是默认参数指定的值;如果在调用时指定了参数,就是指定的值。
    def sayhi(name, age, country='CN'):
    country='CN'就是默认参数,默认参数需要放在最后。

关键参数:
    给函数传参数要按顺序,如果不想按顺序就可以用关键参数,只需要指定参数名即可(指定了参数名的参数,就叫做关键参数)。
    关键参数必须放在位置参数之后!(位置参数:以位置顺序确定对应关系的参数)

非固定参数:
    如果你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数。
    def stu_register(name, age, *args):      # *args 会把多传入的参数变成一个元组形式
        print(name, age, args)


    stu_register('alex', 22)
    # 输出
    # alex 22 ()        #后面这个()就是args,只是因为没有传值,所以为空
    stu_register('seven', 23, 'CN', 'Python')
    # 输出
    # seven 23 ('CN', 'Python')

    还可以有一个**kwargs

    def stu_register(name, age, *args, **kwargs):        # **kwargs 会把多出入的参数变成一个dict字典形式
        print(name, age, args, kwargs)


    stu_register("alex", 22)
    # 输出
    # alex 22 () {}        # 后面这个{}就是kwargs,只是因为没有传值,所以为空
    stu_register('seven', 23, 'CN', 'Python', sex='Male', provine='Shandong')
    # 输出
    # seven 23 ('CN', 'Python') {'sex': 'Male', 'provine': 'Shandong'}

返回值:
    函数外部的代码要想获取函数的执行结果,就可以在函数里用return语句把结果返回
    def stu_register(name, age, course='PY', country='CN'):
        print('----注册学生信息----')
        print('姓名:', name)
        print('age:', age)
        print('国籍:', country)
        print('课程:', course)
        if age > 22:
            return False
        else:
            return True


    stu_status = stu_register('山炮', 22, course='全栈开发')

    if stu_status:
        print('注册成功!')
    else:
        print('too old to be a student.')    
    输出结果:
    ----注册学生信息----
    姓名: 山炮
    age: 22
    国籍: CN
    课程: 全栈开发
    注册成功!

    注意:
        函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so也可以理解为return语句代表着函数的结束。
        如果未在函数中指定return,那么这个函数的返回值就是None。

全局与局部变量:
    在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的函数。
    当全局变量和局部变量同名时,在定义局部变量的函数内,局部变量起作用;在其他地方全局变量起作用。

如何在函数里修改全局变量:

    name = "Alex Li"

    def change_name():
        global name
        name = "Alex 又名 金角大王,路飞学城讲师"
        print("after change", name)


    change_name()

    print("在外面看看name改了么?", name)

    global name的作用就是要在函数里声明全局变量name ,意味着最上面的name = "Alex Li"即使不写,程序最后面的print也可以打印name

匿名函数:
    匿名函数就是不需要显示的指定函数名
    def calc(x, y):
        return x*y


    print(calc(2, 3))
    换成匿名函数为:
    calc = lambda x, y: x*y
    print(calc(2, 5))

高阶函数:
    变量可以指向函数,函数的参数能接受变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为 高阶函数。
    def add(x, y, f):
        return f(x) + f(y)


    res = add(2, -7, abs)
    print(res)
    只需要满足以下任意一个条件,即是高阶函数:
        接受一个或多个函数作为输入
        return返回另一个函数

猜你喜欢

转载自blog.csdn.net/TynMhxx/article/details/81147884