最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

15個提升Python程序運行速度的實用技巧

 更新時間:2026年01月18日 08:42:00   作者:軟件測試雜談  
這篇文章主要為大家詳細(xì)介紹了15個提升Python程序運行速度的實用技巧,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

今天我們就來聊聊如何用15個技巧讓Python程序飛速運行。這些技巧不僅能讓代碼跑得更快,還能讓你的編程思維更加嚴(yán)謹(jǐn)。

1. 使用內(nèi)置函數(shù)和庫

Python自帶了很多高效的內(nèi)置函數(shù)和庫,它們通常比你自己寫的代碼要快得多。盡量使用這些現(xiàn)成的工具,而不是自己重新發(fā)明輪子。

示例:

# 不推薦:手動計算列表元素之和
def sum_list_manual(lst):
    total = 0
    for num in lst:
        total += num
    return total

# 推薦:使用內(nèi)置sum函數(shù)
def sum_list_builtin(lst):
    return sum(lst)

# 測試
numbers = [1, 2, 3, 4, 5]
print(sum_list_manual(numbers))  # 輸出: 15
print(sum_list_builtin(numbers))  # 輸出: 15

2. 使用列表推導(dǎo)式代替循環(huán)

列表推導(dǎo)式不僅更簡潔,而且執(zhí)行速度也更快。

示例:

# 不推薦:使用for循環(huán)創(chuàng)建平方數(shù)列表
squares_loop = []
for i in range(10):
    squares_loop.append(i ** 2)

# 推薦:使用列表推導(dǎo)式
squares_comprehension = [i ** 2 for i in range(10)]

print(squares_loop)  # 輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print(squares_comprehension)  # 輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

3. 使用生成器表達(dá)式節(jié)省內(nèi)存

當(dāng)你處理大數(shù)據(jù)集時,生成器表達(dá)式可以節(jié)省大量內(nèi)存,因為它只在需要時生成數(shù)據(jù)。

示例:

# 不推薦:使用列表存儲所有平方數(shù)
squares_list = [i ** 2 for i in range(1000000)]

# 推薦:使用生成器表達(dá)式
squares_generator = (i ** 2 for i in range(1000000))

# 計算總和
print(sum(squares_list))  # 需要大量內(nèi)存
print(sum(squares_generator))  # 內(nèi)存使用較少

4. 使用set進(jìn)行成員檢查

集合(set)的數(shù)據(jù)結(jié)構(gòu)查找元素的時間復(fù)雜度是O(1),而列表(list)是O(n)。因此,如果需要頻繁進(jìn)行成員檢查,使用set會更快。

示例:

# 不推薦:使用列表進(jìn)行成員檢查
my_list = list(range(1000000))
if 999999 in my_list:
    print("Found!")

# 推薦:使用集合進(jìn)行成員檢查
my_set = set(range(1000000))
if 999999 in my_set:
    print("Found!")

5. 使用字典代替多重條件判斷

當(dāng)有多個條件判斷時,可以考慮使用字典來簡化代碼,并提高效率。

示例:

# 不推薦:使用多重if-else
def get_grade(score):
    if score >= 90:
        return 'A'
    elif score >= 80:
        return 'B'
    elif score >= 70:
        return 'C'
    else:
        return 'D'

# 推薦:使用字典映射
grade_mapping = {
    (90, 100): 'A',
    (80, 89): 'B',
    (70, 79): 'C',
    (0, 69): 'D'
}

def get_grade_dict(score):
    for key, value in grade_mapping.items():
        if key[0] <= score <= key[1]:
            return value

print(get_grade(85))  # 輸出: B
print(get_grade_dict(85))  # 輸出: B

6. 使用局部變量提高性能

局部變量的訪問速度比全局變量快。因此,在循環(huán)中盡量使用局部變量。

示例:

# 不推薦:使用全局變量
global_var = 10
def increment_global():
    global global_var
    for _ in range(1000000):
        global_var += 1

# 推薦:使用局部變量
def increment_local():
    local_var = 10
    for _ in range(1000000):
        local_var += 1

increment_global()  # 較慢
increment_local()   # 較快

7. 使用functools.lru_cache緩存結(jié)果

對于耗時的函數(shù)調(diào)用,可以使用functools.lru_cache來緩存結(jié)果,避免重復(fù)計算。

示例:

import functools

# 不推薦:每次調(diào)用都重新計算
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

# 推薦:使用緩存
@functools.lru_cache(maxsize=None)
def fibonacci_cached(n):
    if n <= 1:
        return n
    return fibonacci_cached(n-1) + fibonacci_cached(n-2)

print(fibonacci(30))  # 較慢
print(fibonacci_cached(30))  # 較快

8. 使用numpy處理數(shù)值計算

numpy是一個專門用于科學(xué)計算的庫,它提供了高效的數(shù)組操作功能。

示例:

import numpy as np

# 不推薦:使用純Python列表進(jìn)行矩陣乘法
matrix_a = [[1, 2], [3, 4]]
matrix_b = [[5, 6], [7, 8]]

result = [[0, 0], [0, 0]]
for i in range(len(matrix_a)):
    for j in range(len(matrix_b[0])):
        for k in range(len(matrix_b)):
            result[i][j] += matrix_a[i][k] * matrix_b[k][j]

# 推薦:使用numpy進(jìn)行矩陣乘法
matrix_a_np = np.array(matrix_a)
matrix_b_np = np.array(matrix_b)
result_np = np.dot(matrix_a_np, matrix_b_np)

print(result)  # 輸出: [[19, 22], [43, 50]]
print(result_np)  # 輸出: [[19 22] [43 50]]

9. 使用pandas處理數(shù)據(jù)

pandas是一個強大的數(shù)據(jù)分析庫,特別適合處理表格數(shù)據(jù)。

示例:

import pandas as pd

# 不推薦:使用純Python字典和列表處理數(shù)據(jù)
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
ages = [age for age in data['Age'] if age > 30]

# 推薦:使用pandas處理數(shù)據(jù)
df = pd.DataFrame(data)
filtered_df = df[df['Age'] > 30]

print(ages)  # 輸出: [35]
print(filtered_df)  # 輸出:      Name  Age
                 # 2  Charlie   35

10. 使用multiprocessing進(jìn)行并行處理

如果你的任務(wù)是可以并行化的,那么使用multiprocessing模塊可以顯著提高性能。

示例:

import multiprocessing

def square(x):
    return x ** 2

# 不推薦:串行處理
results_serial = [square(i) for i in range(10)]

# 推薦:并行處理
pool = multiprocessing.Pool()
results_parallel = pool.map(square, range(10))
pool.close()
pool.join()

print(results_serial)  # 輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print(results_parallel)  # 輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

11. 使用asyncio進(jìn)行異步編程

對于I/O密集型任務(wù),使用asyncio可以提高程序的響應(yīng)速度。

示例:

import asyncio

async def fetch_data():
    await asyncio.sleep(1)
    return "Data fetched"

# 不推薦:同步等待
def sync_fetch():
    import time
    time.sleep(1)
    return "Data fetched"

# 推薦:異步等待
async def main():
    result = await fetch_data()
    print(result)

asyncio.run(main())  # 輸出: Data fetched

12. 使用cython編譯Python代碼

cython可以將Python代碼編譯成C代碼,從而提高執(zhí)行速度。

示例:

# 不推薦:純Python代碼
def slow_function(n):
    return sum(i * i for i in range(n))

# 推薦:使用Cython編譯
# 在文件slow_function.pyx中定義
def fast_function(int n):
    cdef int i, result = 0
    for i in range(n):
        result += i * i
    return result

# 編譯并導(dǎo)入
from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize("slow_function.pyx"))

from slow_function import fast_function

print(slow_function(1000000))  # 較慢
print(fast_function(1000000))  # 較快

13. 使用numba加速數(shù)值計算

numba可以通過即時編譯技術(shù)加速數(shù)值計算。

示例:

import numba

@numba.jit
def fast_sum(a, b):
    return a + b

# 不推薦:純Python加法
def slow_sum(a, b):
    return a + b

print(slow_sum(10, 20))  # 輸出: 30
print(fast_sum(10, 20))  # 輸出: 30

14. 使用cProfile進(jìn)行性能分析

在優(yōu)化代碼之前,先使用cProfile找出瓶頸所在。

示例:

import cProfile

def profile_me():
    total = 0
    for i in range(1000000):
        total += i
    return total

cProfile.run('profile_me()')

15. 使用line_profiler進(jìn)行逐行分析

line_profiler可以幫助你找到具體哪一行代碼最耗時。

示例:

# 安裝line_profiler
# pip install line_profiler

@profile
def function_to_profile():
    a = 2
    b = 3
    c = a + b
    return c

function_to_profile()

實戰(zhàn)案例:優(yōu)化圖像處理算法

假設(shè)你需要編寫一個圖像處理程序,將一張圖片轉(zhuǎn)換為灰度圖。我們來看一下如何應(yīng)用上述技巧來優(yōu)化這個過程。

原始代碼:

from PIL import Image

def to_grayscale(image_path):
    image = Image.open(image_path)
    width, height = image.size
    grayscale_image = Image.new('L', (width, height))

    for x in range(width):
        for y in range(height):
            r, g, b = image.getpixel((x, y))
            gray = int(0.299 * r + 0.587 * g + 0.114 * b)
            grayscale_image.putpixel((x, y), gray)

    grayscale_image.save('grayscale.jpg')

to_grayscale('input.jpg')

優(yōu)化后的代碼:

import numpy as np
from PIL import Image

def to_grayscale_optimized(image_path):
    image = Image.open(image_path).convert('RGB')
    image_array = np.array(image)
    grayscale_array = np.dot(image_array[..., :3], [0.299, 0.587, 0.114]).astype(np.uint8)
    grayscale_image = Image.fromarray(grayscale_array, 'L')
    grayscale_image.save('grayscale.jpg')

to_grayscale_optimized('input.jpg')

在這個實戰(zhàn)案例中,我們使用了numpy來進(jìn)行高效的數(shù)組操作,避免了顯式的雙重循環(huán),從而大大提高了程序的運行速度。

總結(jié)

本文介紹了15個讓Python程序飛速運行的技巧,包括使用內(nèi)置函數(shù)和庫、列表推導(dǎo)式、生成器表達(dá)式、集合成員檢查、字典映射、局部變量、緩存結(jié)果、numpypandas庫、并行和異步處理、cythonnumba編譯、性能分析工具等。通過這些技巧,你可以寫出更高效、更優(yōu)雅的Python代碼。

到此這篇關(guān)于15個提升Python程序運行速度的實用技巧的文章就介紹到這了,更多相關(guān)Python優(yōu)化技巧內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pytorch學(xué)習(xí)教程之自定義數(shù)據(jù)集

    pytorch學(xué)習(xí)教程之自定義數(shù)據(jù)集

    這篇文章主要給大家介紹了關(guān)于pytorch學(xué)習(xí)教程之自定義數(shù)據(jù)集的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python數(shù)據(jù)處理之如何選取csv文件中某幾行的數(shù)據(jù)

    python數(shù)據(jù)處理之如何選取csv文件中某幾行的數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)處理之如何選取csv文件中某幾行的數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Python 下載及安裝詳細(xì)步驟

    Python 下載及安裝詳細(xì)步驟

    這篇文章主要介紹了載及安裝Python詳細(xì)步驟,安裝python分三個步驟,具體安裝方法本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-11-11
  • python 解決pycharm運行py文件只有unittest選項的問題

    python 解決pycharm運行py文件只有unittest選項的問題

    這篇文章主要介紹了python 解決pycharm運行py文件只有unittest選項的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • python中__slots__用法實例

    python中__slots__用法實例

    這篇文章主要介紹了python中__slots__用法,實例分析了__slots__的功能與相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細(xì)教程)

    Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細(xì)教程)

    這篇文章主要介紹了Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細(xì)教程),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Python串口通信的接收與發(fā)送的實現(xiàn)

    Python串口通信的接收與發(fā)送的實現(xiàn)

    串口通信是指通過串口進(jìn)行數(shù)據(jù)傳輸?shù)囊环N通信方式,本文就來介紹一下Python串口通信的接收與發(fā)送的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Numpy之random.randint產(chǎn)生隨機整數(shù)方式

    Numpy之random.randint產(chǎn)生隨機整數(shù)方式

    這篇文章主要介紹了Numpy之random.randint產(chǎn)生隨機整數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • AI對話中的“停止生成”與“重新回答”交互邏輯和實現(xiàn)方法

    AI對話中的“停止生成”與“重新回答”交互邏輯和實現(xiàn)方法

    在AI應(yīng)用開發(fā)中,我們往往沉迷于Prompt的調(diào)優(yōu)和RAG架構(gòu)的設(shè)計,卻忽視了交互層面的工程細(xì)節(jié),實現(xiàn)“停止”與“重試”看似是前端的小功能,實則是對Web應(yīng)用狀態(tài)管理能力的考驗,從商業(yè)價值角度看,這兩個功能直接關(guān)聯(lián)成本與體驗
    2026-02-02
  • pytorch之Resize()函數(shù)具體使用詳解

    pytorch之Resize()函數(shù)具體使用詳解

    這篇文章主要介紹了pytorch之Resize()函數(shù)具體使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評論

丹巴县| 怀安县| 浦县| 洞口县| 卢龙县| 高尔夫| 东城区| 沙河市| 曲阜市| 武威市| 桃园县| 平泉县| 滁州市| 准格尔旗| 伊川县| 桦南县| 迁西县| 昌都县| 枝江市| 西华县| 山东省| 张家川| 和平区| 泰安市| 武川县| 买车| 隆安县| 莎车县| 普兰店市| 汉阴县| 灌阳县| 宁波市| 鹤壁市| 嘉善县| 嵊州市| 莲花县| 中超| 茌平县| 济南市| 全椒县| 太谷县|