return 语句是函数和方法的关键组成部分。可以使函数将 Python对象发送回调用者代码,这些对象被称为函数的返回值。 使用它们在程序中执行进一步的计算或者程序的执行。 整套学习自学教程中应用的数据都是《三國志》、《真·三國無雙》系列游戏中的内容。 Python 函数入门官方文档定义的函数是将不同类型的代码块返回给调用者的。一系列向调用者返回一些值的语句。它也可以传递零个或多个参数,这些参数可用于执行主体。 函数是固定的规则。 def function_name(arg1, arg2,, argN): # 函数方法执行代码 pass 调用函数的固定格式。
事实上在之前的章节 Python基础必掌握的定义Python函数方法详解 中有明确的讲解。 函数返回一个值需要使用 return 语句。 return 语句return 语句由 return 关键字和一个可选的返回值组成。返回值可以是:
返回值都是 None 的两种情况:
显式返回语句,即立即终止函数执行并将返回值发送回调用者代码,return 后跟可选的返回值。 # 显式返回语句def return_1(): return 1 return_1() 1# 可以在任何表达式中使用该返回值return_42() * 22 隐式返回语句,没有使用显式使用返回值则返回一个固定默认为 None 的值。
return 与 print 的差异# printdef print_(): print('真·三國無雙')print_()真·三國無雙# returndef return_(): return '真·三國無雙'return_()'真·三國無雙'def add(a, b): result = a + b return resultadd(1, 1)2 返回多个值使用 return 语句从函数返回多个值的时候需要用逗号( ,)分隔的返回值。 使用统计模块进行计算返回多个值。
return 语句应用None显式三种处理返回方法 省略该return语句并依赖于返回的默认行为None。 def _return(): # 代码逻辑 passprint(_return())None 使用return不带返回值的也返回None。
明确返回None。 def _return(): # 代码逻辑 return Noneprint(_return())None 记住返回值
避免复杂的表达方式 # 尽量简化 return 返回的对象,是逻辑清晰def variance(data, ddof=0): mean = sum(data) / len(data) return sum((x - mean) ** 2 for x in data) / (len(data) - ddof)def variance(data, ddof=0): mean = sum(data) / len(data) v = sum((x - mean) ** 2 for x in data) / (len(data) - ddof) return vdef variance(data, ddof=0): n = len(data) mean = sum(data) / n total_square_dev = sum((x - mean) ** 2 for x in data) return total_square_dev / (n - ddof)variance([3, 4, 7, 5, 6, 2, 9, 4, 1, 3])5.24 返回值修改全局变量 全局变量不建议修改,修正全局变量使用 global 方法。
如果修改外部的全局变量建议重新赋值。 counter = 0def increment(var): return var + 1increment(counter)1counter0# 显式地为 counter 分配一个新值counter = increment(counter)counter1 return 条件触发 return 根据评估某些条件的结果执行不同的命令。
返回 True 或 False 与 if 语句组合的另一个常见用例 return 布尔值函数时,返回 True 或者 False。 def is_divisible(a, b): if not a % b: return True return Falseis_divisible(4, 2)Trueis_divisible(7, 4)False 谓词函数返回 True 或者 False。
短路评估 中断循环执行并使函数立即返回。 def my_any(iterable): for item in iterable: if item: return True return Falsemy_any([0, 0, 1, 0, 0])Truemy_any([0, 0, 0, 0, 0])False 识别死代码 终止不执行任何后续代码。
在 if 条件外人就不会认为是死代码。 def no_dead_code(condition): if condition: return 42 print('Hello, World')no_dead_code(True)42no_dead_code(False)Hello, World 返回多个命名对象 return 语句中返回多个值的函数时可以使用collections.namedtuple 对象增加的函数的可读性。
返回函数:闭包将函数作为参数、返回函数作为结果或两者兼有的函数是高阶函数。这种函数接受一些参数并返回一个内部函数,内部函数通常称为闭包。 # 一个简单的乘法函数def by_factor(factor, number): return factor * number factor 在应用程序很少更改,会发现在每个函数调用中提供相同的因素非常繁琐。因此需要一种方法来保留调用之间的状态或值,by_factor() 并仅在需要时更改它。要保留调用之间的当前值factor,可以使用闭包。
使用 lambda 函数来创建闭包。 # lambda函数的使用提供了一种快速简洁的编码方式def by_factor(factor): return lambda number: factor * numberdouble = by_factor(2)double(3)6 装饰器获取和返回函数装饰器函数将函数对象作为参数并返回一个函数对象。装饰器以某种方式处理被装饰的函数并将其返回或用另一个函数或可调用对象替换它。
返回定义的对象可以使用自己的自定义对象作为函数的返回值。 常见用例是定义了一个接口,用于动态创建对象以响应在编写程序时无法预测的条件。可以使用一个函数来实现用户定义对象,该函数接受一些初始化参数并根据具体输入返回不同的对象。 # 一个绘画程序# 动态创建不同的形状class Circle: def __init__(self, radius): self.radius = radiusclass Square: def __init__(self, side): self.side = side 可以使用参数列表 ( args) 和关键字参数 ( *kwargs ) 动态创建一个形状定义一个函数。
此函数创建具体形状的实例并将其返回给调用者。 circle = shape_factory('circle', radius=20)type(circle)<class '__main__.Circle'>circle.radius20square = shape_factory('square', side=10)type(square)<class '__main__.Square'>square.side10 try…finally 在return中使用finally 子句始终在 return 语句之前执行。
return 在生成器函数中使用代码主体中带有 yield 语句的 Python 函数是生成器函数。当调用生成器函数时,会返回生成器迭代器。 # 一个生成器,1按需2生成,然后返回3 停止def gen(): yield 1 yield 2 return 3g = gen()g<generator object gen at 0x7f4ff4853c10>next(g)1next(g)2next(g) # 生成器耗尽,得到一个StopIterationTraceback (most recent call last): File '<input>', line 1, in <module> next(g)StopIteration: 3 |
|