1.関数名の使用
変数や関数名の定義はほぼ同じであり、角度変数、関数名は、実際の変数で、関数は変数があります割り当てることができます。しかし、彼はまた、特別な機能として関数名を持つ(プラス)対応を実行します機能、私たちは特別な変数として関数名を置くことができ、そして次は、我々は、この特定の変数を見ています。
メモリアドレスの1.1機能
def func():
print("呵呵")
print(func)结果: <function func at 0x1101e4ea0>
上記のコードを通して、私たちは、関数のメモリアドレスへの関数名のポイントを知ることができ、それが実行される関数のメモリアドレスは()であるとして、実際には、深いステップは、この機能を実行することができます)、機能(のあまり名前をそれを理解することができますこの重要な機能、のように:
a = 1
b = 2
c = a + b
print(c) # 3
+ bは変数の和ではなく、二つの変数の追加は尖ったオブジェクトをint型。
1.2関数名は、他の変数に割り当てることができます
あなたが最初に理解していれば、第二は、理解しやすいです。
def func():
print("呵呵")
print(func)
a = func # 把函数当成一个变量赋值给另一个变量
a() # 函数调用 func()
割り当て、変数、変数FUNC変数によって、次いで()もちろん、この機能を実行することができ、関数のメモリアドレスを指し示します。
1.3要素名はのコンテナとして使用することができます
実際には、これは関数名、変数、私は要素のコンテナクラスの型として使用することができる変数であり、理解するのは難しいことではありません。
a = 1
b = 'alex'
c = '武sir'
l1 = [a, b, c]
for i in l1:
print(i)
'''
# 结果:
1
alex
武sir
'''
そして、関数名が考えられます。
def func1():
print("in func1: 嘻嘻")
def func2():
print("in func2: 哈哈")
def func3():
print("in func3: 咯咯")
def func4():
print("in func4: 吱吱")
lst = [func1, func2, func3, func4]
for i in lst:
i()
1.4関数名は、関数のパラメータとして使用することができます
変数を行うことができます、あなたは関数名を行うことができます。
def func1():
print('in func1')
def func2(f):
print('in func2')
f()
func2(func1)
1.5関数の関数名の戻り値として使用することができます
def func1():
print('in func1')
def func2(f):
print('in func2')
return f
ret = func2(func1)
ret() # ret, f, func1 都是指向的func1这个函数的内存地址
要約:関数名は特別な変数であり、加えて彼は、変数の機能に加えている、()が実行されるの主な特徴があり、実際には、彼が呼ばれる学校だったファーストクラスのオブジェクトを。
2つのPythonの新機能:F-文字列フォーマットされた出力
F-文字列あなたがこの学校を終えた後python3.6は、私を信じて、非常に使いやすい、標準ライブラリの新しい文言フォーマットされた出力、%sの形式やフォーマット効率以前より高い出力とより合理化に参加し始めていますその後、出力をフォーマットした後、これはあなたの唯一の選択肢です。
2.1簡単な例
彼の構成はFである(F)+文字列{}同様の形式ではなく、文字列の最後に、スタンド内の位置と交換したい、のSTR型は、代替コンテンツを書かれているが、彼は直接認識することができます。バンカー。
name = 'meet'
age = 18
sex = '男'
msg = F'姓名:{name},性别:{age},年龄:{sex}' # 大写字母也可以
msg = f'姓名:{name},性别:{age},年龄:{sex}'
print(msg)
'''
输出结果:
姓名:meet,性别:18,年龄:男
'''
2.2任意の式
彼はそれが非常に簡単である、任意の式を追加することができます。
print(f'{3*21}') # 63
name = 'barry'
print(f"全部大写:{name.upper()}") # 全部大写:BARRY
# 字典也可以
teacher = {'name': 'meet', 'age': 18}
msg = f"The teacher is {teacher['name']}, aged {teacher['age']}"
print(msg) # The comedian is meet, aged 18
# 列表也行
l1 = ['meet', 18]
msg = f'姓名:{l1[0]},年龄:{l1[1]}.'
print(msg) # 姓名:meet,年龄:18.
2.3はまた、発現に挿入することができます
対応する機能は、機能によって達成され、その文字列に対応する位置まで戻り値を返すことができます
def sum_a_b(a,b):
return a + b
a = 1
b = 2
print('求和的结果为' + f'{sum_a_b(a,b)}')
以上の2.4ラインF
name = 'barry'
age = 18
ajd = 'handsome'
# speaker = f'''Hi {name}.
# You are {age} years old.
# You are a {ajd} guy!'''
speaker = f'Hi {name}.'\
f'You are {age} years old.'\
f'You are a {ajd} guy!'
print(speaker)
2.5その他の詳細
ここで注意すべきいくつかの詳細は、
print(f"{{73}}") # {73}
print(f"{{{73}}}") # {73}
print(f"{{{{73}}}}") # {{73}}
m = 21
# ! , : { } ;这些标点不能出现在{} 这里面。
# print(f'{;12}') # 报错
# 所以使用lambda 表达式会出现一些问题。
# 解决方式:可将lambda嵌套在圆括号里面解决此问题。
x = 5
print(f'{(lambda x: x*2) (x)}') # 10
概要:F-文字列フォーマットされた出力は、よりコンパクトで便利で読みやすいです。そして、彼のスピード処理の前または%sの形式は、より高い揚力を持っているので、将来的には、このような形式の出力を利用すること。
3.イテレータ
3.1反復可能オブジェクト
1)定義イテラブル
イテレータのために、私たちは、ソースまたは多かれ少なかれ、我々は反復可能オブジェクト言葉を述べにおける講義のいずれかの前に、より身近な反復可能でなければなりません。反復可能オブジェクトの前に、より良い理解を容易にするために、反復可能であるものではない全く正しい、我々が持っているので、今日正式チャットを説明することがあります。文字通りの意味から、我々はそれらを最初に解体されています。オブジェクトとは何ですか?Pythonオブジェクトですべてが、私たちが前に言っている変数、リスト、文字列、ファイルハンドル、関数名などは、実際には、オブジェクトがその好例である本物である、オブジェクトを呼び出すことができます。だから、反復は何ですか?(単に彼は異なるサイクルではないことを繰り返した場合)実際には、各繰り返しを、単純な繰り返しを、私たちはしばしばこの言葉の日常生活の繰り返しで発生した、反復を更新するというように、反復は反復プロセスではなく、これは、前回の結果に基づいています。たとえば、あなたと怒っているあなたの父は、あなたがああ、いや、あなたは、あなたの息子、あなたの息子に生まれたあなたの孫が生まれたというように、各世代が同じではありませんが、あなたの父が生まれた、とあなたはそうで素敵なアプリ、微信ビブラートと、すべてのを使用します我々はいくつかの更新を行います時間の最後の期間に基づいて、これは反復的です。文字通りの意味から反復可能オブジェクトは、それが本物のリピート値です。
だから我々は単に何をするか、これまでのところ、我々は反復可能オブジェクトにさらされ、反復可能であるものの文字通りの意味から分析されますか?
などのファイルハンドルのSTRリストタプルDIC設定範囲、そしてINT、BOOLなぜこれらは、反復可能オブジェクト、それを呼び出すことはできませんか?見ながらこれらは文字通りの意味を満たしていないが、我々は、オブジェクトが反復可能でない判断する一定の基準やルールがあります。
** Pythonで、__iter__メソッド内部に含まれるオブジェクトが反復可能であるときはいつでも**。
2)オブジェクトの内部メソッドをチェック
内部オブジェクトは、他のどのような方法でそれを解決するために加えて、どのような方法を確認するためにソースコードが含まれていますか?で、もちろん、DIRによって()メソッドを持っているもののオブジェクトを判断します
s1 = 'alex'
print(dir(s1))
DIR()は、文字列メソッド名などのすべてのオブジェクトを含むリストを返します。このように、私たちはPythonでオブジェクトを決定することができます反復可能ではありません。
s1 = 'alex'
i = 100
print('__iter__' in dir(i)) # False
print('__iter__' in dir(s1)) # True
3)概要:
文字通りに言えば:反復可能オブジェクトは、本物のリピート値です。
プロの立場から:内部オブジェクト__iter__メソッドを含む時はいつでも反復可能です。
イテレート可能オブジェクトは、オブジェクトが「持っているかどうかを決定することができるITER判断」方法。
反復オブジェクトを有利ことができます。
あなたは視覚的に内部のデータを見ることができます。
反復は、オブジェクトを欠点ことができます。
\ 1.メモリを取ります。
\ 2.反復可能オブジェクトではない反復値(指数以外は、キーは削除します)。
だから、何人かの人々は、この欠点を疑問視、とさえ私はループのためにそれを価値ができ、キー以外のインデックスを、吹きます!はい、彼らは、実際に、循環のために底部にほとんど変換を行い、サイクルの値によって行うことができ、オブジェクトの最初の反復は、その後の値を運ぶ、イテレータに変換することが可能です。それでは、私たちは取るイテレータを見てどのような地獄です。
3.2イテレータ
1)イテレータを定義
ここでのツールとして、より適切な:文字通りの値を反復処理することができます話すイテレータがあるツールです。
プロの立場から:、この方法は、引数なし__next__実装していない要素ならば、スローその後、イテレータを呼び出すとStopIteration例外も.pythonで達成され、シーケンスの次の要素を返します。イテレータオブジェクトがあります__iter__メソッドは、そのイテレータは反復することができます。「スムーズなパイソン」から
だから、上記の事前のための説明の数、および理解しにくいが、あまりにも絡まっされていない、私たちの簡単な言葉です:Pythonは、内部が「を含むイーター」メソッドをし、含まれている「次の目標」アプローチは、イテレータです。
2)オブジェクトがイテレータであるか否かを決定する方法
[OK]を、私たちは、この定義を持って、我々はオブジェクトの数を決定することができ、イテレータまたは反復可能オブジェクトではありません、これらのオブジェクトを判断してください:反復可能オブジェクトであるイテレータであるファイルハンドルのSTRリストタプル辞書の設定範囲、 :
o1 = 'alex'
o2 = [1, 2, 3]
o3 = (1, 2, 3)
o4 = {'name': '太白','age': 18}
o5 = {1, 2, 3}
f = open('file',encoding='utf-8', mode='w')
print('__iter__' in dir(o1)) # True
print('__iter__' in dir(o2)) # True
print('__iter__' in dir(o3)) # True
print('__iter__' in dir(o4)) # True
print('__iter__' in dir(o5)) # True
print('__iter__' in dir(f)) # True
# hsagn
print('__next__' in dir(o1)) # False
print('__next__' in dir(o2)) # False
print('__next__' in dir(o3)) # False
print('__next__' in dir(o4)) # False
print('__next__' in dir(o5)) # False
print('__next__' in dir(f)) # True
f.close()
上記のコードを確認することができ、私たちが学んだこれらのオブジェクトの前に、専用のファイルハンドルがイテレータで、これらのデータ型の残りの部分は反復可能です。
3)反復可能オブジェクトのイテレータはに変換する方法:
l1 = [1, 2, 3, 4, 5, 6]
obj = l1.__iter__()
# 或者 iter(l1)print(obj)
# <list_iterator object at 0x000002057FE1A3C8>
4)イテレータ値:
反復可能オブジェクトは、反復値となって(除去率、スライシングとキー)ではありませんが、)(__イテレータの値が__nextされ使用して、イテレータに変換することができます。
l1 = [1, 2, 3,]
obj = l1.__iter__() # 或者 iter(l1)
# print(obj) # <list_iterator object at 0x000002057FE1A3C8>
ret = obj.__next__()
print(ret)
ret = obj.__next__()
print(ret)
ret = obj.__next__()
print(ret)
ret = obj.__next__() # StopIteration
print(ret)
# 迭代器利用next取值:一个next取对应的一个值,如果迭代器里面的值取完了,还要next,
# 那么就报StopIteration的错误。
5)内部循環メカニズムのシミュレーション中:
私達はちょうど、言及しているループの内部機構であるため、循環ループは、反復可能なため、目標でなければならないが、それはあなたが反復可能オブジェクトの値ができることを意味しません:イテレータに反復可能オブジェクトを変換し、[次へ]を使用します値を行っています。最後に、例外処理プロセスを呼び出すとStopIterationが投げ。
l1 = [1, 2, 3, 4, 5, 6]
# 1 将可迭代对象转化成迭代器
obj = iter(l1)
# 2,利用while循环,next进行取值
while 1:
# 3,利用异常处理终止循环
try:
print(next(obj))
except StopIteration:
break
6)概要:
文字通り話す:ツールの値を反復処理することができますイテレータ。
プロの立場から:Pythonで、内部「を含むイーター」メソッドをして'を含む次のオブジェクトのメソッドのイテレータを。
イテレータの利点:
メモリを保存します。
メモリ内の唯一のデータ空間にイテレータ相当:メモリ内の各データの値の両方がリリースされますので、このエントリは、現在のデータをロードします。
不活性メカニズム。
次回は、値ではなく、あまりにも多くの値をとります。
反復子は、良好なパターンは、上記の二つを説明することができるがあります反復は、データ処理の基礎です。スキャンは、メモリ・データ・セットに収まらない場合は、我々は、不活性なデータ項目を取得する方法を見つける必要があり、その需要は、1つのデータ項目を取得します。これは、反復モードです。
イテレータ短所:
内部データのない直感的な眺め。
値が後戻りされていない場合は、値のみをダウンしています。
l1 = [1, 2, 3, 4, 5, 6]
obj = iter(l1)
for i in range(2):
print(next(obj))
for i in range(2):
print(next(obj))
3.3反復同等イテレータオブジェクト
今日、反復可能なイテレータのより深い理解が、我々はについて話と2つのアプリケーション間の比較します:
反復可能オブジェクト:
そのようなデータセットのループ反復値によって直接、より直感的な(例えば、リスト、CRUD辞書、文字列の操作のような一般的に使用される方法のような)独自の方法より柔軟な操作であるが、メモリを占有し、しません。
アプリケーション:あなたは、データ処理のための柔軟性、および十分なメモリ空間に焦点を当てた場合、データセットはイテラブルに設定されているが明確な選択肢です。
イテレータ:
非常位置の値を記録することができ、値がループ+次の方法ではなく、データ比較の単一のセットを操作する直感的な方法を介して直接であってもよいし、メモリを節約しています。
アプリケーション:あなたのデータが第一の要因を保存するよう、あなたの記憶や、あなたのメモリを爆発するのに十分な大きさ、大きすぎる場合には、データセットは、イテレータが良い選択である設定されています。(Pythonのファイルハンドルがイテレータに設定されている理由を参照してください)