050 三元表達式,列表推導,字典生成器’生成器

1、三元表達式

  • 條件成立時的返回值 if 條件 else 條件不成立時的返回值python

  • 三元表達式只支持雙分支結構app

x = 10
y = 20
if x > y:
    print(x)
else:
    print(y)

# 三元表達式
x = 10
y = 20
print(f"x if x > y else y: {x if x > y else y}")

# x if x > y else y: 20

2、列表推導式

ls = []
for i in range(10)
    ls.append(i)
print(ls)



# 推導式
ls = [ i for i in range(10)]
print(ls)

ls = [ i**2 for i in range(10)]
print(ls)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

3、字典生成式

  • 字典生成器通常與zip(拉鍊函數---列表裏面包了元組)連用
dic = {'a':1,'b':2}
dic_new = {k**2,v**2 for k,v in dic.items()}
print(new_dic)


z = zip(['a','b','c'],[1,2,3])
for k,v in z:
    print(k,v)
# 結果    
a 1
b 2
c 3
d 4


dic = {k: v ** 2 for k, v in zip(['a', 'b', 'c', 'd'], [1, 2, 3, 4])}  # 不能寫這種代碼
print(dic)
# {'a': 1, 'b': 4, 'c': 9, 'd': 16}

4、生成器

  • 生成器:就是在自定義迭代,生成器就是迭代器(本身造出來的)
  • 迭代器對象就是同時具備——iter——,和——next——這兩個方法
def func():
    return 123

f = func()
print(f)
  • 生成器用到了一個關鍵字yield

1.yield有三個特性:

  • yield會使一個函數變成生成器對象(自定義的生成器對象),所以函數就具備了__iter__和___next__方法
  • 在函數裏面遇到yield能夠中止函數的運行,須要在用一次___next___方法運行yield下面的代碼
  • 函數裏面有幾個yield就有幾我的元素 就能夠用幾個next方法,若是多了一次next就會報錯,也就是說一個yield對應一個next
def func():
    yield 123
    print(456)
   
f = func()
print(f)
f__iter__ = f.__next__()
f__iter__ = f.__next__()

2.總結

  • yield:函數

    • 提供一種自定義迭代器的方式code

    • yield能夠暫停住函數,並提供當前的返回值對象

  • yield和return:ip

    • 相同點:二者都是在函數內部使用,均可以返回值,而且返回值沒有類型和個數的限制it

    • 不一樣點:return只能返回一次之;yield能夠返回屢次值class

5、生成器表達式yield

列題:迭代器

1.用生成器實現range方法

def range(n):
    i = 0
    while i < n:
        yield
        i += 1    
    
for i in range(10)
print(i)

2.用生成器實現一個帶有步長的range方法

def range(*args):
    ls = list(args)
    if len(ls) == 3:
        while ls[0]<ls[1]:
            yield ls[0]
            ls[0] += ls[2]
    elif len(ls) == 1:
        i = 0
        while i < ls[0]:
            yield i
            i += 1

for i in range(10):
    print(i)
相關文章
相關標籤/搜索