python入门篇-day04-函数

介绍

概述

函数也叫方法, 可以用单词 Function(函数, 功能), Method(方法) 来表示.函数 = 把具有独立功能的代码封装到一起, 使其成为具有特殊功能的 代码集.

好处

  1. 提到代码的复用性.

  2. 模块化编程.

格式

def 函数名(形式参数1, 形参2...):
    函数体, 就是以前写的逻辑代码, if, for...
​
    return 具体的返回值

格式解释:def defined单词的缩写, 表示: 定义1个函数.函数名 方便我们调用函数的, 起名时最好做到 见名知意.get_max(),get_sum()形参参数 简称叫: 形参, 形容调用函数需要传入什么值.函数体 表示该函数要完成什么功能, 就是以前我们写的逻辑代码, if, for...return 作用1(主职): 结束函数的. 作用2(兼职): 可以返回函数的执行结果.

调用格式

  1. 写 函数名()

  2. 传参. 这里写的是 实参(实际参数), 表示: 实际参与运算的数据.

  3. 接收返回值 如果有的话.

细节

  1. 函数必须先定义, 然后才能调用.

  2. 函数只有被调用, 才会执行.

代码演示

def call():
    print('----- 拨号 -----')
    print('(拨号方)手机发送信号包到 就近的基站')
    print('(拨号方)就近的基站 解析信号包, 然后通过地下电缆 发送信号包到 接收方就近的基站')
    print('(接收方就近的基站 发送信号包 到 (接收方)手机')
    print('(接收方)手机解析信号包...')
    print('(接收方)盲音等待 ...')
​
# 具体的打电话动作.
call()
​
# 需求4: 给 王宝强 打电话...
call()

说明文档

概念

概述: 你可以理解为就是函数的 注释, 帮助程序员快速认识函数的作用的.

格式

格式: 在函数内部的第一行, 直接用 三引号包裹即可.

演示

# 需求: 定义函数 get_sum(a, b), 求两个整数的和.
​
def get_sum(a, b):
    """
    自定义函数, 用于计算 两个整数的 和
    :param a: 要求和计算的第1个整数
    :param b: 要求和计算的第2个整数
    :return: 返回a和b的 求和结果
    """
    sum = a + b
    return sum
​
​
sum = get_sum(10, 20)
print(f'求和结果为: {sum}')
print('-' * 30)
​
# 也可以查看函数的说明文档.
help(get_sum)

参数介绍

细节

  1. 函数 根据 参数 和 返回值不同, 主要分为 如下的四种写法:

​ 1. 无参无返回值. 2. 有参无返回值. 3. 无参有返回值. 4. 有参有返回值.

  1. 定义函数的时候, 写的参数列表叫: 形参, 形容调用函数, 需要传入什么值.

  2. 调用函数的时候, 写的参数列表叫: 实参, 表示调用函数时, 实际参与运算的数据.

  3. 函数只有被调用, 才会执行.

演示

# 需求1: 定义函数 get_sum(), 用于计算两个整数和, 并打印结果.
# 写法1: 无参无返回值.
def get_sum():
    sum = 10 + 20
    print(f'求和结果为: {sum}')
    return  # 方法的最后一行, 默认都有1个return, 表示结束方法, 并默认返回None
​
​
# 调用函数.
get_sum()
print('-' * 30)
​
​
​
# 写法2: 有参无返回值.    因为上述的函数只能计算整数 10 和 20的求和结果, 不够灵活.
def get_sum2(a, b):     # a,b充当的作色是 形参.
    """
    自定义函数, 用于计算两个整数和.
    :param a: 求合计计算用到的第 1个整数
    :param b: 求合计计算用到的第 2个整数
    :return: 空
    """
    sum = a + b
    print(f'求和结果为: {sum}')
    return  # 方法的最后一行, 默认都有1个return, 表示结束方法, 并默认返回None 打印求和结果.
​
# 调用函数.
get_sum2(1, 2)      # 1 和 2在这里充当的是: 实参(实际参数)
get_sum2(10, 20)    # 10 和 20在这里充当的是: 实参(实际参数)
​
print("-" * 30)
​
​
# 需求2: 定义函数, 完成 前两个数求和, 对第3个数进行减法运算, 调用, 并测试该函数.
def get_sum3(a, b, c):      # 形参.
    """
    自定义函数, 完成 n1 + n2 - n3的
    :param a: 要求和的第1个数
    :param b: 要求和的第2个数
    :param c: 进行减法运算的数字
    :return: 无
    """
    result = a + b - c
    print(result)
​
​
# 调用 get_sum3()函数
get_sum3(10, 20, 5) # 实参(实际参与运算的数字), 25.

函数返回值

介绍

概述: 返回值指的是 函数执行完毕后, 需要返回给 调用者一个什么样的结果.格式: 在函数内部写, return 具体的返回值即可.需求: 定义get_sum(), 用于计算两个整数和.

演示

# 需求: 定义get_sum(), 用于计算两个整数和.
​
# 1. 定义get_sum()函数.
def get_sum(a, b):      # a, b 形参, 形容调用函数, 需要传入是什么样的值.
    """
    自定义函数, 计算两个整数的和.
    :param a: 求和运算的第1个整数
    :param b: 求和运算的第2个整数
    :return: 求和结果.
    """
    # 具体的求和过程
    sum = a + b
    # 返回求和结果
    return sum
​
​
# 2. 调用函数.
sum = get_sum(10, 20)
print(f'求和结果为: {sum}')

函数嵌套调用

介绍

概述: 函数的嵌套调用指的是 在一个函数中, 去调用另一个函数.

执行流程: 根据入栈的顺序, 进行执行的.

演示

# 需求: 观察如下的代码, 看其执行结果是什么.
# 1. 定义 fun01 函数
def fun01():
    print('--- fun01 start ---')
    print('hello world!')
    print('--- fun01 end ---')
​
# 2. 定义 fun02 函数
def fun02():
    print('--- fun02 start ---')
    # 在 fun02()函数内, 调用 fun01()函数, 这就叫: 函数的嵌套调用.
    fun01()
    print('--- fun02 end ---')
​
​
# 3. 调用函数.
# fun01()
fun02()

函数的应用

打印图形

# 定义函数打印一行
def print_line(cols, char):
    for i in range(cols):
        print(char, end='\t')
    print()
​
​
# 定义函数打印多行
def print_lines(rows, cols, char):
    for i in range(rows):
        print_line(cols, char)
​
​
print_lines(5, 5, '@')

计算平均值

def get_sum(a, b, c):
    return a + b + c
​
​
def get_avg(a, b, c):
    return get_sum(a, b, c) / 3
​
​
print(get_avg(3, 4, 5))

变量的作用域

变量的作用域指的是 变量的作用范围, 即: 变量在哪里能用, 在哪里不能用.

局部变量

定义到函数的形参列表, 或者 函数内的变量.

只能在函数内部使用, 出了函数就用不了了.

生命周期: 随着函数的调用而存在, 函数的调用完毕而消失.

全局变量

  1. 定义到函数外的变量, 或者 用 global 修饰的变量.

  2. 在当前模块中的函数, 都可以使用.

  3. 生命周期: 随着模块的加载而存在, 模块的卸载而消失.

global关键字介绍:

被它修饰的变量 => 全局变量, 可以实现, 定义 函数内的变量, 在函数外使用.

演示

# 需求1: 演示变量的生命周期 -> 局部变量.
def fun01():
    a = 10      # 局部变量
    print(f'函数内 a: {a}')
​
​
# 需求2: 演示变量的生命周期 -> 全局变量.
b = 30      # 全局变量
def fun02():
    global c            # 局部变量 => 全局变量
    c = 100             # 全局变量
    print(f'函数内 b: {b}')
    print(f'函数内 c: {c}')
​
# main函数, 程序的主入口.
if __name__ == '__main__':
    # 调用函数.
    fun01()
​
    # 函数外, 尝试调用 fun01()函数内的 局部变量 a
    # print(f'函数外 a: {a}')  报错, 超出了 局部变量的 生命周期.
    print('-' * 30)
​
    fun02()
    print(f'函数外 b: {b}')
    print(f'函数外 c: {c}')

练习题

# 需求: 观察如下的代码, 看其打印结果是什么.
​
a = 100
​
def fun01():
    print(f'fun01函数  a: {a}')
​
def fun02():
    # global a
    a = 200
    print(f'fun02函数  a: {a}')   # 使用变量遵循 就近原则, 局部位置有就用, 没有就去当前脚本的全局位置找, 有就用, 没有就报错.
​
​
if __name__ == '__main__':
    fun01() # 100
    fun02() # 200
    fun01() # 100

多函数程序执行流程

1个函数的返回结果, 可以作为另一个函数的 参数.

演示

# 1. 定义函数, 返回1个整数.
def get_number():
    return 30
​
​
# 2. 定义函数, 传入1个整数, 判断其奇偶性.
def is_odd(n):
    if n % 2 == 0:
        print(f'{n} 是偶数!')
    else:
        print(f'{n} 是奇数!')
​
​
# 3. 测试上述的函数.
if __name__ == '__main__':
    # 分解版写法
    # 3.1 获取整数
    n = get_number()        # n = 30
​
    # 3.2 把 n(1个函数的返回值)  作为 is_odd()函数的参数进行传递.
    is_odd(10)
    is_odd(11)
    is_odd(n)
    print('-' * 30)
​
    # 合并版.
    is_odd(get_number())        # 细节: 函数的返回值, 可以作为另一个函数的参数.
    print('-' * 30)
​
​
    # 拔高, 函数名 可以作为 对象使用.
    # n = get_number()        # 函数名() 表示在 调用函数.
    my_fun = get_number       # 函数名, 可以作为对象使用. 即: 现在写 my_fun() 和 get_number() 是一样的.
    n = my_fun()
    print(n)        # 30

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值