高度なPythonの機能(day09)

  今日、我々は一般的内容トラップ機能、名前空間とクロージャのスコープ、関数とネストされた関数とこれらの知識ポイントの機能を言えば、高度な機能の要部を連絡しました

トラップの機能1:

  ここでのトラップの主な機能は、トラップの質問のデフォルトの関数であると言います。

DEF FUNC(L = []):
    l.append(1)
   プリント(L)
FUNC()

  のは、関数の引数は、我々は任意の値を渡すことはありませんが、関数のパラメータで、我々は、Lのデフォルト値は配列の型である必要があり、このコードを見てみましょう。私たちは、関数を呼び出すと、その出力の値は以下のとおりです。

1

  これは間違いありませんが、我々はそれを印刷するために数回以上のもの?

DEF FUNC(L = []):
    l.append( 1 プリント(L)
FUNC()[ 1 ] 
FUNC()[ 1、1 ] 
FUNC()[ 1,1,1 ]  

  これは多くの人々はそれが形を印刷することだろうと思うだろう。

[1 ] 
[ 1 ] 
[ 1]

  これはトラップを呼び出し、しかし、だから何がこの問題の原因は何ですか?

  実は、私たちが呼ばれたとき、我々はパラメータを渡すことはありませんでした、その後、各実行は、デフォルト値は非常にシンプルですが、このデフォルト値は、一般的になっている、(デフォルトパラメータ各呼び出し、共有することができ、すべてのコールデフォルトパラメータ
デフォルトパラメータの値は、関数が毎回ときに呼び出され、変数のデータ型の場合、あなたが公衆にデータリソースのこのタイプの値を渡さない場合。)

  例えば:

 

FUNC()[1 ] 
FUNC()[ 1、1 ] 
機能([])[ 1 ] 
FUNC()[ 1,1,1]

 

  我々は過去の引数を渡すとき、それは計算に使用される値を渡します、そうでない場合は、彼は辞書、それそれから、この問題が発生したデフォルトのパラメータリストの前に、共有使用することを見ることができますか?、(デフォルトのパラメータは可変パラメータのデータ型のパラメータは状況が共有起こるようになりますしているとき、以前に述べた)特定の辞書を見てみましょう

DEF FUNC(キー、L = {}):
    L [キー] = ' ' プリント(L)
FUNC(' 名前'{ '名前': 'A'} 
FUNC(' 性別'{ 'name'の: ''、 'セックス': 'A'}
    

  同じ原理、または正式なパラメータを共有しての登場。私たちの日常のプログラミングは、私たちが直面する問題に対処するために、この法律のデフォルトトラップを利用するために、それは、可変の時間パラメータ(リスト、辞書、コレクション)の際にデータ型である場合だから我々は、注意を払いますあなたは注意を払うように開始する必要があります。

 

2.機能と名前空間の範囲は:

ここでは、実行する方法です遭遇した機能を実行するために初めてのPythonコードを呼び出します。

Pythonインタプリタが起動した後、それはメモリ内のスペースを開きます

変数があるときは、変数名と記録された値との対応を置きます。

しかし、唯一のシンボリック関数名がメモリに読み込まれる関数定義インタプリタに直面したときの内部変数とロジックインタプリタの機能は気にしないよう、それは、この機能の存在を認識していました。

このような時間関数呼び出しの実装として、Pythonインタプリタがします、コンテンツでこの機能を格納するためのメモリを開き、この時間は、内部変数、新しく開かメモリに保存されている変数の関数機能を心配していました。変数が使用のみの関数内で機能することができ、およびなどの完成に機能しますが、このメモリの内容はすべて消去されます。

私たちは、この与える「リレーションシップ・ストアの名前と値を、」スペースが名前を持っている - 名前空間と呼ばれます

「変数名と値の間の関係の」スペースと呼ばれるストレージを作成するために、最初にコードを実行してグローバルネームスペースで呼び出され、実行機能に開かれ、一時領域をローカル名前空間

#名前空間は、3
#組み込みの名前空間-のpythonインタプリタ
    #は、使用を開始することができます名前を格納するためのPythonインタプリタである組み込みの名前空間
    #ビルトイン名でブート時インタプリタでメモリにロードされた
#グローバル名スペース-私たちは、コードを書くではなく、機能コード
    #は、メモリにロードするために、上から下に実行されるプログラムの過程にある
    #我々が設定したすべての変数や関数名に置か
#ローカル名前空間-機能
    #を内部で定義された関数の名前で
    、この関数を呼び出すときに#が再び消えて、この名前空間によって実行される関数の最後に名前空間を生成します

ローカルに#を:あなたは、グローバル、組み込みの名前空間名に使用できる
グローバルで#を:することができます組み込みの名前空間名を使用していますが、中に局所使用することはできません
ビルトイン#:あなたは、ローカルおよびグローバルの名前を使用することはできません

通常の状況下では#、名前の内蔵を直接使用
グローバル名に我々が定義された場合には#と内蔵された同じ名前の名前空間は、グローバルネーム使用されます
、私は私の上司はを求め見つからないとき時々 #自分自身を
#彼は親がエラーではありません組み込みの名前空間を見つけなかった場合、それはより高いレベルにあることを見つけられませんでした場合は
お互いに共有していない、複数の機能は、複数の独立したローカルな名前空間を持っている必要があります#

 

#func -関数の>メモリアドレス
#関数名()関数が呼び出された
関数#のメモリアドレス()関数が呼び出されます

 

2種類#の範囲
全体像- - #グローバルスコープとは、グローバル名前空間名はグローバルスコープ--globals()の一部で構築された
(ローカルのネームスペース機能-ローカルの役割- #ローカルスコープ名前は(ローカルスコープ)--localsに属しています)

 

不変のデータ型については#が、ローカルのグローバルスコープで変数を見て
#が、直接変更することはできません
変更したい場合は、プログラムの先頭でグローバルなステートメントを追加する必要があります#を
ローカル(機能)で宣言された場合は、グローバル変数# 、その後、グローバル変数は、すべての動作変数のローカルに有効になります
。#Aの1 =。
#2 = B
#DEF FUNC():
#1 =のX 'AAA'
#= Y 'BBB'
印刷(地元の人について())
を印刷(グローバル())

#のFUNC()
印刷(グローバル())
印刷(地元の人々 ())#ローカル

#globalsは常にグローバルの名前印刷
出力地元の人々はどのような位置#locals

#1 =
#DEF FUNCを(A):
#2 =
#戻り

#A = FUNC(A)
プリント(A)を

 

3.機能ネストされた定義

関数ネスト定義#の
変数#内部関数が外部関数を使用することができる
。#A. 1 =
#アウターDEFを():
#A. 1 =
#インナーDEF():
#2 = A
#Inner2 DEF():
##非局所声明最初のローカル変数の上位レイヤ
#Aの修飾+ = 1#不変データ型
#Inner2()
'## ## A'、A)#プリント
#インナー()
プリント(「** :「A)

表地()
印刷(」グローバル」、aが)

でトップのローカル変数の最寄り1見つけるために、現在の関数からローカル変数のためにのみ使用さ#nonlocal
なります変化の関数内で宣言非ローカル変数#を最寄りのローカル変数レイヤから現在の関数の影響
#グローバル無効
#は、ローカルのみ、最新の1に影響
#0 =
:#外DEF()
## = 1。
インナーDEF():
の##を2 = A
#Inner2 DEF():
非局所#
#プリント(A)
#Inner2()
インナー()

##外部()

)#DEF FUNC(:
プリント(123)

## FUNC()#関数名は、メモリ・アドレスである
#関数func2 = FUNC#関数名を割り当てることができる
。#の関数func2()
#1
#1 = [FUNC、関数func2]#関数名を要素のコンテナタイプとして使用することができる
。#プリント(L)
LにおけるIため#:
#I()

DEF FUNC():
    プリント(123)

ワッハッハーDEF(F):
    F()
    関数の戻り値としてリターン関数名F#が使用することができる

qqxing =ワッハッハー(FUNC)#名をパラメータとして与えることができる
qqxing()

4.閉鎖

 

DEF外側():
    = 1
    DEF内():
        プリント(a)は
    内部戻り
イン=外側()
イン()

# import urllib  #模块
from urllib.request import urlopen
# ret = urlopen('http://www.xiaohua100.cn/index.html').read()
# print(ret)
# def get_url():
#     url = 'http://www.xiaohua100.cn/index.html'
#     ret = urlopen(url).read()
#     print(ret)
#
# get_url()

def get_url():
    url = 'http://www.xiaohua100.cn/index.html'
    def get():
        ret = urlopen(url).read()
        print(ret)
    return get

get_func = get_url()
get_func()

 

 

  

おすすめ

転載: www.cnblogs.com/if-it-is-possible/p/11470433.html