(7) 探索Python函数的无限可能:从递归到Lambda的奇妙之旅

欢迎进入Python编程的奇幻世界!在这个课程中,我们将一起探索编程的乐趣,通过生动有趣的方式,培养编程的逻辑思维和创造力,该课程适合有一定基础的中学及以上学生及成年人。
以下是我们课程的大纲:
Python:趣味编程,探索未来

在这里插入图片描述

目录

  • 1. 前言
  • 2. 认识我们的“魔法咒语”——函数
    • 2.1 函数的定义
    • 2.2 函数的调用
    • 2.3 几个简单的函数定义及调用的小例子
      • 2.3.1 不带参数及返回值的小例子
      • 2.3.2 带参数不带返回值的小例子
      • 2.3.3 带参数及返回值的小例子
    • 2.4 函数的参数
      • 2.4.1 不可变参数
      • 2.4.1 可变参数
    • 2.5 函数的参数类型
      • 2.5.1 位置参数
      • 2.5.2 关键字参数
      • 2.5.3 默认参数
      • 2.5.3 不定长参数(又名:可变参数)
      • 2.5.4 可变的关键字参数
  • 3. 神奇的“无名咒语”——Lambda 函数
  • 4. 自己变出魔法咒语——递归函数
        • 五、让魔法咒语更强大——装饰器

1. 前言

在当今的编程世界中,Python 凭借其简洁的语法、强大的库支持和广泛的应用领域,成为了许多开发者首选的编程语言。

函数作为编程中的核心概念之一,是组织代码、提高代码复用性和可读性的重要手段。

本文将带你深入了解 Python 中的函数编程,从基础到进阶,帮助你掌握这一关键技能。

2. 认识我们的“魔法咒语”——函数

首先,我们要知道什么是函数。函数就像是一个魔法盒子,你给它一些“材料”(参数),它就能帮你变出你想要的东西(返回值)。但是,这个魔法盒子需要你先告诉它怎么做,这就是编写函数的过程。

2.1 函数的定义

函数的定义格式如下:

def 函数名(参数列表):
    函数体

说明:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 圆括号之间用于定义参数,可以传入多个参数,参数之间逗号分隔
  • 函数内容以冒号 : 起始,内容必须缩进
  • 如果有返回值,最后使用 return [表达式] 结束函数;如果没有返回值,return 可以不写 。

2.2 函数的调用

函数的调用可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

  • 通过函数名称进行调用
  • 不调用,函数不执行

2.3 几个简单的函数定义及调用的小例子

2.3.1 不带参数及返回值的小例子

def hello() :
    print("Hello World!")

hello()

结果:

Hello World!

2.3.2 带参数不带返回值的小例子

def greet(name):
    print(f"Hello, {
     name}!")
 
greet("Alice")

结果:

Hello, Alice!

2.3.3 带参数及返回值的小例子

def max(a, b):
    if a > b:
        return a
    else:
        return b
 
a = 4
b = 5
print(max(a, b))

结果:

5

2.4 函数的参数

形参:形参是函数定义中用于接收传入值的变量
实参:实参是在函数调用时实际传递给函数的值或变量。

如:

def greet(name):    # 定义函数greet, name为形式参数
    print(f"Hello, {
     name}!")
 
greet("Alice")    # 调用函数,"Alice"为实际参数

2.4.1 不可变参数

在Python中,不可变参数(immutable parameters)指的是那些一旦赋值后,其值就不能被改变的参数。

Python中的不可变类型包括整数(int)、浮点数(float)、字符串(str)和元组(tuple)等。

当你将一个不可变对象作为参数传递给一个函数时,函数内部接收到的实际上是这个对象的一个引用(或者说是指针)。但是,由于这个对象是不可变的,所以你不能在函数内部改变这个对象的值。如果你尝试这样做,Python会创建一个新的对象,而不是修改原来的对象。

下面是一个简单的例子来说明不可变参数的行为:

def modify_string(s):
    s = "new string"  # 这里并没有改变原来的字符串,而是创建了一个新的字符串对象

original_string = "old string"
modify_string(original_string)
print(original_string)  # 输出:old string,原来的字符串没有被改变

在这个例子中,尽管我们在函数modify_string内部给参数s赋了一个新的字符串值,但是这个改变并没有影响到函数外部的original_string变量。这是因为字符串是不可变的,所以s = "new string"这行代码实际上是在内存中创建了一个新的字符串对象,并将s指向了这个新对象,而原来的字符串对象(“old string”)仍然保持不变。

2.4.1 可变参数

在Python中,可变参数(mutable parameters)指的是那些一旦赋值后,其值可以被改变的参数。与不可变参数(如整数、浮点数、字符串和元组)不同,可变参数允许在函数内部进行修改,并且这些修改会影响到函数外部的原始对象。

Python中的可变类型主要包括列表(list)、字典(dict)、集合(set)以及用户自定义的类实例等。当这些可变对象作为参数传递给函数时,函数内部接收到的是这个对象的引用(或指针),因此可以在函数内部直接修改这个对象的内容或结构。

下面是一个简单的例子来说明可变参数的行为:

def modify_list(lst):
    lst.append(4)  # 修改列表的内容

original_list = [1, 2, 3]
modify_list(original_list)
print(original_list)  # 输出:[1, 2, 3, 4],原来的列表被改变了

在这个例子中,我们在函数modify_list内部使用append方法修改了列表lst的内容。由于列表是可变的,所以这个修改影响到了函数外部的original_list变量。

需要注意的是,虽然你可以在函数内部修改可变对象的内容,但是如果你尝试将函数内部的可变对象重新指向一个新的对象(例如通过赋值操作),那么这种改变不会影响到函数外部的原始对象。这是因为函数内部的可变参数仍然只是一个引用,当你重新赋值时,你只是让这个引用指向了一个新的对象

上一篇:分布式数据库的常见实现


下一篇:微信小程序自定义图片预览操作按钮(解决api预览时不能删除提交服务器等自定义操作)-小结: