24 函数的基本使用

502次阅读
没有评论

共计 2439 个字符,预计需要花费 7 分钟才能阅读完成。

引入

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 结束
正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计2439字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)