在 Python 中将生成器表达式作为输入参数
Having a generator expression as an input argument in Python
如何与生成器表达式的值交互?例如:
def sumValues(*args):
# compute the sum of values
sumValues(abs(x) for x in range(0,10))
当范围已知时(例如,我们知道范围是[0,10)),我们可以放一个for循环,但是如果范围未知呢?
我想。答案如下:
def sumValues(*args):
# compute the sum of values
total = 0
for item in args[0]:
total += item
return total
print(sumValues(abs(x) for x in range(0,10)))
[output] => 45
这取决于你希望如何调用你的函数,如果你想用列表、生成器或更普遍的可迭代对象(任何可以在 for-loop 中使用的东西)调用它并模仿build-in sum
then
的行为
def my_sum(iterable):
total = 0
for x in iterable:
total += x
return total
并使用类似
my_sum(range(10))
my_sum(abs(x) for x in range(0,10))
my_sum([1,2,3,4,5,6])
如果你想模仿max
的行为并像上面那样使用它并且还喜欢my_sum(1,2)
、my_sum(1,2,3)
、my_sum(1,2,3,4,5,6,7)
等,那么
def my_sum(*argv):
total = 0
values = None
if len(argv) == 1:
values = argv[0]
else:
values = argv
for x in values:
total += x
return total
如何与生成器表达式的值交互?例如:
def sumValues(*args):
# compute the sum of values
sumValues(abs(x) for x in range(0,10))
当范围已知时(例如,我们知道范围是[0,10)),我们可以放一个for循环,但是如果范围未知呢?
我想。答案如下:
def sumValues(*args):
# compute the sum of values
total = 0
for item in args[0]:
total += item
return total
print(sumValues(abs(x) for x in range(0,10)))
[output] => 45
这取决于你希望如何调用你的函数,如果你想用列表、生成器或更普遍的可迭代对象(任何可以在 for-loop 中使用的东西)调用它并模仿build-in sum
then
def my_sum(iterable):
total = 0
for x in iterable:
total += x
return total
并使用类似
my_sum(range(10))
my_sum(abs(x) for x in range(0,10))
my_sum([1,2,3,4,5,6])
如果你想模仿max
的行为并像上面那样使用它并且还喜欢my_sum(1,2)
、my_sum(1,2,3)
、my_sum(1,2,3,4,5,6,7)
等,那么
def my_sum(*argv):
total = 0
values = None
if len(argv) == 1:
values = argv[0]
else:
values = argv
for x in values:
total += x
return total