列表推導式、海象運算符

字典代替 switch

day = 8

def get_sunday():
    return 'Sunday'

def get_monday():
    return 'Monday'

def get_tuesday():
    return 'Tuesday'

def get_default():
    return 'Unkown'

switcher = {
    0: get_sunday,
    1: get_monday,
    2: get_tuesday
}

day_name = switcher.get(day, get_default)()
print(day_name)

列表推導式

根據(jù)一個列表創(chuàng)建一個新的列表

以 a 列表的每個元素的平方創(chuàng)建一個新列表

a = [1, 2, 3, 4, 5, 6]
b = [i*i for i in a]
print(b)

結果

[1, 4, 9, 16, 25, 36]

只用大于 3 的元素

a = [1, 2, 3, 4, 5, 6]
b = [i*i for i in a if i > 3]
print(b)

結果

[16, 25, 36]

tuple set dict 同樣可以蛤织,比如 set

a = {1, 2, 3, 4, 5, 6}
b = {i*i for i in a if i > 3}
print(b)

結果

{16, 25, 36}

用字典的 key 創(chuàng)建一個新列表

students = {'張三': 18, '小明': 19, '小黑': 20}

l = [key for key,value in students.items()]
print(l)

結果

['張三', '小明', '小黑']

互換字典的 key 和 value

students = {'張三': 18, '小明': 19, '小黑': 20}

d = {value:key for key,value in students.items()}
print(d)

結果

{18: '張三', 19: '小明', 20: '小黑'}

iterator 和 generator

可迭代對象:凡是可以被 for 循環(huán)遍歷的數(shù)據(jù)結構妻率,都是可迭代對象蔚晨。列表儿礼,元組等都是可迭代對象咖杂。

迭代器:迭代器一定是一個可迭代對象,可迭代對象不一定是迭代器蚊夫。列表诉字,元組等都不是迭代器。

普通對象擁有 __iter____next__ 兩個方法知纷,可以變成一個迭代器

定義一個迭代器

import re


class BookCollection:
    def __init__(self):
        self.data = ['《入門》', '《出門》', '《放棄》']
        self.cur = 0
    
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.cur >= len(self.data):
            raise StopIteration()
        next_book = self.data[self.cur]
        self.cur += 1
        return next_book

books = BookCollection()
for book in books:
    print(book)

結果

《入門》
《出門》
《放棄》

迭代器有一次性奏窑,上面遍歷過了,再次遍歷不會打印

...
books = BookCollection()
for book in books:
    print(book)
# 再次遍歷
for book in books:
    print(book)

結果屈扎,只有第一次遍歷埃唯,打印了

《入門》
《出門》
《放棄》

如果要再次遍歷,可以創(chuàng)建一個新的對象或者復制一個對象

...
books = BookCollection()
# 創(chuàng)建一個新的對象
books1 = BookCollection()

for book in books:
    print(book)

for book in books1:
    print(book)
...
books = BookCollection()
# 復制一個對象
import copy
books_copy = copy.copy(books)

for book in books:
    print(book)

for book in books_copy:
    print(book)

生成器

在函數(shù)中鹰晨,執(zhí)行 return 墨叛,函數(shù)就結束了。

yield 會返回一個生成器對象模蜡,生成器對象可以通過 next() 訪問漠趁,也可以遍歷

返回生成器對象之后,與 return 不同忍疾,下一次調用會接著從上一次返回的地方執(zhí)行闯传。

def gen(max):
    n = 0
    while n <= max:
        n += 1
        yield n

g = gen(10)
print(next(g))
print(next(g))
print(next(g))

結果

1
2
3

遍歷

...
g = gen(10)
for i in g:
    print(i)

結果

1
2
3
4
5
6
...

dataclass

之前沒有使用 dataclass

class Student:
    def __init__(self, name, age, school_name):
        self.name = name
        self.age = age
        self.school_name = school_name
    
    def test(self):
        print(self.name)

student = Student('張三', 18, 'python')
student.test()

使用 dataclass

from dataclasses import dataclass


@dataclass
class Student:
    name: str
    age: int
    school_name: str
    
    def test(self):
        print(self.name)

student = Student('張三', 18, 'python')
student.test()

海象運算符

使用前

a = 'python'

if len(a) > 5:
    print('長度為:' + str(len(a)))

使用后

a = 'python'

if (b:=len(a)) > 5:
    print('長度為:' + str(b))

另,使用 f 關鍵字做字符串拼接

a = 'python'

if (b:=len(a)) > 5:
    print(f'長度為:卤妒')
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末甥绿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子则披,更是在濱河造成了極大的恐慌共缕,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件士复,死亡現(xiàn)場離奇詭異图谷,居然都是意外死亡,警方通過查閱死者的電腦和手機阱洪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門便贵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冗荸,你說我怎么就攤上這事承璃。” “怎么了俏竞?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵绸硕,是天一觀的道長堂竟。 經(jīng)常有香客問我,道長玻佩,這世上最難降的妖魔是什么出嘹? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮咬崔,結果婚禮上税稼,老公的妹妹穿的比我還像新娘。我一直安慰自己垮斯,他們只是感情好郎仆,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兜蠕,像睡著了一般扰肌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熊杨,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天曙旭,我揣著相機與錄音,去河邊找鬼晶府。 笑死桂躏,一個胖子當著我的面吹牛,可吹牛的內容都是我干的川陆。 我是一名探鬼主播剂习,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼较沪!你這毒婦竟也來了鳞绕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤购对,失蹤者是張志新(化名)和其女友劉穎猾昆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡些己,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年箕母,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浑娜。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出躲株,到底是詐尸還是另有隱情,我是刑警寧澤镣衡,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布霜定,位于F島的核電站档悠,受9級特大地震影響,放射性物質發(fā)生泄漏望浩。R本人自食惡果不足惜辖所,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磨德。 院中可真熱鬧缘回,春花似錦、人聲如沸典挑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽您觉。三九已至拙寡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琳水,已是汗流浹背倒庵。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炫刷,地道東北人擎宝。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓浑玛,卻偏偏與公主長得像绍申,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子顾彰,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內容