zoukankan      html  css  js  c++  java
  • 🍖函数的基本使用

    引入

    1.什么是函数

    • 具备某一个功能的工具就是程序中的函数
    • 事先准备工具的过程称之为函数的定义
    • 拿来就用称之为函数的调用

    2.为什么要用函数

    为了解决以下问题

    • 组织结构不清晰, 可读性差
    • 代码冗余
    • 管理维护难度大, 扩展性差

    3.如何使用函数

    • 原則 : 先定义, 后调用
    • 注意 : 没有先定义函数而直接调用,就相当于在引用一个不存在的变量名,报错

    一.定义函数的完整语法

    def 函数名(参数1,参数2,...):
        """
        文档描述
        """
        代码1
        代码2
        代码3
        return 值
    
    '''
    def:  定义函数的关键字
    函数名:  是用来调用函数的, 函数名的命名必须能反映出函数的功能(推荐使用动词)
    文档描述:  推荐写上,来增强函数的可读性
    代码块:  函数的功能实现代码
    return:  函数的返回值
    '''
    

    二.定义和调用阶段发生的事情

    1.函数定义阶段

    • 只检测语法,不执行函数体代码
    def foo():
        xxx   #这里执行才会报错
        print('from foo')
    
    """
    申请内存空间保存函数体代码
    将上述内存地址绑定给函数名,且函数名最好要使用动词
    定义函数不会执行函数体代码,但是会检测函数体语法,逻辑错误无法检测
    """
    

    2.函数调用阶段

    • 根据函数名找到函数的内存地址,然后执行函数体代码
    foo()
    
    """
    通过函数名找到函数的内存地址
    然后加括号就是在出触发函数体代码的执行
    调用阶段才会正真的执行函数体代码,这时候有逻辑错误就会报错
    """
    

    3.示例

    • 来回调用
    示例1
    def bar():
        print('from bar')
    
    def foo():
        print('from foo')
        bar()
    
    foo()  # from foo  from bar
    
    示例2
    def foo():
        print('from foo')
        bar()
    
    def bar():
        print('from bar')
    
    foo()  #from foo  from bar
    
    先调用,后定义:报错
    def foo():
        print('from foo')
        bar()
    
    foo()  #先调用了"foo"函数里面的"bar",在这之前没有先定义:报错
    
    def bar():
        print('from bar')
    

    三.函数定义的三种形式

    • 无参函数
    • 有参函数
    • 空函数

    1.无参函数

    • 当函数体的代码逻辑不需要函数的调用者掺入值的情况下,就无参
    def func():
         print('----------------------')
         print('---soft run-----------')
         print('----------------------')
    
     def interactive():
         name=input('username>>: ').strip()
         pwd=input('password>>: ').strip()
         print(name,pwd)
    
     interactive() #定义时无参,意味着调用时也无须传入参数
     interactive() #定义时无参,意味着调用时也无须传入参数
     interactive() #定义时无参,意味着调用时也无须传入参数
    

    2.有参函数

    • 当函数体代码需要接收使用外部传入值时, 就是有参
    判断传入的两个值的大小
    def max2(x,y):
        if x > y:
            return x     #返回值
        else:
            return y     #返回值
    
    res=max2(10,3)       #把返回值  赋值给  res
    print(res)           #10
    

    3.空函数

    • 函数体代码为pass,在程序的开始,往往事先想好程序都需要完成什么功能
    • 然后把所有功能都列举出来用pass充当函数体代码的“占位符”
    • 这使得程序的体系结构清晰,且可读性强
    def auth():
        """
        这是一个认证功能
        :return:
        """
        pass
    
    def put():
        """
        上传功能
        :return:
        """
        pass
    
    def get():
        """
        下载功能
        :return:
        """
        pass
    
    
    def ls():
        """
        list contents
        :return:
        """
        pass
    

    四.函数调用的三种形式

    1.语句形式

    只调用函数,不做任何的后续操作
    def func():
        print('from func')
    
    func()  # from func
    

    2.表达式形式

    赋值表达式
    def max2(x,y):
        if x > y:
            return x     #返回值
        else:
            return y     #返回值
    
    res=max2(10,3)       #把返回值  赋值给  res
    print(res)           #10
    
    数学表达式
    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    
     res=max2(10,3)*100    #加入计算
     print(res)            #1000
    

    3.函数调用可以当做一个参数传给另一个函数

    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    
    res=max2(10,3)
    print(res)
    res=max2(max2(10,3),11)   # 将函数作为参数传值
    print(res)  
    

    五.函数的返回值

    函数体代码运行完毕后需要有一个返回结果给调用者(三种形式)

    • 返回 None
    • 返回一个值
    • 返回多个值

    1、没有return, 返回值None

    def func():
        pass
    
    res=func()
    print(res)   #None
    

    2、return后跟一个值,返回该值本身

    def func1():
        return 1
    
    res=func1()
    print(res)    # 1
    

    3、return可以逗号分隔开,返回多个值,会返回一个元组给调用者

    def func2():
        return 1,2,[1,2,3]
    
    res=func2()
    print(res)        #(1,2,[1,2,3])
    pritn(type(res))  # <class "tuple">
    

    4.return 的作用

    1. 控制返回值, 返回值的值没有类型限制
    2. 是函数结束的标志,函数内可以写多个 return,但执行一次,函数就结束,并把 return 后面的值作为本次调用的返回值
    def func3():
        print('first')
        return 1        #遇到第一个 return 函数体就结束了
        print('second')
        return 2
        print('third')
        return 3
    
    res=func3()
    print(res)     # first 结束
    
  • 相关阅读:
    C++——多态
    C++——继承
    PAT1002 A+B for Polynomials
    PAT1001-A+B Format
    C++——运算符重载(下)
    图像处理与Python实现(岳亚伟)笔记二——彩色图像处理
    图像处理与Python实现(岳亚伟)笔记一
    827. Making A Large Island
    995. Minimum Number of K Consecutive Bit Flips (2021/2/18每日一题)
    685. Redundant Connection II (LeetCode 刷题笔记)
  • 原文地址:https://www.cnblogs.com/songhaixing/p/14047129.html
Copyright © 2011-2022 走看看