简体   繁体   English

如何从 function 返回多个值?

[英]How to return multiple Values from a function?

Im returning multiple values inside the fizz buzz function and I want to use a separate function to count the number of times Fizz , Buzz and FizzBuzz was returned.我在fizz buzz function 中返回多个值,我想使用单独的 function 来计算返回FizzBuzzFizzBuzz zz 的次数。 The counter is not finished yet but im trying to understand what the correct way is to return and insert multiple values or strings fron one single function into another.计数器尚未完成,但我试图了解正确的方法是从一个 function 返回并将多个值或字符串插入另一个。

import random
n = random.randint(1,30)

def fizzbuzz_counter(Fizz,Buzz,FizzBuzz):
    print(Fizz,Buzz,FizzBuzz)
    #Counter not finished yet

def fizzbuzz(n):
    for i in range(1,n+1):
        if i % 3 == 0 and i % 5 == 0:
            FizzBuzz = "FizzBuzz"
            print(FizzBuzz)   
            return(FizzBuzz)
        elif i % 3 == 0:
            Fizz = "Fizz"
            print(Fizz)
            return Fizz
        elif i % 5 == 0:
            Buzz = "Buzz"
            print(Buzz)
            return Buzz
        else:
            print(i)

fizzbuzz(n)
fizzbuzz_counter(fizzbuzz(FizzBuzz,Fizz,Buzz))

The first issue that you have is that once a python function returns a value it stops.您遇到的第一个问题是,一旦 python function 返回一个值,它就会停止。 So your fizzbuzz function will return only once and since you are always starting your for loop from 1 the return value will always be the same (assuming that n is equal to or greater than 3. for example fizzbuzz(10) and fizzbuzz(123) will always return 'fizz' (and print out 1,2,fizz before returning. This is because it will return once i equals 3. If you want the function to 'return' multiple values as it loops you should check out generator functions因此,您的 fizzbuzz function 将只返回一次,并且由于您始终从 1 开始 for 循环,因此返回值将始终相同(假设 n 等于或大于 3。例如 fizzbuzz(10) 和 fizzbuzz(123)将始终返回“fizz”(并在返回之前打印出 1,2,fizz。这是因为一旦 i 等于 3,它将返回。如果您希望 function 在循环时“返回”多个值,您应该检查生成器函数

However the simplest solution is probably to have fizzbuzz keep track of the count internally and return all 3 values at once:然而,最简单的解决方案可能是让 fizzbuzz 在内部跟踪计数并一次返回所有 3 个值:

def fizzbuzz(n):
    fizzbuzz=0
    fizz=0
    buzz=0
    for i in range(1,n+1):
        if i % 3 == 0 and i % 5 == 0:
            print("FizzBuzz")   
            fizzbuzz += 1
        elif i % 3 == 0:
            print("Fizz")
            fizz += 1
        elif i % 5 == 0:
            print("Buzz")
            buzz += 1
        else:
            print(i)
    return fizzbuzz, fizz, buzz

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM