Python基础(四):函数和代码复用

函数和代码复用

函数

  1. 定义

    def <函数名>(<参数(0个或多个)>):
        <函数体>
        return <返回值>

    1. 所指定的参数是一种占位符

    2. 不调用,不执行

    3. 作用:模块化设计+代码复用

  2. 调用

  3. 参数传递

    • 必需参数
    • 可选参数(默认参数)
    • 可变参数(不定长参数)
    • 关键字参数(按名称传递参数)
  4. 返回值

    • 函数可以有返回值,也可以没有,可以有 return, 也可以没有。
    • return 可以传递 0 个返回值,也可以传递任意多个返回值(不带参数值的 return 语句返回 None)。
  5. 局部变量和全局变量

    • 规则1:局部变量和全局变量是不同变量

      1. 局部变量是函数内部的占位符,与全局变量可能重名但不同

      2. 函数运算结束后,局部变量被释放

      3. 可以使用 global 保留字在函数内部使用全局变量

    • 规则2:如果局部变量是组合数据类型且未创建,则等同于全局变量

  6. lambda 函数(匿名函数)

代码复用

  • 模块化设计

    模块内部紧耦合,模块之间松耦合

递归

  • 两个关键特征

    • 基例:存在一个或多个不需要再次递归的基例
    • 链条:计算过程中的递归链
  • 递归的实现:函数+分支语句

    • 函数内部,采用分支语句对输入参数进行判断
    • 基例和链条,分别编写对应代码
  • 实例:字符串反转,斐波那契数列,汉诺塔

思维导图

Tips

函数参数传递:可使用的正式参数类型

  1. 必需参数

    • 必需参数须以正确的顺序传入函数。
    • 调用时的数量必须和声明时的一样。
  2. 可选参数(默认参数)

    def <函数名>(<必需参数>, <可选参数>):
        <函数体>
        return <返回值>

    • 函数定义时可以为某些参数指定 默认值,构成可选参数。
    • 调用函数时,如果没有传递可选参数,则会使用默认值。
    • 可选参数要放在必需参数之后。
    # 举例
    def printinfo( name, age = 35 ):
       print ("名字: ", name)
       print ("年龄: ", age)
       return
    printinfo( "runoob" )
    
    # 输出
    名字:  runoob
    年龄:  35
  3. 可变参数(不定长参数)

    def <函数名>(<参数>, *b ):
        <函数体>
        return <返回值>

    • 函数定义时可以设计可变数量的参数,即 不确定参数总数量
    • 加了星号 * 的参数会以 元组(tuple) 的形式导入,存放所有未命名的变量参数。
    # 举例
    def printinfo( arg1, *vartuple ):
       print (arg1)
       print (vartuple)
    printinfo( 70, 60, 50, 100 )
    
    # 输出
    70
    (60, 50, 100)
  4. 关键字参数(按名称传递参数)

    使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能用参数名匹配参数值。

    # 举例
    def printinfo( name, age ):
       print ("名字: ", name)
       print ("年龄: ", age)
       return
    printinfo( age=50, name="runoob" )
    
    # 输出
    名字:  runoob
    年龄:  50

lambda函数(匿名函数)

  • Python 使用 lambda 来创建匿名函数,不再使用 def 语句这样标准的形式定义一个函数。

  • 格式:<函数名> = lambda <参数>: <表达式>

# 例1
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))

# 输出
相加后的值为 :  30

# 例2,将匿名函数封装在 myfunc 函数中
def myfunc(n):
    return lambda a : a * n
# 通过传入不同的参数来创建不同的匿名函数
mydoubler = myfunc(2) # 等价于 mydoubler = lambda a : a * 2
mytripler = myfunc(3) # 等价于 mytripler = lambda a : a * 3

print(mydoubler(11))
print(mytripler(11))

# 输出
22
33

谨慎使用 lambda 函数


Python基础(四):函数和代码复用
https://luminous-ee.github.io/2023/01/24/Python基础(四):函数和代码复用/
作者
落与
发布于
2023年1月24日
许可协议