<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 4.2.1 用函數減少重復代碼 首先看一個簡單的用字符畫一棵樹的程序: 【程序 4.1】tree1.py ``` print " * " print " *** " print " ***** " print "*******" print " * " print " *** " print " ***** " print "*******" print " # " print " # " print " # " ``` 執行結果如下: ``` * *** ***** ******* * *** ***** ******* # # # ``` 盡管程序 4.1 實現了我們預定的功能,但從程序的形式、風格角度看,還是有不足之處。 從程序可見,代碼的 1~4 行和 5~8 行是完全相同的①,它們對應于樹冠的上下兩部分。一 個程序中如果多處出現相同代碼,會帶來三個問題:第一,重復輸入相同代碼很煩人;第二, 重復代碼使程序不必要地增加長度;第三,也是最重要的一點,代碼維護很麻煩。前兩條很 容易理解,我們來說明一下第三點。代碼維護是指修改代碼等工作。當要修改的代碼在多處 重復出現時,顯然必須在每一個重復出現處做統一的修改,以保持重復代碼的一致性,這就 增加了代碼維護的難度。 對程序 4.1 來說,重復代碼很少,不算什么大問題。然而,如果重復代碼很長、重復次 數很多,上述三個問題就不是可以忽視的了。事實上,多次鍵入重復代碼至少會增加輸入出 錯的可能性,而維護重復代碼時也很容易忘記在各處統一修改,這些都會導致重復代碼的不 一致。至于重復代碼使程序拖沓冗長,就更不必說了。 如何解決這種重復代碼問題呢?函數正是我們所需的語言構造。 我們已經知道,函數是一個子程序,其基本思想是將一個語句序列看作一個整體,并為 該語句系列命名。此后,在程序中的任何地方,只要引用該函數名,就能執行函數的語句序 列。創建函數的代碼稱為函數定義,以后使用函數的代碼稱為函數調用。 下面我們定義一個函數 treetop(),它的語句序列正是程序 4.1 中的重復代碼。注意, 為了更直觀地介紹函數定義及其調用,我們特意在 Python 交互環境 IDLE 中來展示有關內 容。 ``` >>> def treetop(): print " * " print " *** " print " ***** " print "*******" ``` def 語句只是定義了新函數 treetop,并沒有執行函數體中的語句,因此不會產生顯 示輸出。直到調用 treetop 函數時,才執行函數體。我們來看看它的功能是什么。 > ① 如果讀者自己在文本編輯器中鍵入這個程序,一定會使用“復制-粘貼”功能吧。 ``` >>> treetop() * *** ***** ******* ``` 可見函數 treetop 正確地打印了樹冠的一部分。 接下來定義畫出整棵樹的函數 tree: ``` >>> def tree(): treetop() treetop() print " #" print " #" print " #" ``` 由于重復代碼被函數調用 treetop 代替,這個版本顯然比原先的版本簡練許多,但程序的 功能完全是一樣的,參見下面的運行結果: ``` >>> tree() * *** ***** ******* * *** ***** ******* # # # ``` 至此我們用函數解決了重復代碼的問題。要注意的是,我們是在交互環境下展示函數定 義和調用的,因而可以先定義函數 treetop 并單獨運行此函數,然后再定義主函數 tree 并運行之。如果按通常的做法將代碼保存為程序文件,則應將兩個函數合并為一個程序文件 來保存,因為它們不過是一個程序的兩個部分而已。即如程序 4.2 所示。 【程序 4.2】tree2.py ``` def treetop(): print " * " print " *** " print " ***** " print "*******" def tree(): treetop() treetop() print " #" print " #" print " #" tree() ``` 順便說明一下,程序 4.2 中定義了兩個函數,其中 tree 是主函數,用于完成程序的總 體功能,而 treetop 是輔助性的函數(子程序),用于完成部分功能。其中最后一行是調 用主函數,這是啟動整個程序的入口。作為慣例,我們通常將一個程序的主函數(程序入口) 命名為 main。今后,我們給出的例子程序即使并未定義輔助性的函數,我們也將所有代碼 置于一個主函數 main 之中,這是慣例,也符合模塊化編程的風格——程序至少由一個主控 模塊構成。 有的讀者也許會問,程序 4.2 中的函數 tree 中,還存在三條重復出現的語句 ``` print " #" ``` 為何不定義一個函數來避免重復呢?我們不妨再寫一個新版本,讀者看了之后自然明白這個 做法沒什么好處。見下: ``` def treetop(): print " *" print " ***" print " *****" print "*******" def printhash(): print " #" def tree(): treetop() treetop() printhash() printhash() printhash() tree() ``` 從這個版本可以看出,由于重復的代碼只是一條語句,如果為重復代碼定義一個新函數, 不但不能使代碼精簡,反而使代碼變復雜了。更重要的是,利用函數來取代重復代碼不是沒 有代價的,因為函數調用和返回都需要花費系統開銷。這個版本花了代價,卻沒有帶來任何 收益,所以是不合適的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看