無名関数のリストとジェネレータ三項式は、組み込みの関数式

ジェネレータ

1.発電機は何ですか?

- ツールで生成

- イテレータを生成することは、カスタムで、本質的にイテレータです。

2.どのようにBuilderを達成するには?

    -但凡在函数内定义的yield

- 関数を呼び出すとき、コードは関数本体を実行しません。

これは、発電機で結果を返します。

3.yield

- 利回りが追加されるたびに値がジェネレータオブジェクトに生まれ変わります。

-yieldのみ関数内で定義することができます

-yield休止状態機能を保存することができます

収量とリターンの比較

- 同じポイント:

戻り値は制限されていません。

- 違い

リターンは、収率が複数の値を返すことができ、一つの値を返すことができるジュリ

自定义的迭代器
def func():
    print('from func')
    yield 'tank'


res = func()
print(res)
>>>>>>>
<generator object func at 0x000001C66A88BA98>####生成器

# 当我们通过__next__取值时,才会执行函数体代码。
def func():
    print('from func')
    yield 'tank'


res = func()
print(res.__next__())
>>>>>>>>>
from 
('tank', 'asss')

例えば

def func():
    print('开始准备下蛋')
    print('1---火鸡蛋1')
    yield '火鸡蛋1'######yield具有暂停函数的状态,打印一次,执行一次,最后一次打印完报错
    print('2---火鸡蛋2')
    yield '火鸡蛋2'
    print('3---火鸡蛋3')
    yield '火鸡蛋3'
    print('取最后一个蛋, 查看是否有')
res = func()
print(res.__next__())
>>>>>>>>>>
开始准备下蛋
1---火鸡蛋1
火鸡蛋1



python2: range(1, 5) ---> [1, 2, 3, 4]
python3: range(1, 5) ---> range对象 ---> 生成器 ---> 迭代器

式のトリプレット

場合....他に.....分岐ラインに変換することができます

構文:

- 条件の成立が条件が他の条件リターンの右の値を設定されていないかどうかを判断するために値を返すために、左

比较2个值的大小
def max2(num1, num2):
    if num1 > num2:
        return num1
    else:
        return num2
max2(2,3)
print(max2(2,3))
>>>>>>>>
3
可以用下面的方法代替
三元表达式
def max2(num1, num2):
    res = num1 if num1 > num2 else num2
max2(2,3)
>>>>>>>>
3

リスト式

- 実現党のリストを生成することができます。

- 構文:

 list = [取出的每一个值、任意值 for 可迭代对象中取出的每一个值 in 可迭代对象]
         for的右边是循环次数,并且可以取出可迭代对象中每一个值
         for的左边可以为当前列表添加值
        list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象]
        list = [值 for 可迭代对象中取出每一个值in 可迭代对象]
        list = [任意的值 for 可迭代对象中取出每一个值in 可迭代对象]
l1 = [1,2,3,4,5]
这个列表做成一个新的列表
普通的方法
l1 = [1,2,3,4,5]
new_l1 = []
for i in l1:
    new_l1.append(i)
print(new_l1)
>>>>>
[1, 2, 3, 4, 5]

列表的表达式
l1 = [1,2,3,4,5]

l2 = [i for i in l1]
print(l2)
>>>>>
[1, 2, 3, 4, 5]



#把一个列表的后缀都加上一个2
l1 = [1,2,3,4,5]
l2 = [i + 2 for i in l1 ]
print(l2)
>>>>>>
[3, 4, 5, 6, 7]

#把一个列表的后缀都加上'dsb'
l1 = ['david','jacon','jackson']
l2 = [name + 'dsb' for name in l1]
print(l2)
>>>>>>>
['daviddsb', 'jacondsb', 'jacksondsb']

式ビルダー

- ジェネレータオブジェクトを生成する---->イテレータオブジェクトを生成します

構文:

(反復可能オブジェクト内のラインのためのライン)

-g =(イテレート可能オブジェクトで行のための任意の値)

- プリント(G)#ジェネレータオブジェクト

生成器表达式(生成器生成式):
    - 列表生成式:  若数据量小时采用
        [line for line in range(1, 6)] ---> [1, 2, 3, 4, 5]
        优点:
            可以依赖于索引取值,取值方便

        缺点:
            浪费资源

    - 生成器生成式:  若数据量过大时采用
        () ---> 返回生成器
        (line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)

        优点:
            节省资源

        缺点:
            取值不方便
            
 #生成一个新的列表
l1 = [line for line in range(1,6)]
print(l1)
>>>>>>>
[1, 2, 3, 4, 5]
生成器的表达式

l2 = (line for line in range(1,6))
print(next(l2))
print(next(l2))
print(next(l2))
print(next(l2))
>>>>>>>>>>
1
2
3
4

内蔵機能

内蔵pythonの内部に設けられた方法

範囲()プリント()は()

私たちは、学習に焦点を当てて最大最小ソートマップフィルタであります

max求可迭代对象最大值   
max内部会将list1中的通过for取出每一个值,并且进行判断
min是求可迭代对象的最小值 


#求一个列表专中的最大值和最小值
l1 = [2,3,4,6,7]
print(max(l1))
print(min(l1))
>>>>>>>>
7
2

データがソート繰り返しオブジェクトでソートすることができ、デフォルトは昇順です

逆=真:降順

#把一个列表里面的值排序 升序和降序   reverse:反转 reverse默认是False
l1 = [9,3,4,6,7]
# print(max(l1))
# print(min(l1))
print(sorted(l1))
print(sorted(l1,reverse = True))
>>>>>>>>>>
[3, 4, 6, 7, 9]
[9, 7, 6, 4, 3]

#求一个字典里面的key 和 value 的排序
d1 = {
    'name': 'david',
    'age': 'twenty',
    'hobby': 'basketball'
}
new_dic = sorted(d1, key=lambda x: d1[x])
print(new_dic)

print(sorted(d1))
>>>>>>>>>>
['hobby', 'name', 'age']
['age', 'hobby', 'name']

マップ:マップを

-MAP(関数のアドレス、反復可能) - >マップオブジェクト

-mapリスト/タプルに、そのオブジェクトをマップにマッピングされ、その後、マップ・オブジェクトの各反復変更されたオブジェクトの値となり

name_list = ['egon', 'david', 'jackson', 'alex']
map_obj = map(lambda name:name + '喜欢吃生蚝' if name == 'egon' else name + '喜欢打球',name_list)
print(list(map_obj))
>>>>>>>>>
['egon喜欢吃生蚝', 'david喜欢打球', 'jackson喜欢打球', 'alex喜欢打球']
另外一种方法
name_list = ['egon', 'david', 'jackson', 'alex']
list_obj = [name + 'a'if name == 'david'else name +'打篮球' for name in name_list]
print(list_obj)
>>>>>>>>>>>>>
['egon打篮球', 'davida', 'jackson打篮球', 'alex打篮球']

削減:マージ

低減(関数のアドレスを、オブジェクトが反復することができ、デフォルト値は0です)

削減(関数のアドレスを、アドレスは、初期値で反復することができます)

単独で使用することはできません。

functoolsから減らすインポート

各反復から2つの値を得ることは、マージされたオブジェクトであってもよいです

初期値:機能を減らすには、すべてがマージの初期値から開始し、実行されます

求1到100的之和
j = 0

for i in range(1,101):
    j += i
print(j)
>>>>>>>>>
5050


用reduce的方法
res = reduce(lambda x,y: x+y ,range(1,101),0) ###最后面的0可以改为                                                  其他
print(res)
>>>>>>>>>
5050


res = reduce(lambda x,y: x+y ,range(1,101),2)##默认值改为2
print(res)
>>>>>>>>>
5052

フィルタ:フィルタ

フィルタ(関数アドレス、イテラブル)----->フィルタオブジェクト

name_list = ['egon_dd', 'david_dd', 'jackson_dd', 'alex']
l1 = filter(lambda name:name.endswith('_dd'),name_list)
print(tuple(l1))
>>>>>>>>
('egon_dd', 'david_dd', 'jackson_dd')

無名関数

- 定義:関数の名前なし。

-lambda x : x+x ——>内存地址

最初のx:パラメータ

第二は、x + xの戻り値であります

基づいています:分割ラインとして

FUNC =ラムダ:この機能は、機能をよく知られている名前を持ちます

名前の関数:

-def名(X):#名 - >メモリアドレス

機能名+()の呼び出しは、関数本体のコードを実行します

匿名関数名を使用すると、組み込み関数を使用する必要があり、単独で使用することはできません

d1 = {
    'name': 'david',
    'age': 'twenty',
    'hobby': 'basketball'
}
d2 = [max(d1, key=lambda x:d1[x])]
print(d2)
>>>>>>>>>
['age']

おすすめ

転載: www.cnblogs.com/bs2019/p/11867794.html