我正在学习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()
?
答案 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())