gpt4 book ai didi

python - 在函数内部或外部循环?

转载 作者:行者123 更新时间:2023-12-04 12:07:27 24 4
gpt4 key购买 nike

在一次处理更多对象(但可以选择只处理一个对象)时,什么被认为是更好的编程实践?

A:循环内部函数

可以使用一个或多个对象调用函数,并且它在函数内部进行迭代:

    class Object:
def __init__(self, a, b):
self.var_a = a
self.var_b = b

var_a = ""
var_b = ""

def func(obj_list):
if type(obj_list) != list:
obj_list = [obj_list]

for obj in obj_list:
# do whatever with an object
print(obj.var_a, obj.var_b)

obj_list = [Object("a1", "a2"), Object("b1", "b2")]
obj_alone = Object("c1", "c2")

func(obj_list)
func(obj_alone)

B:循环外功能

函数只处理一个对象,当它处理多个对象时,必须多次调用。
    class Object:
def __init__(self, a, b):
self.var_a = a
self.var_b = b

var_a = ""
var_b = ""

def func(obj):
# do whatever with an object
print(obj.var_a, obj.var_b)

obj_list = [Object("a1", "a2"), Object("b1", "b2")]
obj_alone = Object("c1", "c2")

for obj in obj_list:
func(obj)
func(obj_alone)

我个人更喜欢第一个 (A),因为对我来说,它在调用函数时使代码更清晰,但也许这不是正确的方法。是否有某种方法通常比另一种更好?如果不是,每种方法的优缺点是什么?

最佳答案

一个函数应该有一个定义好的输入和输出,并遵循 single responsibility principle .您需要能够根据“我把 foo 放进去,我把 bar 拿回来”来清楚地定义你的功能。您需要在此语句中使用更多限定符来正确描述您的功能,这可能意味着您的功能做得太多。 “我把 foo 放进去然后把 bar 拿回来,除非我把 baz 放进去然后我也会把 bar 拿回来,除非我把 foo-baz 放进去然后它会出错”。

在这种特殊情况下,您可以传递一个对象或一个对象列表。尝试将其概括为一个值或一个值列表。如果您想将列表作为值传递怎么办?现在你的函数行为是模棱两可的。您希望单个列表对象作为您的值,但该函数将其视为多个参数。

因此,在实践中调整一个接受一个参数来处理多个值的函数是微不足道的。没有理由通过使其适应多个参数来使函数的设计复杂化。尽可能简单明了地编写函数,如果你需要它处理一系列事物,那么你可以在函数外部的事物列表中循环它。

如果您尝试为函数提供一个实际有用的名称来描述它的作用,这可能会变得更加清晰。您需要使用复数或单数术语吗? foo_the_bar(bar)做其他事情而不是 foo_the_bars(bars) .

关于python - 在函数内部或外部循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30759501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com