簡體   English   中英

Python中方法鏈接的更好方式?

[英]Nicer way of method chaining in Python?

所以我有一個很長的方法鏈,類似於:

return self.append_command("fbghasjfa").append_command(input_file_part).append_command(output_video_codec_part).append_command(output_resolution_part).append_command(output_video_bitrate_part).append_command(strict_part).append_command(output_audio_codec_part).append_command(output_number_of_audio_channels_part).append_command(output_audio_bitrate_part).append_command(output_file_part).__finalized

它看起來很難看。 有沒有辦法將每個方法放在一個單獨的行上? 喜歡:

return self.append_command("ffasfgas")
.append_command("fvasgvsd")
.append_command("hsdhsdhsd")
#etc

您可以使用反斜杠行繼續:

return self.append_command("ffasfgas") \
    .append_command("fvasgvsd") \
    .append_command("hsdhsdhsd")

或括號:

return (self.append_command("ffasfgas")
        .append_command("fvasgvsd")
        .append_command("hsdhsdhsd"))

但最Pythonic的方法是將問題抽象為單個函數調用:

return self.append_commands("ffasfgas",
                            "fvasgvsd",
                            "hsdhsdhsd")

使用reduce是另一種選擇,但不是特別優雅:

return reduce(MyClass.append_command, ["ffasfgas",
                                       "fvasgvsd",
                                       "hsdhsdhsd"], self)

甚至

return reduce(operator.methodcaller('append_command'),
              ["ffasfgas",
               "fvasgvsd",
               "hsdhsdhsd"], self)

要么轉義換行符,要么將表達式括起來。

foo \
.bar \
.baz

(foo
.bar
.baz)

你可以這樣做:

return self.append_command("ffasfgas") \
           .append_command("fvasgvsd") \
           .append_command("hsdhsdhsd") 
# etc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM