ファンクションジェネレータ、組み込み関数の導出とパイソン
ファンクションジェネレータ
定義された発電機
Pythonでは、関数発生器を使用して収率(発電機)と呼ばれます。
差は通常の関数と、ジェネレータはリターンイテレータ機能のみの操作を反復するために使用することができるということである、より単純ジェネレータはイテレータであると理解。
呼発生器は、各遭遇収率機能が一時停止を実行し、現在の動作情報の全てを保存している間に、収率の戻り値、及び(次の次の実行)は、その現在位置方式で動作し続けます。
ジェネレータ関数を呼び出すと、それはイテレータオブジェクトを返します。
ジェネレータとイテレータの違い
Builderは、プログラム開発者は、特別なイテレータを書かれているです
組み込みオブジェクトのpythonのIterator
3間の反復可能オブジェクト、イテレータとジェネレータの関係:
ジェネレータが構築されています
- 建設・ジェネレータ機能
- 建設・ジェネレータ派生
- そして、組み込み関数のPython用のモジュール
ジェネレータ関数
def func():
print(111)
yield 222 #关键字,当函数中出现yield关键字时候,说明我们想要声明一个生成器
g = func() #生成器
print(next(g)) #与__next__()方法一样
# 结果:
<generator object func at 0x0000028A1D5BFF10> #生成器对象内存地址
111
222
ジェネレータ関数と次の番号がプログラムを呼び出すとStopIteration与えられ、次の収率を超える得一つであります
収量との違いを返します。
一般的にはリターン機能は一つだけ、彼の役割は、機能を終了することで、機能の実行の戻り値に提供されます。
複数設けられていてもよいジェネレータ関数を得て、彼は機能を停止しないことを、次の対応する捕捉要素が生成もたらします。
lst = []
def func():
for i in range(10000): #列表方式存储,非常占用内存
lst.append(i)
print(i)
def func():
for i in range(10000):
yield i # yield起阻塞作用,用1取1
g = func()
for j in range(50):
print(next(g))
# 结果为0-49
def func():
lst1 = ["牛羊配","老奶奶花生米","卫龙","虾扯蛋","米老头","老干妈"]
lst2 = ["小浣熊","老干爹","亲嘴烧","麻辣烫","黄焖鸡","井盖"]
yield from lst1
yield from lst2 # yield from -- 将可迭代对象元素逐个返回
g = func()
print(next(g))
print(next(g))
print(next(g))
# 结果:
牛羊配
老奶奶花生米
卫龙
トラップ:
def func():
yield 1
for i in range(10):
yield i
print(func().__next__())
print(func().__next__()) #重复制造杯子(生成器)
# 结果:
1
1
要約:
関数の戻り値で発電機を得るために書き換えられ
収量は、実行位置を記録します
リターンと収率はリターンがより多くを書くことができ、戻ったが、一度だけ実行され、収量は多くを書くことができ、あなたも何度も返すことができます
収率に相当する__next __()
発生器は、値を取得するためにループのために使用することができます
以下からの収量は - 1で反復可能な要素の1を返します。
収率の一時停止は、forループとwhileループの内側に機能することができます
派生
リスト内包
lst = []
for i in range(10):
lst.append(i)
print(lst)
# 结果:
[0,1,2,3,4,5,6,7,8,9]
print([i for i in range(10)])
# 结果:
[0,1,2,3,4,5,6,7,8,9]
サイクルモード
[变量(加工后的变量)for 循环]
print([i for i in range(0,10,2)]) #10以内所有偶数
スクリーニングモード
[变量(加工后的变量)for 循环 if 条件]
print([i for i in range(10) if i%2==1]) #10以内所有奇数
print([f"python{i}期" for i in range(1,25) if i%2==0]) #python24期内所有偶数期
ジェネレータ式
サイクルモード
(变量(加工后的变量)for 循环)
g = (i for i in range(10))
print(next(g))
print(next(g))
# 结果:
0
1
スクリーニングモード
(变量(加工后的变量)for 循环 if 条件)
g = (i for i in range(50) if i%5 == 0)
print(next(g))
print(next(g))
# 结果
0
5
その他の派生
# 字典推导式:
print({i:i+1 for i in range(10)})
print({i:i+1 for i in range(10) if i % 2 == 0})
# {键:值 for循环 加工条件}
# 集合推导式:
print({i for i in range(10)})
print({i for i in range(10) if i%2 == 0})
# {变量(加工后的变量) for循环 加工条件}
python組み込み関数の使用方法
evalのコードが実行列の種類、および最終結果を返します。
eval('2 + 2') # 4
n=81
eval("n + 4") # 85
eval('print(666)') # 666
EXEC:実行文字列型。
s = '''
for i in [1,2,3]:
print(i)
'''
exec(s)
二つ以上の組み込み関数は非常に強力な作品の使用を禁止します
ハッシュ:ハッシュ値:オブジェクトを取得し(INT、STR、ブール、タプルオブジェクトはハッシュであってもよいです)。
print(hash(12322))
print(hash('123'))
print(hash('arg'))
print(hash('alex'))
print(hash(True))
print(hash(False))
print(hash((1,2,3)))
'''
-2996001552409009098
-4637515981888139739
1
2528502973977326415
'''
ヘルプ:詳細に記載された目的を表示するための機能モジュールまたは関数。
print(help(list))
print(help(str.split))
呼び出し可能:関数は、オブジェクトが呼び出し可能であるかどうかを確認するために使用されます。それがTrueを返す場合は、まだ失敗する可能性があります呼び出します。しかし、それはFalseを返す場合、呼び出し元のオブジェクトojbectは決して成功しないだろう。
name = 'alex'
def func():
pass
print(callable(name)) # False
print(callable(func)) # True
INT:関数は、文字列または整数に変換するために使用されます。
print(int()) # 0
print(int('12')) # 12
print(int(3.6)) # 3
print(int('0100',base=2)) # 将2进制的 0100 转化成十进制。结果为 4
フロート:関数は、浮動小数点および文字列に整数に変換するために使用されます。
複素数:複素数実数+のIMAGの* jのまたは形質転換文字列または複数の番号を作成する機能。最初のパラメータが文字列である場合は、2番目のパラメータを指定する必要はありません。。
print(float(3)) # 3.0
print(complex(1,2)) # (1+2j)
ビン:バイナリと背面に小数を変換します。
10月:進文字列とリターンを10進数に変換。
進:16進数の文字列を返すに変換小数。
print(bin(10),type(bin(10))) # 0b1010 <class 'str'>
print(oct(10),type(oct(10))) # 0o12 <class 'str'>
print(hex(10),type(hex(10))) # 0xa <class 'str'>
divmod:除数および被除数の計算結果は、(//のBは、%B)の商と余りのタプルを返します。
ラウンド:浮動小数点の小数点以下の桁、デフォルトの保存整数の保持。
POW:X-に見つけるのy乗を。(Xの3つのパラメータ Zの結果I yがとら)
print(divmod(7,2)) # (3, 1)
print(round(7/3,2)) # 2.33
print(round(7/3)) # 2
print(round(3.32567,3)) # 3.326
print(pow(2,3)) # 两个参数为2**3次幂
print(pow(2,3,3)) # 三个参数为2**3次幂,对3取余。
バイト:異なる符号間の変換のために。
# s = '你好'
bs = s.encode('utf-8')
# print(bs)
s1 = bs.decode('utf-8')
# print(s1)
bs = bytes(s,encoding='utf-8')
# print(bs)
b = '你好'.encode('gbk')
# b1 = b.decode('gbk')
print(b1.encode('utf-8'))
ORD:現在位置の文字エンコーディングを見つけるために、文字を入力します。
CHR:それに対応する文字を識別するために、デジタル符号化の現在の位置を入力します。
# ord 输入字符找该字符编码的位置
print(ord('a'))
print(ord('中'))
# chr 输入位置数字找出其对应的字符
print(chr(97))
print(chr(20013))
repr:オブジェクト(本当の色)の文字列形式を返します。
# %r 原封不动的写出来
name = 'taibai'
print('我叫%r'%name)
# repr 原形毕露
print(repr('{"name":"alex"}'))
print('{"name":"alex"}')
すべて:すべて真で反復可能オブジェクトはTrueです
どの:反復可能オブジェクト、TRUE TRUEがあります
# all 可迭代对象中,全都是True才是True
# any 可迭代对象中,有一个True 就是True
print(all([1,2,True,0]))
print(any([1,'',0]))