如何将函数返回的值赋给另一个函数

时间:2016-02-06 09:48:38

标签: python-3.5

我正在学习Python。我已经到了我的功能,有循环不能从循环内调用其他函数,因为否则我得到重复的结果,所以我想创建一个函数调用每个函数,从中获取数据并将它们分配给之后执行的函数,并且需要使用该数据,从而避免循环。

所以,让我说我有这个功能:

 var numericReg = /^([a-zA-Z0-9\-]){1,20}$/;

从这个功能,我得到了一个数据元组。现在,我想要做的是创建一个函数:

def get_sound():
    for dirpath, directories, files in os.walk(XPATH):
        for sound_file in files:
            date = artist = album = title = ""
            if sound_file.endswith('.flac'):
                print('Flac file found, getting metadata and renaming...')
                flac_file = os.path.join(dirpath, sound_file)
                from mutagen.flac import FLAC
                metadata = mutagen.flac.Open(flac_file)
                for (key, value) in metadata.items():
                    if key.startswith("date"):
                        date = value[0]
                    if key.startswith("artist"):
                        artist = value[0]
                    if key.startswith("album"):
                        album = value[0]
                    if key.startswith("title"):
                        title = value[0]
                final_name = (date + " - " + artist +
                              " - " + album + " - " + title)
                dest_file = os.path.join(dirpath, final_name)
                os.renames(flac_file, dest_file)
                return (dest_file, final_name, artist, album, title)

def main(): get_sound() find_key() make_video() 将返回数据,get_sound()也将返回数据,find_key()将使用这两个数据填充某些变量并使用它们执行命令。由于返回的数据没有标识符,如何将make_video()get_sound()返回的数据传递给find_key()

2 个答案:

答案 0 :(得分:3)

函数调用(例如get_sound())表示函数返回的值。您可以将该值分配给变量,并在后续操作和函数调用中使用该值:

def main():
    sound = get_sound()
    key = find_key()
    make_video(sound, key)

或者您可以在操作和函数调用中使用函数代替它们的返回值:

def main():
    make_video(get_sound(), find_key())

这假定make_video有两个位置参数,第一个参数可以是get_sound返回的元组。所以make_video可能看起来像这样:

def make_video(audio, key):
    audio_destination_file, audio_name, audio_artist, audio_album, audio_title = audio
    # Do something with audio_destination_file, audio_name, audio_artist,
    # audio_album, audio_title and key ...

如果您的make_video函数需要get_sound返回值的组件作为单独的参数,如下所示:

def make_video(audio_destination_file, audio_name,
               audio_artist, audio_album, audio_title, key):
    # Do something

...然后在调用like x squared suggests之前显式解压缩它们,或者在调用时使用splat运算符进行解包:

def main():
    sound = get_sound()
    key = find_key()
    make_video(*sound, key)

def main():
    make_video(*get_sound(), find_key())

答案 1 :(得分:2)

取决于make_video()参数的外观。如果它需要一个元组作为参数:

make_video(get_sound(), find_key())

或者,如果它需要单个参数,您可以使用返回值分配多个变量,例如:

(dest_file, final_name, artist, album, title) = get_sound()
make_video(dest_file, final_name, artist, album, title, find_key())