Python基础(31)–函数返回值、pass语句、文档字符串、注解与递归函数

◎知识点

  1. 函数的定义之多个返回值

  2. 函数的定义之pass语句

  3. 函数的定义之文档字符串

  4. 函数的定义之函数注解

  5. 递归函数


◎脚本练习

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
 @FileName:    function_return.py
 @Function:    python function return
 @Author:      Zhihe An
 @Site:        https://chegva.com
 @Time:        2021/7/4
"""

"""一、函数的定义之多个返回值"""

"""
    如果需要在调用函数后有多个返回值,可以在定义函数时在函数体内使用return语句返回由多个返回值组成的元组
"""

# 把列表中的所有数分成奇数和偶数两类
def classify_numbers(numbers):
    odds = []
    evens = []

    # 使用列表生成式之if-else
    # [odds.append(number) if number % 2 else evens.append(number) for number in numbers]

    for number in numbers:
        if number % 2:
            odds.append(number)
        else:
            evens.append(number)

    return odds, evens

print(classify_numbers([15, 86, 39, 26, 53, 68]))   # ([15, 39, 53], [86, 26, 68])

# 查找列表中的最小值和最大值
def lookup_min_max(numbers):
    if len(numbers) == 0:
        return

    min_num = max_num = numbers[0]

    for number in numbers[1:len(numbers)]:
        if number < min_num:
            min_num = number
        elif number > max_num:
            max_num = number

    return min_num, max_num

print(lookup_min_max([35, 26, 19, 86, 93, 68])) # (19, 93)


"""二、pass语句"""

"""
    pass语句什么都不做,它只是一个占位符,用在语法上需要语句的地方,例如:
    (1) if语句的条件执行体
    (2) for-in语句的循环体
    (3) 定义函数时的函数体
    
    有时候可能还没有想好上述相关语句该怎么写,就可以先使用pass语句作为占位符,以确保程序可以运行,
    等想好了之后再把pass语句替换掉
"""

age = 23
if age > 18:
    pass

for i in range(8):
    pass

def do_something():
    pass


"""三、函数的定义之文档字符串"""

"""
1、什么是文档字符串?
    对于函数、模块、类或方法,位于其第一行的字符串被称为文档字符串,通常用三个引号表示
    文档字符串用于对函数、模块、类或方法进行解释说明
    之所以称为"文档"字符串,是因为可以使用工具根据文档字符串自动地生成文档
    
    应该养成编写文档字符串的习惯,以提高程序的可读性
    
    通过属性__doc__可以访问文档字符串
    调用内置函数help()得到的帮助信息中会包含文档字符串
"""

print(len.__doc__)
print(help(len))

"""
2、函数的文档字符串的常见内容和格式约定
    (1) 第一行是简明扼要的总结
    (2) 第一行的首字母大写,第一行以句号结尾
    (3) 如果文档字符串包含多行,第二行是空行,从第三行开始是详细的描述
    
    更多关于文档字符串的约定,可参考PEP 257: https://www.python.org/dev/peps/pep-0257
"""

def form_complex(real = 0.0, imag = 0.0):
    """Form a complex number.

    Keyword arguments:
    real -- the real part(default 0.0)
    imag -- the imaginary part(default 0.0)
    """
    pass


"""四、函数的定义之函数注解"""

"""
1、什么是函数注解?
    定义函数时,为了让形参或返回值的类型或作用更加清晰,可以给形参或返回值添加函数注解,
    从而对形参或返回值做解释说明,以帮助函数文档化
    函数注解是可选的,可以添加也可以不添加
    函数注解可以是任意的表达式
    解释器会忽略函数注解,因此解释器并不会使用函数注解来检查实参的类型的返回值的类型
    
    更多关于函数注解,可参考PEP 3107 https://www.python.org/dev/peps/pep-3107/
"""

"""
2、添加函数注解
    给形参添加函数注解的方式为:在形参后面添加:和任意的表达式
    给返回值添加函数注解的方式为:在)的后面添加->和任意的表达式
"""

def f(a: 'string type', b: int) -> 'join a with b':
    return a + str(b)

print(f('hello', 12.3)) # hello12.3

"""
3、访问函数注解
    通过属性__annotations__可以访问函数注解
    调用内置函数help()得到的帮助信息中会包含函数注解
"""

# {'a': 'string type', 'b': <class 'int'>, 'return': 'join a with b'}
print(f.__annotations__)

print(help(f))


"""五、递归函数"""

"""
1、什么是递归函数?
    在一个函数的函数体内,可以调用其它函数
    如果在一个函数的函数体内调用了该函数本身,该函数就是递归函数
    
    递归函数包含了一个隐式的循环,因此,递归函数必须有一个明确的递归结束条件,也称为递归出口
    
    能用递归来解决的问题必须满足两个条件:
    (1) 可以通过递归调用来缩小问题的规模,且新问题与原问题有着相同的形式
    (2) 存在一种简单情境,可以使递归在简单情境下退出
    
    递归函数的优点是定义简单,逻辑清晰
"""

"""
2、使用递归计算阶乘
    n! = 1 * 2 * 3 ... * n = (n-1)! * n, 且1! = 1
    如果用函数fac(n)表示n!,那么fac(n) = fac(n - 1) * n = n * fac(n -1),且fac(1) = 1
"""

def fac(n):
    """使用递归计算阶乘"""
    if n == 1:
        return 1
    return n * fac(n -1)

print('fac(6) =', fac(6))   # fac(6) = 720

"""
3、使用递归计算斐波那切数列
    F0 = 0, F1 = 1, Fn = F(n - 1) + F(n -2)(n >= 2)
    如果用函数fib(n)表示Fn,那么fib(n) = fib(n - 1) + fib(n - 2),
    且fib(0) = 0, fib(1) =1
"""

def fib(n):
    """使用递归计算斐波那切数列"""
    if n == 0:
        return 0
    if n == 1:
        return 1
    return fib(n - 1) + fib(n - 2)

print('fib(6) =', fib(6))   # fib(6) = 8

▽ 添加函数注解

Python基础(31)--函数返回值、pass语句、文档字符串、注解与递归函数

◎脚本地址:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/4908.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注