◎知识点
函数的定义之多个返回值
函数的定义之pass语句
函数的定义之文档字符串
函数的定义之函数注解
递归函数
◎脚本练习
#!/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
▽ 添加函数注解
◎脚本地址: