Python-3.関数とコードの多重化
9910 ワード
一、関数の定義と使用は予約ワードdef定義関数、 を定義する.オプションパラメータ(初期値付与)、可変パラメータ( リザーブ を返すことができる.リザーブ を宣言する.
1.1関数の理解と定義
関数はコードの表示です関数は、特定の機能を有する再利用可能な文群 である.関数は機能の抽象であり、一般的な関数は特定の機能 を表す.の2つの役割:プログラミングの難易度とコード多重化を低減する 関数定義の場合、指定パラメータはプレースホルダ である.関数定義後、呼び出されなければ は実行されない.関数定義の場合、パラメータは入力、関数体は処理、結果は出力(IPO) である.
1.2関数の使用及び呼び出しプロセス
呼び出しは関数コードを実行する方法です呼び出し時に実際のパラメータ を与える.実際のパラメータ置換定義のパラメータ 関数呼び出し後の戻り値 を得る.
関数の呼び出しプロセス
1.3関数のパラメータ伝達
パラメータ数
関数にはパラメータがありますが、なくてもいいですが、カッコを保持する必要があります.
オプションのパラメータ転送関数の定義時に、いくつかのパラメータにデフォルト値を指定することができ、オプションパラメータ を構成する.関数定義時に可変数パラメータを設計することができ、パラメータ総数 を確定しない.
パラメータ伝達の2つの方法
関数が呼び出されると、パラメータは位置または名前で渡すことができます.
1.4関数の戻り値関数は、0以上の結果を返すことができます. を伝達するために使用される.関数は、戻り値があってもよいし、なくてもよいし、 がなくてもよい. を伝達してもよい.
関数呼び出しの場合、パラメータは位置または名前で を渡すことができる.
1.5ローカル変数とグローバル変数基本データ型は、重複するかどうかにかかわらず、ローカル変数はグローバル変数とは異なる である.は、 を宣言することができる.はデータ型を組み合わせ、ローカル変数が実際に作成されていない場合はグローバル変数 である.
1.6 lambda関数は匿名関数であり、名前のない関数 である. lambdaを使用してワード定義を保持し、関数名は結果 を返す. lambda関数は、単純で1行で表すことができる関数 を定義するために使用される.
= lambda :
次のように等価です.
Lambda関数の慎重な使用 lambda関数は、主にいくつかの特定の関数または方法のパラメータ として使用される. lambda関数にはいくつかの固定的な使用方法があり、 を徐々に把握することをお勧めします.一般的な場合、def定義の一般的な関数 を使用することを推奨します.
二、例:七段デジタルチューブの描画
基本的な考え方:ステップ1:単一の数値に対応するデジタルチューブを描画する 七段デジタルチューブは7つの基本線からなる 七段デジタルチューブは、固定順序 を有することができる.異なる数字は異なる線 を表示する.ステップ2:一連の数字を取得し、対応するデジタルチューブ を描画する.ステップ3:現在のシステム時間を取得し、対応するデジタルチューブを描画 七段デジタルチューブ間の線間隔 を増加する. timeライブラリを使用してシステムの現在時刻 を取得する.増年月日表記 年月日の色が異なる
完全なコード:
理解方法の考え方モジュール化思考:モジュールインタフェースを確定し、パッケージ機能 規則化思考:抽象過程は規則であり、コンピュータは自動的に を実行する.簡略化:大機能を小機能の組み合わせに変え、分けて治める 三、コード多重と関数再帰
3.1コード多重化とモジュール化設計コード多重化
コードをリソースとして抽象化する コードリソース化:プログラムコードは、計算を表す「リソース」です. コード抽象化:関数などの方法を使用してコードにより高いレベルの定義を与える. コード多重化:同じコードを必要に応じて繰り返し使用できます.
関数とオブジェクトはコード多重化の2つの主要な形式です.関数:コード名をコードレベルで初歩的な抽象化した. オブジェクト:属性とメソッド
lambda
は匿名関数*b
)、名称伝達return
は、任意の複数の結果global
は、グローバル変数の使用を宣言し、いくつかの暗黙的なルール1.1関数の理解と定義
関数はコードの表示です
def () :
return
1.2関数の使用及び呼び出しプロセス
呼び出しは関数コードを実行する方法です
関数の呼び出しプロセス
1.3関数のパラメータ伝達
パラメータ数
関数にはパラメータがありますが、なくてもいいですが、カッコを保持する必要があります.
def () :
return
def fact() :
print(" ")
オプションのパラメータ転送
def (, ) :
return
def (, *b ) :
return
パラメータ伝達の2つの方法
関数が呼び出されると、パラメータは位置または名前で渡すことができます.
def fact(n, m=1) :
s = 1
for i in range(1, n+1):
s *= i
return s//m
1.4関数の戻り値
return
リザーブワードは、戻り値return
があってもよいし、return
は、0個の戻り値を伝達するもよいし、任意の複数の戻り値1.5ローカル変数とグローバル変数
global
リザーブワードによって関数内部でグローバル変数1.6
lambda
関数lambda
関数は、結果として関数名を返します.= lambda :
次のように等価です.
def () :
return
>>> f = lambda x, y : x + y
>>> f(10, 15)
25
>>> f = lambda : "lambda "
>>> print(f())
lambda
Lambda関数の慎重な使用
二、例:七段デジタルチューブの描画
基本的な考え方:
import turtle
def drawLine(draw): #
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
turtle.right(90)
def drawDigit(digit): #
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup() #
turtle.fd(20) #
import turtle
def drawLine(draw): #
…( )
def drawDigit(digit): #
…( )
def drawDate(date): #
for i in date:
drawDigit(eval(i)) # eval()
def main():
turtle.setup(800, 350, 200, 200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate('20181010')
turtle.hideturtle()
turtle.done()
main()
import turtle
def drawGap(): #
turtle.penup()
turtle.fd(5)
def drawLine(draw): #
drawGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawGap()
turtle.right(90)
def drawDigit(digit): #
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
…( )
import turtle, time
…( )
def drawDate(date): #data , '%Y-%m=%d+'
turtle.pencolor("red")
for i in date:
if i == '-':
turtle.write(' ',font=("Arial", 18, "normal"))
turtle.pencolor("green")
turtle.fd(40)
elif i == '=':
turtle.write(' ',font=("Arial", 18, "normal"))
turtle.pencolor("blue")
turtle.fd(40)
elif i == '+':
turtle.write(' ',font=("Arial", 18, "normal"))
else:
drawDigit(eval(i))
def main():
turtle.setup(800, 350, 200, 200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
完全なコード:
#SevenDigitsDraw.py
import turtle, time
def drawGap(): #
turtle.penup()
turtle.fd(5)
def drawLine(draw): #
drawGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawGap()
turtle.right(90)
def drawDigit(d): #
drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup()
turtle.fd(20)
def drawDate(date):
turtle.pencolor("red")
for i in date:
if i == '-':
turtle.write(' ',font=("Arial", 18, "normal"))
turtle.pencolor("green")
turtle.fd(40)
elif i == '=':
turtle.write(' ',font=("Arial", 18, "normal"))
turtle.pencolor("blue")
turtle.fd(40)
elif i == '+':
turtle.write(' ',font=("Arial", 18, "normal"))
else:
drawDigit(eval(i))
def main():
turtle.setup(800, 350, 200, 200)
turtle.penup()
turtle.fd(-350)
turtle.pensize(5)
# drawDate('2018-10=10+')
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
理解方法の考え方
3.1コード多重化とモジュール化設計
コードをリソースとして抽象化する
関数とオブジェクトはコード多重化の2つの主要な形式です.
\.>と.\()
、 の で を します.
オブジェクトの レベルは より い.
モジュール
けて める は、 またはオブジェクトパッケージによってプログラムをモジュールおよびモジュール の に する. は、 プログラム、サブプログラム、およびサブプログラム の を に む. : 、 、 の .
みっちゃくけつごう けつごう :2つの の には が く、 して できない. :2つの の が なく、 して することができる. モジュール の な 、モジュール の やかな .
3.2 の
3.2.1
で を び す .
2つの な :チェーン: プロセスには チェーンがあります. ベース: を としない1つ のベースが する.
3.2.2 の び し
+ は であり、 を するために が である. では、 パラメータを で する ベースとチェーンは、それぞれ コード を する.
び しプロセス
を するたびに、メモリに しいスペースが き、 をコピーします.
3.2.3 の
sを して >>> s[::-1]
def rvs(s):
if s == "" :
return s
else :
return rvs(s[1:])+s[0]
フィボナッチ
F(n) = F(n-1) + F(n-2) def f(n):
if n == 1 or n == 2 :
return 1
else :
return f(n-1) + f(n-2)
ハノータcount = 0
def hanoi(n, src, dst, mid):
global count
if n == 1 :
print("{}:{}->{}".format(1,src,dst))
count += 1
else :
hanoi(n-1, src, mid, dst)
print("{}:{}->{}".format(n,src,dst))
count += 1
hanoi(n-1, mid, dst, src)
、 :コッハ の
Pythonでコハ を くコハ の #KochDrawV1.py
import turtle
def koch(size, n):
if n == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, n-1)
def main():
turtle.setup(600,600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
level = 3 # 3 ,
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.hideturtle()
main()
の フラクタルジオメトリの を する コハ の および を するコハ を くベースフレームの を フラクタル コントール 、シェルビンスキー 、ゲートスポンジ... 、 、コッハ ... の い ...