🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

【复制粘贴即可运行】Python函数创建大师课:从def基础到高级应用

要在电脑上通过命令提示符或 PowerShell 运行 Python,需要先下载并安装 Python。
如果你还没有安装,请参考Python安装与开发环境配置一文来完成安装。

在制作网站或开发应用程序时,你是否经常遇到这样的情况:“咦,这段代码我刚才是不是写过?”……这种情况很常见吧。要轻松解决这种“重复劳动”,我们今天介绍的Python“函数”就能派上用场。

本文旨在让编程初学者也能安心学习,将通过大量示例代码,从Python函数的基本创建方法到便捷的高级技巧进行解说。关键词是“复制粘贴即可运行”。让我们先把复杂的理论放一边,首先体验一下“自己写的代码成功运行!”的乐趣吧!


到底什么是Python的“函数”?

要形象地理解函数,把它想象成“自动售货机”可能是最简单的。

就像这样,函数就是“将特定工作(处理)打包在一起的东西”。一旦创建好,之后就可以像按按钮一样多次调用它来完成同样的工作。这样做的好处是代码更短、更简洁,修改起来也更方便。

在Python中,我们使用名为def的命令语句(def语句)来创建函数。那么,我们马上来看看具体的创建方法吧!


【基础篇】Python函数的创建与使用

首先从最基础的开始。让我们来创建一个既没有参数也没有返回值的最简单的函数。

1. 基本语法:使用def定义函数

创建函数时,以def 函数名():的形式开头,下一行开始通过缩进(空出几个格)来编写处理内容。这里,我们来创建一个只显示“你好!”的简单函数say_hello

# 1. 定义函数
def say_hello():
  print("你好!")

# 2. 调用函数
say_hello()

运行结果:

你好!

重点在于,仅仅定义(创建)了函数是不会发生任何事情的。只有像say_hello()这样写出函数名并加上括号,函数才会被调用,内部的处理才会执行。


2. 试着使用参数

接下来,让我们试用一下相当于自动售货机中“钱币”的“参数”。通过使用参数,可以从外部向函数传递信息,从而改变处理内容。

这里,我们创建一个根据给定的名字返回问候语的函数greet。像def greet(name):这样,在括号中放入变量名(本例中为name),它就成为了参数。

# 定义一个接收参数的函数
def greet(name):
  print(f"你好,{name}!")

# 调用函数时,传递具体的值作为参数
greet("小明")
greet("小红")

运行结果:

你好,小明!
你好,小红!

就像这样,只需改变作为参数传递的值,同一个函数就能灵活地改变结果。


3. 通过返回值获取结果

这次轮到相当于自动售货机“饮料”的“返回值”了。当你想将函数内计算的结果等返回给函数的调用者时,就会使用它。要返回一个值,我们使用return语句。

让我们创建一个接收两个数值并返回它们之和的add函数吧。

# 接收两个参数并返回其和的函数
def add(a, b):
  total = a + b
  return total # 使用return语句返回结果

# 调用函数,并将返回值保存在变量result中
result = add(5, 3)

print(f"5 + 3 的计算结果是 {result}。")

运行结果:

5 + 3 的计算结果是 8。

add(5, 3)被执行时,函数内部会计算total = 8,然后这个值8会通过return返回给函数的调用者。接着,返回的8被赋值给变量result

通过使用return而不是直接用print()显示,计算结果可以被用于进一步的处理,这非常方便。


【应用篇】更便捷的函数使用方法

掌握了基础之后,让我们来看看更深入的应用方法。掌握了这些,你就能写出更灵活、更高效的代码。

1. 默认参数:没有参数也没关系!

在调用函数时,有时我们希望可以省略某些参数。在这种情况下,“默认参数”就非常方便了。我们可以像def 函数名(参数名="默认值"):这样,预先设定好初始值。

# 为第二个参数lang设置默认值 "zh"
def greet_language(name, lang="zh"):
  if lang == "ja":
    message = f"{name}さん、こんにちは!" # 日语:你好,{name}!
  elif lang == "en":
    message = f"Hello, {name}!"
  elif lang == "zh":
    message = f"你好,{name}!"
  else:
    message = "未指定语言。"
  
  return message

# 省略第二个参数(将使用默认值 "zh")
print(greet_language("王伟"))

# 指定第二个参数
print(greet_language("John", lang="en"))

运行结果:

你好,王伟!
Hello, John!

greet_language("王伟")这样省略参数时,系统会自动将其作为lang="zh"处理,因此会输出中文问候语。非常方便吧!


2. 关键字参数:不担心参数顺序

当参数变多时,记住它们的顺序会变得很麻烦。使用“关键字参数”,你可以通过参数名=值的形式来指定,因此不必担心顺序问题。

def create_user_profile(name, age, country):
  return f"姓名: {name}, 年龄: {age}岁, 国家: {country}"

# 按顺序指定参数
profile1 = create_user_profile("张伟", 30, "中国")
print(profile1)

# 使用关键字参数并调换顺序指定
profile2 = create_user_profile(country="美国", name="Emily", age=25)
print(profile2)

运行结果:

姓名: 张伟, 年龄: 30岁, 国家: 中国
姓名: Emily, 年龄: 25岁, 国家: 美国

使用关键字参数的另一个好处是,代码的可读性会提高,因为哪个值传递给了哪个参数一目了然。


【体验角】在浏览器中运行的Python函数

最后,各位Web开发者们,让我们来尝试仅用大家熟悉的HTML文件来运行Python吧! 完整复制下面的代码,将其保存为index.html之类的文件名,然后在浏览器中打开它。一个能根据你输入的文字返回问候语的简单Web应用就完成了。

这是使用一种名为PyScript的技术,在HTML文件中直接运行Python代码。无需任何复杂的设置。请务必体验一下“复制粘贴即可运行”的乐趣!

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>在浏览器中体验Python函数!</title>
  <!-- 加载 PyScript -->
  <link rel="stylesheet" href="https://pyscript.net/releases/2024.1.1/core.css">
  <script type="module" src="https://pyscript.net/releases/2024.1.1/core.js"></script>
  <style>
    body { font-family: sans-serif; padding: 2em; line-height: 1.6; }
    input { padding: 8px; font-size: 1em; }
    button { padding: 8px 16px; font-size: 1em; cursor: pointer; }
    #output { margin-top: 1em; font-weight: bold; font-size: 1.2em; color: #2c3e50; }
  </style>
</head>
<body>

  <h1>问候语生成器</h1>
  <p>请输入您的名字并点击按钮。</p>

  <input id="user-name" type="text" placeholder="输入名字...">
  <button py-click="generate_greeting">生成问候语</button>
  
  <div id="output"></div>

  <py-script>
    from pyscript import document

    # ★在这里定义Python函数★
    def create_greeting_message(name):
      # 如果名字为空,则返回默认问候语
      if not name:
        return "请输入您的名字!"
      # 如果有名字,则返回使用该名字的问候语
      return f"欢迎来到网络世界,{name}!"

    # 按钮被点击时执行的函数
    def generate_greeting(event):
      # 从input元素获取用户输入
      input_element = document.querySelector("#user-name")
      user_name = input_element.value
      
      # 使用上面定义的函数创建问候消息
      message = create_greeting_message(user_name)
      
      # 将消息写入用于显示的div元素中
      output_div = document.querySelector("#output")
      output_div.innerText = message
  </py-script>

</body>
</html>

使用函数时应注意的事项

函数非常强大,但为了正确使用,有几点需要注意。

  1. 缩进是生命!
    在Python中,缩进(indentation)代表代码块。def之后的处理必须始终使用相同数量的空格(通常是4个)进行缩进。如果缩进不一致,会导致错误。
  2. 取一个易于理解的函数名
    函数名应该能够让人一眼就看出该函数“做什么”。例如,包含动词的名字如addcreate_user_profile是常见的做法。不好的例子是像function1proc这样看不出作用的名字。
  3. 注意变量的作用域
    在函数内部定义的变量(局部变量)不能在函数外部使用。这是一个重要的机制,可以防止函数无意中影响到外部。

让我们来看一个变量作用域的例子。

def my_function():
  # local_variable 是一个只在 my_function 内部有效的局部变量
  local_variable = "这是函数内部的变量"
  print(local_variable)

# 执行函数
my_function()

# 尝试从函数外部访问 local_variable 会导致错误
# print(local_variable) # NameError: name 'local_variable' is not defined

运行结果:

这是函数内部的变量

如果你去掉最后一行print(local_variable)的注释并运行它,就会发生NameError错误。这是因为local_variable在函数外部是不存在的。这种“影响范围受限”的特性,使得代码更安全、更易于管理。


总结:掌握函数,迈向编程新高度!

这次,我们通过大量可复制粘贴运行的代码,学习了从Python函数的基础到应用。

函数是编程中最基本、最重要的概念之一。它让你不再需要重复编写相同的处理,并极大地提高了代码的整体可读性。

首先,请尝试修改本文中的示例代码,创建你自己的函数。体验“成功运行”是进步的最快途径。

掌握了函数之后,要不要学习一下如何批量处理数据呢?下面的文章详细解说了Python中最常用的数据结构——“列表”和“字典”。

下一步:学习Python的列表、字典等数据结构