跳转到主要内容
模块 5 · 第 1 课(共 4)课程中的17/36~12 min
模块课程(1/4)

定义并返回

函数是可重用的代码块:您可以使用 def 定义它一次, 然后根据需要多次调用它。函数使代码模块化, 可测试,并且自我记录。

基本语法

Python
def saluta(nome):
    return f"Ciao, {nome}!"

saluta("Ada")     # 'Ciao, Ada!'
  • def 介绍函数,后面是名称和参数 括号。
  • : 打开缩进块。
  • return 将一个值发送回调用者并结束该函数。

显式 return 与隐式 None

如果不写 return,函数会隐式返回 None:

Python
def stampa_e_basta(x):
    print(x)

risultato = stampa_e_basta("ciao")
# prints 'ciao'
print(risultato)   # None

裸露的 return (无值)也会返回 None,但它可以作为早期的 退出:

Python
def primo_pari(nums):
    for n in nums:
        if n % 2 == 0:
            return n
    return None   # explicit: communicates "not found"

多个值?返回一个元组

Python 没有“输出参数”:要返回多个内容,请返回一个 元组(通常由调用者解包)。

Python
def divisione_resto(a, b):
    return a // b, a % b

quoziente, resto = divisione_resto(17, 5)
# 3, 2

Docstring:内置文档

函数内的第一个字符串是 docstring:它显示在 help(fn) 并作为 IDE 中的工具提示。

Python
def area_cerchio(raggio):
    """Calcola l'area di un cerchio dato il raggio."""
    import math
    return math.pi * raggio ** 2

作用域:局部变量

函数内部定义的变量是本地:它们不存在 外面。

Python
def f():
    x = 10
    return x

f()    # 10
x      # NameError: name 'x' is not defined

函数总是返回一些东西

在Python中,如果函数没有显式声明return语句或具有空return,它将隐式返回特殊值None。没有不返回值的函数。

尝试一下

锻炼#python.m5.l1.e1
尝试:0加载中...

定义一个返回“x * 2”的函数“double(x)”。然后用 7 调用它并将结果分配给 `result`。评估“结果”。

正在加载编辑器...
显示提示

使用返回 x * 2。

3 次尝试后可用的解决方案

复习练习

锻炼#python.m5.l1.e2
尝试:0加载中...

定义返回元组“(最小值,最大值)”的“min_max(nums)”。在 `[3, 1, 4, 1, 5, 9, 2, 6]` 上调用它,并将结果解压到 `mn, mx` 中。评估 `(mn, mx)`。

正在加载编辑器...
显示提示

返回最小值(nums), 最大值(nums)

3 次尝试后可用的解决方案

额外的挑战

锻炼#python.m5.l1.e3
尝试:0加载中...

定义一个函数“is_palindrome(text)”,如果输入字符串与其反转版本相等,则返回“True”,否则返回“False”。使用 is_palindrome("radar") 作为最后一个表达式来测试函数。

正在加载编辑器...
显示提示

使用切片text[::-1]反转字符串并与原始文本进行比较。

3 次尝试后可用的解决方案