zoukankan      html  css  js  c++  java
  • 函数的进阶

    目标

    函数参数和返回值的作用

     函数的返回值 进阶

     函数的参数 进阶

     递归函数

    01.函数参数和返回值的作用

    函数根据 有没有参数 以及 有没有返回值,可以 相互结合,一共有 4种 组合形式

    无参数,无返回值

    无参数,有返回值

    有参数,无返回值

    有参数,有返回值

    定义函数时,是否要接收参数,或者是否返回结果,是根据实际的功能需求 来决定的!

    1.如果函数 内部处理的数据不确定,就可以将外界的数据以参数传递到函数内部

    2.如果希望一个函数 执行完成后向外界汇报执行结果,就可以增加函数的返回值

     1.1 无参数,无返回值

    此类函数,不接受参数,也没有返回值,应用场景如下:

    1.只是单纯的做一件事,例如 显示菜单

    2.在函数内部 针对全局变量进行操作,例如:新建名片,最终结果 记录在全局变量中

    注意:

     如果全局变量的数据是一个 可变类型,在函数内部可以使用 方法 修改全局变量的内容——变量的引用不会改变

     在函数内部,使用赋值语句 才会 修改变量的引用

    1.2 无参数,有返回值

    此类函数,不接受参数,但是有返回值,应用场景如下:

    采集数据,例如: 温度计,返回结果就是当前的温度,而不需要传递任何的参数

    1.3 有参数,无返回值

    此类函数,接收参数,没有返回值,应用场景如下:

    函数内部的代码保持不变,针对 不同的参数 处理 不同的数据

    例如 名片管理系统 针对 找到的名片修改、删除 操作

    1.4 有参数,有返回值

    此类函数,接收参数,同时也有返回值,应用场景如下:

     02. 函数的返回值 进阶

     在程序开发中,有时候,会希望 一个函数执行结束后,告诉调用者一个结果,一边调用者针对具体数据做后续处理

     返回值 是函数 完成工作后,最后 给调用者的 一个结果

     在函数中使用 return 关键字可以返回结果

     调用函数一方,可以 使用变量接收 函数的返回结果

    问题:一个函数执行后能否返回多个结果?

    实例——温度和湿度的测量

     假设要开发一个函数能够同时返回当前的温度和湿度

     先完成返回温度的功能如下:

    def measure():
        """返回当前温度"""
        print("开始测量")
        temp = 39
        print("测量结束")
        return temp
    
    result = measure()
    print(result)

     在利用 元组 在返回温度的同时,也能够返回 湿度

     改造如下:

    def measure():
        """返回当前温度和湿度"""
        print("开始测量")
        temp = 39
        wetness = 50
        print("测量结束")
        return (temp,wetness)

    提示:如果一个函数返回的是元组,括号可以省略

    技巧

     在python中,可以 将一个元组 使用赋值语句 同时赋值给 多个变量

     注意:变量的数量需要和元组中元素的数量保持一致

    temp,wetness = measure()

    面试题——交换两个数字

    题目要求

    1.又两个整数变量 a=6 , b=100

    2.不使用其他变量,交换两个变量的值

    解法1

    a = a+b
    b = a-b
    a = a-b
    print(a)
    print(b)

    解法2—python专有,利用元组

    a,b = b,a
    print(a)
    print(b)

    03.函数的参数 进阶

    3.1.不可变和可变参数

    问题1:在函数内部,针对参数使用的 赋值语句,会不会影响调用函数时传递的实参变量?——不会!

     无论传递的参数是可变还是不可变

      只要 针对参数 使用 赋值语句,会在 函数内部 修改 局部变量的引用不会影响到 外部变量的引用

    def demo(num,num_list):
        print("函数内部")
        # 赋值语句
        num = 200
        num_list = [1,2,3]
        print(num)
        print(num_list)
        print("函数代码完成")
    
    gl_num = 99
    gl_list = [4,5,6]
    demo(gl_num,gl_list)
    print(gl_num)
    print(gl_list)

    问题2:如果传递的参数是 可变类型,在函数内部,使用 方法 修改了数据的内容,同样会影响到外部的数据

    gl_list = [1,2,3]
    def demo(num_list):
        print("函数内部代码")
        #使用方法修改列表内容
        num_list.extend([8,9])
        print(num_list)
        print("函数执行完成")
    
    
    demo(gl_list)
    print(gl_list)

    面试题—— +=

      在 python 中, 列表变量调用 += 本质上是在执行列表变量的 extend 方法,不会修改变量的引用

    gl_num = 9
    gl_list = [1,2,3,4]
    def demo(num,num_list):
        print("函数开始")
        # num = num + num
        num += num
        # 本质上是在调用列表的 extend 方法
        # num_list.extend(num_list)  由于是调用方法,所以不会修改变量的引用
        # 函数执行结束后,外部数据同样会发生变化
        # num_list += num_list
        print(num)
        print(num_list)
        print("函数结束")
    
    
    demo(gl_num,gl_list)
    print(gl_num)
    print(gl_list)

    3.2 缺省参数

      定义函数时,可以给 某个参数 指定一个默认值,具有默认值的参数就叫做 缺省参数

      调用函数时,如果没有传入 缺省参数 的值,则在函数内部使用定义函数时指定的 参数默认值

      函数的缺省参数,将常见的值设置为参数的缺省参数,从 而简化函数的调用

      例如:对列表排序的方法

    gl_num_list = [4,5,6,2,4,9,1,2,3]
    # 默认就是升序排序,因为这种应用需求跟多
    gl_num_list.sort()
    print(gl_num_list)
    
    
    # 只有当需要降序排序时,才需要传递 reverse 参数
    gl_num_list.sort(reverse=True)
    print(gl_num_list)

     指定函数的缺省参数

      在函数后使用赋值语句,可以指定参数的缺省值

    def print_info(name,gender=True):
        """
    
        :param name: 班上同学的姓名
        :param gender: True表示男生,False表示女生
        """
        gender_txt = "男生"
        if not gender:
            gender_txt = "女生"
        print("%s是%s" % (name,gender_txt))
    
    
    print_info("小明")
    print_info("老王")
    print_info("小美",False)

    提示:

    1.缺省参数,需要使用 最常见的值 作为默认值

    2.如果一个参数的值 不能确定,则不应该设置默认值,具体的数值在调用函数时,由外界传递!

    缺省参数的两个注意事项:

    1)缺省参数的定义位置

      必须保证 带有默认值的缺省参数 在参数列表末尾

      所以,以下定义是错误的!

    def printi_nfo(name,gender=True,title);

    2)调用带有多个缺省参数的函数

      在 调用函数时,如果有 多个缺省参数,需要指定参数名,这样解释器才能够知道参数的对应关系!

    def print_info(name,title="",gender=True):
        """
    
        :param name: 班上同学姓名
        :param title: 职位
        :param gender: True 男生, False 女生
        """
        gender_text = "男生"
        if not gender:
            gender_text = "女生"
        print("[%s] %s 是%s" %(title,name,gender_text))
    
    # 提示:在指定缺省参数的默认值时,应该使用最常见的值作为默认值
    print_info("小明")
    print_info("老王",title="班长")
    print_info("小美",gender=False)
  • 相关阅读:
    windows中80端口被System占用,PID=4的问题
    SpringBoot中动态加载(热部署)
    eclipse中Cannot change version of project facet Dynamic Web Module to 3.0的问题解决
    Eclipse启动tomcat后404错误
    Eclipse在当前行之上插入一行
    Java中==规则
    简明log4j配置教程
    CentOS7 配置静态IP
    CentOS7 mini安装后没有ifconfig命令的解决办法
    shell编程学习笔记之sed编辑器
  • 原文地址:https://www.cnblogs.com/ljwpython/p/14268257.html
Copyright © 2011-2022 走看看