成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五個(gè)良好的Python編程習(xí)慣,助你成為Python高手!

開(kāi)發(fā) 前端
今天筆者將向大家分享5個(gè)良好的Python編程習(xí)慣,大牛認(rèn)證,通過(guò)不斷實(shí)踐,助你寫出更Pythonic的代碼,讓你向Python大師之路更進(jìn)一步。

今天筆者將向大家分享5個(gè)良好的Python編程習(xí)慣,大牛認(rèn)證,通過(guò)不斷實(shí)踐,助你寫出更Pythonic的代碼,讓你向Python大師之路更進(jìn)一步。

1. 常用if __name__ == '__main__'

假設(shè)我們?cè)?nbsp;module.py 中寫了一個(gè)模擬連接到數(shù)據(jù)庫(kù)的函數(shù),并調(diào)用它:

import time

def sim_conn_to_db() -> None:
    print('Connecting to database...')
    time.sleep(3)
    print('Connected to database successfully!')

sim_conn_to_db()

輸出:

Connecting to database...
Connected to database successfully!

現(xiàn)在,假設(shè)我們保持 module.py 的代碼不變,然后在 main.py 中調(diào)用 sim_conn_to_db() 方法:

from module import sim_conn_to_db

sim_conn_to_db()

輸出:

Connecting to database...
Connected to database successfully!
Connecting to database...
Connected to database successfully!

wow,你發(fā)現(xiàn)了么?sim_conn_to_db() 方法執(zhí)行了兩遍。這是為什么呢?原因在于我們通過(guò) from module import sim_conn_to_db 語(yǔ)句引入 sim_conn_to_db() 方法時(shí),Python解釋器會(huì)加載整個(gè) module.py 腳本,逐行加載代碼。因此,在加載的時(shí)候已經(jīng)執(zhí)行了一次 sim_conn_to_db() 方法;然后,在 main.py 腳本中我們又再一次調(diào)用了 sim_conn_to_db() 方法,所以,該方法被執(zhí)行了2次。

那么改如何避免這種情況呢?這就是今天我向大家分享的第1個(gè)好習(xí)慣,總是使用 if __name__ == '__main__' 語(yǔ)句執(zhí)行檢查。比如,在 module.py 文件中加入改語(yǔ)句:

import time

def sim_conn_to_db() -> None:
    print('Connecting to database...')
    time.sleep(3)
    print('Connected to database successfully!')

if __name__ == '__main__':
    sim_conn_to_db()

然后,我們?cè)俅螆?zhí)行 main.py 文件,sim_conn_to_db() 方法就不會(huì)被執(zhí)行2次。因?yàn)?nbsp;if __name__ == '__main__' 語(yǔ)句確保了只有直接執(zhí)行 module.py 文件的時(shí)候,sim_conn_to_db() 方法才會(huì)被調(diào)用,在別的 .py 文件中調(diào)用該方法時(shí)只會(huì)執(zhí)行一次。

如果你使用的Pycharm IDE的話,if __name__ == '__main__' 的另一個(gè)好處就是,在行號(hào)處會(huì)出現(xiàn)一個(gè)綠色的運(yùn)行按鈕,單擊該按鈕你可以直接執(zhí)行當(dāng)前腳本文件或其他操作.

2.main函數(shù)讓代碼更有組織性

假設(shè)我們有以下代碼片段:

def greeting(name: str) -> None:
    print(f"Hello {name}!")

def bye() -> None:
    print("Bye! See you soon!")

if __name__ == '__main__':
    greeting(name='Jack')
    bye()

這里,我們定義了兩個(gè)簡(jiǎn)單的問(wèn)候和告別方法,并且調(diào)用它們。完全沒(méi)有問(wèn)題,正確實(shí)現(xiàn)了預(yù)期功能。但是,如果有很多個(gè)函數(shù)呢?也在 if __name__ == '__main__': 語(yǔ)句中調(diào)用的話就顯得臃腫且復(fù)雜,毫無(wú)組織性。因?yàn)?nbsp;if __name__ == '__main__': 語(yǔ)句是函數(shù)的執(zhí)行入口,我們應(yīng)該盡量保證簡(jiǎn)潔。

這個(gè)時(shí)候就用到了今天我給大家分享的第2個(gè)好習(xí)慣,定義一個(gè) main 函數(shù),將所有函數(shù)調(diào)用和其他邏輯都放到該函數(shù)中,然后在入口處只需要調(diào)用 main 函數(shù)即可。

def greeting(name: str) -> None:
    print(f"Hello {name}!")

def bye() -> None:
    print("Bye! See you soon!")

def main() -> None:
    greeting(name='Jack')
    bye()

if __name__ == '__main__':
    main()

這樣,即使后續(xù)有新增的方法調(diào)用,只需要在main函數(shù)中添加即可,不僅確保了腳本運(yùn)行入口處語(yǔ)句的簡(jiǎn)潔,同時(shí)讓整個(gè)代碼結(jié)構(gòu)更具組織性。另一方面,也讓你的代碼更具可讀性。

Tips:你可以將 main 函數(shù)當(dāng)做是你的管家,無(wú)論多復(fù)雜、數(shù)量眾多的事務(wù)都交給管家一個(gè)人去統(tǒng)籌安排,而你只需要掌控管家一個(gè)人即可。

3. 保持函數(shù)的單一性和簡(jiǎn)潔性

假設(shè)我們有一個(gè)根據(jù)姓名、年齡和身份證來(lái)判斷某人是否能夠加入俱樂(lè)部的方法,如下:

def enter_club(name: str, age: int, has_id: bool) -> None:
    if name.lower() == 'stefan':
        print('Get out of here Stefan, we don\'t want to trouble.')

    if age >= 18 and has_id:
        print('You may enter the job.')
    else:
        print('Sorry, you may not enter the club.')

def main() -> None:
    enter_club(name='Stefan', age=18, has_id=True)
    enter_club(name='Bob', age=29, has_id=True)
    enter_club(name='Ellena', age=20, has_id=False)
    enter_club(name='Bony', age=21, has_id=True)

if __name__ == '__main__':
    main()

很明顯,上面的代碼正確實(shí)現(xiàn)了我們想要的功能。但我并不推薦這種做法,因?yàn)?nbsp;enter_club 方法中涉及了很復(fù)雜的邏輯,并不符合Python函數(shù)編程的單一職責(zé)原則。

因此,這里就會(huì)用到今天我給大家分享的第3個(gè)好習(xí)慣——盡可能保持函數(shù)的單一性和簡(jiǎn)潔性。enter_club 方法中同時(shí)涉及到姓名、年齡和身份的判斷,實(shí)際上我們可以將其拆分成多個(gè)具有單一職責(zé)的函數(shù)。

def is_black_list(name: str) -> bool:
    return name.lower() == 'stefan'

def is_adult(age: int, has_id: bool) -> bool:
    return age >= 18 and has_id

def enter_club(name: str, age: int, has_id: bool) -> None:
    if is_black_list(name):
        print('Get out of here Stefan, we don\'t want to trouble.')

    if is_adult(age, has_id):
        print('You may enter the job.')
    else:
        print('Sorry, you may not enter the club.')

def main() -> None:
    enter_club(name='Stefan', age=18, has_id=True)
    enter_club(name='Bob', age=29, has_id=True)
    enter_club(name='Ellena', age=20, has_id=False)
    enter_club(name='Bony', age=21, has_id=True)

if __name__ == '__main__':
    main()

這里,我們將對(duì)姓名和年齡、身份的判斷拆分為兩個(gè)獨(dú)立的方法 is_black_list 和 is_adult。拆分后的函數(shù)職責(zé)單一,邏輯簡(jiǎn)單清晰。確保實(shí)現(xiàn)相同功能的同時(shí),增強(qiáng)了代碼的可讀性、可維護(hù)性以及可擴(kuò)展性。

4. 盡可能多用類型提示

第4個(gè)好習(xí)慣就是類型注釋(type hints),如果你還不知道什么是類型注釋,以及它的諸多好處,你可以閱讀我的上一篇文章“Python類型提示(type hints):提升代碼質(zhì)量與可讀性的利器!”。

這里,我們只是舉幾個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明類型注釋的實(shí)用之處。

4.1 降低代碼潛在bug或錯(cuò)誤的風(fēng)險(xiǎn)

比如,以下代碼段:

def add(a, b):
    return a + b

if __name__ == '__main__':
    result = add(a=1, b=2)
    print(result)  # 3

正確實(shí)現(xiàn)了整數(shù)的加法功能。但是,由于參數(shù) a 和 b 并沒(méi)有任何類型說(shuō)明,如果你的用戶或同事在調(diào)用 add 方法時(shí),給了錯(cuò)誤的參數(shù)類型,很可能造成意料之外的結(jié)果甚至程序錯(cuò)誤,比如,

def add(a, b):
    return a + b

if __name__ == '__main__':
    result = add(a='1', b=2)
    print(result)

只要給參數(shù) a傳遞字符串值,都會(huì)導(dǎo)致 TypeError,因?yàn)樽址驼麛?shù)不支持連接操作。類似地,如果給參數(shù) b 傳遞字符串值,同樣會(huì)得到 TypeError,因?yàn)檎麛?shù)和字符串不支持加法操作。

然而,如果給參數(shù) a 和 b 都傳遞字符串值,會(huì)發(fā)生什么呢:

if __name__ == '__main__':
    result = add(a='1', b='2')
    print(result)  # 12

雖然程序可以正常執(zhí)行,但是得到的結(jié)果是12,這是字符串連接結(jié)果,而不是我們想要的整數(shù)相加結(jié)果。

解決這種潛在錯(cuò)誤或不期望結(jié)果的方法就是在方法定義中使用類型注釋:

def add(a: int, b: int) -> int:
    return a + b

這樣,在方法調(diào)用時(shí),如果給參數(shù)傳遞了不符合定義時(shí)所給的參數(shù)類型,編譯器會(huì)提示:

有了這個(gè)提示,我們就知道應(yīng)該給參數(shù)傳遞的是整數(shù)類型,而不是字符串。有效降低了潛在bug或錯(cuò)誤發(fā)生的幾率,特別是在大型項(xiàng)目中。因?yàn)榻鉀Qbug永遠(yuǎn)都是一件令人十分惱火的事??????。

4.2 提高編碼效率

在很多IDE中,都提供了根據(jù)上下文進(jìn)行代碼補(bǔ)齊的功能,比如Pycharm。但是,如果不知道變量類型的前提下,編譯器是沒(méi)辦法給你任何推薦的。比如:

這里,我想對(duì)一個(gè)DataFrame進(jìn)行一系列的處理,由于不知道變量的數(shù)據(jù)類型,在輸入 . 之后,編譯器無(wú)法給出有效的推薦。

當(dāng)我們?cè)黾宇愋妥⑨尯螅?/p>

這時(shí),編譯器就會(huì)將DataFrame具有的所有方法和屬性全都列出來(lái)供我們選擇,可以快速找到我們想要的方法或?qū)傩裕瑥亩岣呔幋a效率。

關(guān)于類型注釋的更多用法,你可以閱讀我的上一篇文章“Python類型提示(type hints):提升代碼質(zhì)量與可讀性的利器!”。

5. 善用列表推導(dǎo)式

假設(shè)有一個(gè)不同年齡構(gòu)成的列表,我們想要篩選出所有大歲數(shù)(年齡≥30)的人并存儲(chǔ)在新的列表中:

ages: list[int] = [18, 16, 20, 35, 40, 53, 65, 32, 80, 96]

olders: list[int] = list()
for age in ages:
    if age >= 30:
        olders.append(age)
print(f'People with older age: {olders}')
# Output: People with older age: [35, 40, 53, 65, 32, 80, 96]

這里我們通過(guò)循環(huán)實(shí)現(xiàn)了想要的功能。但其實(shí),還有另一種更簡(jiǎn)潔的方法,就是今天我給大家分享的最后一個(gè)好習(xí)慣——善用列表推導(dǎo)式:

ages: list[int] = [18, 16, 20, 35, 40, 53, 65, 32, 80, 96]

olders: list[int] = [age for age in ages if age >= 30]
print(f'People with older age: {olders}')

完整實(shí)現(xiàn)相同功能的同時(shí),一下子將4行的核心代碼編程1行,是不是既簡(jiǎn)潔又高效呢?

6. 結(jié)論

感謝你的閱讀,希望本文簡(jiǎn)潔、清晰的內(nèi)容能夠?qū)δ阌兴鶐椭ee you next time!

責(zé)任編輯:華軒 來(lái)源: 數(shù)據(jù)派探險(xiǎn)家
相關(guān)推薦

2009-01-03 10:40:41

PHP編程代碼

2011-04-13 10:16:41

編程習(xí)慣

2009-01-03 14:34:49

ibmdwPHP

2020-04-22 10:35:07

編程學(xué)習(xí)技術(shù)

2015-10-08 10:04:39

Python高手

2011-07-07 15:36:51

PHP

2011-07-07 15:48:22

PHP編程習(xí)慣

2011-07-07 15:26:28

PHP編程習(xí)慣

2009-12-14 10:54:26

2023-11-23 13:43:24

Python列表

2016-10-21 16:30:18

Linux操作系統(tǒng)

2016-10-21 20:27:03

Linux

2009-02-23 13:00:17

程序員職業(yè)習(xí)慣

2024-02-28 07:48:05

Rust項(xiàng)目框架

2017-09-01 11:01:22

開(kāi)發(fā)編程習(xí)慣

2023-10-26 18:03:14

索引Python技巧

2009-02-18 10:17:06

Java學(xué)習(xí)要點(diǎn)JSP

2013-09-26 11:18:31

設(shè)計(jì)

2015-06-23 13:41:03

Docker開(kāi)源社區(qū)代碼貢獻(xiàn)

2024-01-22 18:50:35

VS Code編程開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线观看国产视频 | 毛片免费看的 | 精品视频一区二区三区在线观看 | 久久久国产亚洲精品 | 韩日一区二区 | 中文字幕av网 | 欧美高清成人 | 中文字幕日韩欧美一区二区三区 | 黄色av观看 | 久久精品国产亚洲a | 国产成人综合久久 | 亚洲伊人精品酒店 | 久久精品国产亚洲 | 亚洲精品一区在线观看 | 一级黄色淫片 | 亚洲精品视频在线播放 | 久久99久久98精品免观看软件 | 九九国产| 国产精品毛片av一区 | 最新av在线网址 | 99久久婷婷国产综合精品首页 | 新av在线| 国产精品久久久久久久久久妇女 | 国产精品视频网 | 在线播放一区二区三区 | 欧美一区二区三区,视频 | 日本男人天堂 | 96av麻豆蜜桃一区二区 | 日韩电影一区二区三区 | 一级a性色生活片久久毛片 午夜精品在线观看 | 99精品视频在线观看 | 99久久夜色精品国产亚洲96 | 久久五月婷 | 久久精品99 | 国产精品v| 国产精品99久久久精品免费观看 | 久久精品亚洲精品 | 亚洲综合日韩精品欧美综合区 | 伊人免费在线观看 | 久久高清免费视频 | 国产日韩精品一区二区 |