今日の研究:Python関数変数と再帰関数
まず、グローバルとローカル変数
グローバル変数:なしインデント、変数の頭。一般的に大文字で表現
ローカル変数:サブルーチンで定義された変数。一般的に小文字で示されます
グローバル変数と同じ名前のローカル変数時:
グローバル+変数名:参照され、グローバル変数を読み込みます。
非ローカル+変数名:参照され、ローカル変数を読み込みます。
NAME = " りんご" DEF taxt(): 名前 = " バナナ" プリント(名) DEF NUM(): グローバルNAME NAME = " 猫" () 印刷(NAME) ソファ() 印刷(NAME)
>>>リンゴ
バナナ
猫
彼は加えました:
1.ない内部ファンクションキー(グローバル)の場合、優先ない変数タイプ(すなわち祖先辞書)にグローバル変数を読み取り、およびグローバル変数に再割り当てすることができない、グローバル変数次に、ローカル変数を読み取るされていません、削除は、内部の要素を変更することができます。
2.内部ファンクションキー(グローバル)がある場合には、読み取ることができ、本質的に呼ばれるグローバル変数を変更することができます。
3.変数を読み取るとき、見つけるためにその範囲内の優先順位は、見つけるために、層の後にダウン行きませんでした。
第二に、リウマチ論:変数の機能、すなわち
あなたがアクセス機能を呼び出す必要があるとき実際には、関数メモリに格納された文字のように体内の機能に相当し、この機能のストレージ・メモリに、内部が出て、その後、読み取ることが11、その中にネストされています返り値の層をバックアップ。
デフのfoo(): 印刷( "りんご")
COO() DEF COO(b)は、 プリント(2 ) FOO()
第三に、再帰関数
関数呼び出しは、独自の関数名が再帰と呼ばれています。
特徴:1、(リターンで)明確な終了条件を持っている必要があります。
2、再帰的、再帰的な問題の大きさにそれぞれ深くは最後に比べて低減されるべきです。
3、効率は再帰の多すぎるレベル(メモリが爆発)スタックオーバーフローを引き起こす可能性があり、高くありません。
DEF CALC(N): プリント(N) であれば、INT(N / 2)== 0: リターンN リターン CALC(INT(N / 2 )) CALC( 10)
>>> 10
5
2
1
例:頼みます
インポート時 リスト = [ " りんご"、" バナナ"、" 猫"、" 犬" ) デフリスト(のような): 印刷(" - " * 60 ) 場合 lenは(リスト)== 0: 印刷(" 没人知道" ) 李 = list.pop(0) IF李== " CAT " : 印刷(" %S:私は知っているやり方もので、ライン川、湖での"%のLi)と 印刷(「こんにちは、%S、あなたはどこの道を知っていますそれは"%のLi)と 印刷(" %Sは、私は知らない、私はあなたが%Sを尋ねる助けることができる"%(LI、一覧)) time.sleep( 5 ) RES = (リスト)のような リターン解像度 RES = (リスト)のような プリント(RES)
>>>
----------------------------------------
ハイテク、アップルは、あなたがどこの道を知っていますか右に行く
Appleは答えた:、私は知らない私はあなたが求めることができます[「バナナ」、「CAT」、「犬」]
----------------------- -----------------
右の道のどこへ行くやあ、バナナ、あなたは知っています
バナナを答えた:私は知らない、私はあなたが求めることができます[「猫」、 '犬 ]
----------------------------------------
CATは、私が知っている、と述べたところ、ライン川湖畔
エクササイズ&レビュー
図1に示すように、値のセット[11,22,33,44,55,66,77,88,99,90 ...]以下、66を超えるすべての値は、辞書内の最初のキーに保存され、以下66以上であろう第2のキーに格納された値に値。
すなわち:{「K1」:すべての値66より大きく、「K2」:すべての値未満66より}
= [11,22,33,44,55,66,77,88,99,90 ] B = { " キー1 ":[]、" KEY2 " :[]} のための I で: もし I> = 66 : B [ " キー1 " ] .append(I) のelif I <66 : B [ " KEY2 " ] .append(I) プリント(B)
図2は、ブランクの各要素が除去された要素のリストを検索し、先頭またはAで終わる、およびCのすべての要素を見つけます。
李= [ " アレック"、" ARIC "、" アレックス"、" トニー"、" 雨" ] TU =(" アレック"、" ARIC "、" アレックス"、" トニー"、" 雨" ) DIC = { ' K1 ':" アレックス"、' K2 ':' RIC '、 " K3 ":" アレックス"、" K4 ":" トニー" } 以下のために範囲(LEN(LI))。 リチウム[A] =リチウム[A] .replace(" "、"" ) プリント(LI) TU = リスト(TU) のために B で((TU)LEN)範囲: TU [B] = TU [B] .replace(" "、 "" ) あなたは = タプルを(あなた) プリント(あなた) 以下のための C でのDIC: DIC [C] = DIC [C] .replace(" "、"" ) プリント(DIC) ため A1 でのLi: もし(a1.startswith(" ")または a1.startswith(" A "))と a1.endswith(" C " ): プリント(A1) 用 B1 におけるTU: もし(b1.startswith(" ")または b1.startswith(" A "))と b1.endswith(" C " ): プリント(B1) 以下のための C1 でのDIC: C2 = DIC [C1] もし(c2.startswith(" ")または c2.startswith(" A "))と c2.endswith(" C " ): プリント(C2)
図3に示すように、商品
A = [ "電話"、 "コンピュータ"、 'マウスパッド'、 'ヨット']
用 I、A1 に列挙(1 ): プリント(I、A1) B = INPUT(「資料番号を入力してください。」) B1 = INT(b)は、 プリント([B1])
上記。