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

一文帶你掌握5個(gè)鮮為人知的Python內(nèi)置函數(shù)

 更新時(shí)間:2025年10月28日 10:04:04   作者:天天進(jìn)步2015  
作為Python開發(fā)者,我們經(jīng)常使用print()、len()、range()等常見內(nèi)置函數(shù),本文將分享5個(gè)你可能不太熟悉,但絕對(duì)值得掌握的內(nèi)置函數(shù),感興趣的小伙伴可以跟隨小編一起了解下

作為Python開發(fā)者,我們經(jīng)常使用print()、len()、range()等常見內(nèi)置函數(shù)。但Python標(biāo)準(zhǔn)庫中還隱藏著許多強(qiáng)大卻被低估的內(nèi)置函數(shù),它們能讓你的代碼更簡(jiǎn)潔、更高效、更Pythonic。今天,我將分享5個(gè)你可能不太熟悉,但絕對(duì)值得掌握的內(nèi)置函數(shù)。

1.any()和all()- 邏輯判斷的利器

為什么需要它們?

當(dāng)你需要檢查一個(gè)序列中是否"存在某個(gè)條件"或"所有元素都滿足某個(gè)條件"時(shí),any()all()能讓你告別冗長(zhǎng)的循環(huán)。

基本用法

# any(): 只要有一個(gè)為True,就返回True
numbers = [0, 2, 4, 6, 8]
has_odd = any(n % 2 != 0 for n in numbers)  # False

# all(): 所有元素都為True,才返回True
all_positive = all(n > 0 for n in numbers)  # False (0不是正數(shù))

實(shí)戰(zhàn)案例

場(chǎng)景1:表單驗(yàn)證

# 傳統(tǒng)寫法
def validate_user(user):
    if not user.get('name'):
        return False
    if not user.get('email'):
        return False
    if not user.get('age'):
        return False
    return True

# 使用 all() - 簡(jiǎn)潔明了
def validate_user(user):
    required_fields = ['name', 'email', 'age']
    return all(user.get(field) for field in required_fields)

場(chǎng)景2:權(quán)限檢查

# 檢查用戶是否擁有任一管理員權(quán)限
permissions = ['read', 'write', 'delete']
admin_permissions = ['admin', 'superuser', 'delete']
is_admin = any(perm in admin_permissions for perm in permissions)

性能優(yōu)勢(shì)

any()all()支持短路求值,一旦確定結(jié)果就立即返回,不會(huì)遍歷整個(gè)序列,在處理大數(shù)據(jù)集時(shí)效率顯著提升。

2.enumerate()- 告別手動(dòng)計(jì)數(shù)

為什么需要它?

在遍歷列表時(shí),如果既需要元素值又需要索引,enumerate()能讓你擺脫笨拙的計(jì)數(shù)器。

基本用法

fruits = ['apple', 'banana', 'cherry']

# 傳統(tǒng)寫法
index = 0
for fruit in fruits:
    print(f"{index}: {fruit}")
    index += 1

# 使用 enumerate() - 優(yōu)雅簡(jiǎn)潔
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

進(jìn)階技巧

自定義起始索引

# 從1開始編號(hào)(比如顯示排名)
for rank, player in enumerate(players, start=1):
    print(f"第{rank}名: {player}")

同時(shí)獲取多個(gè)序列的索引和值

names = ['Alice', 'Bob', 'Charlie']
scores = [95, 87, 92]

for i, (name, score) in enumerate(zip(names, scores)):
    print(f"學(xué)生{i+1}: {name} - {score}分")

實(shí)戰(zhàn)案例:查找所有匹配項(xiàng)的位置

# 找出列表中所有偶數(shù)的索引
numbers = [1, 4, 7, 8, 10, 3, 6]
even_indices = [i for i, n in enumerate(numbers) if n % 2 == 0]
# 結(jié)果: [1, 3, 4, 6]

3.zip()- 并行處理多個(gè)序列

為什么需要它?

當(dāng)你需要同時(shí)遍歷多個(gè)列表,或?qū)⒍鄠€(gè)列表"打包"在一起時(shí),zip()是最佳選擇。

基本用法

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
cities = ['Beijing', 'Shanghai', 'Shenzhen']

for name, age, city in zip(names, ages, cities):
    print(f"{name}, {age}歲, 來自{city}")

強(qiáng)大功能

1. 創(chuàng)建字典

keys = ['name', 'age', 'email']
values = ['Alice', 25, 'alice@example.com']
user_dict = dict(zip(keys, values))
# {'name': 'Alice', 'age': 25, 'email': 'alice@example.com'}

2. 矩陣轉(zhuǎn)置

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
transposed = list(zip(*matrix))
# [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

3. 成對(duì)處理相鄰元素

numbers = [1, 2, 3, 4, 5]
# 計(jì)算相鄰元素的差值
differences = [b - a for a, b in zip(numbers, numbers[1:])]
# [1, 1, 1, 1]

注意事項(xiàng)

zip()會(huì)在最短序列結(jié)束時(shí)停止,如果需要填充缺失值,可以使用itertools.zip_longest()。

4.divmod()- 一次性獲取商和余數(shù)

為什么需要它?

當(dāng)你需要同時(shí)得到除法的商和余數(shù)時(shí),divmod()比分別調(diào)用//%更高效(只需要一次除法運(yùn)算)。

基本用法

quotient, remainder = divmod(17, 5)
# quotient = 3, remainder = 2

實(shí)戰(zhàn)案例

場(chǎng)景1:時(shí)間格式轉(zhuǎn)換

def seconds_to_time(seconds):
    minutes, secs = divmod(seconds, 60)
    hours, mins = divmod(minutes, 60)
    return f"{hours:02d}:{mins:02d}:{secs:02d}"

print(seconds_to_time(3665))  # "01:01:05"

場(chǎng)景2:分頁計(jì)算

def calculate_pagination(total_items, items_per_page):
    total_pages, extra = divmod(total_items, items_per_page)
    if extra > 0:
        total_pages += 1
    return total_pages

pages = calculate_pagination(97, 10)  # 10頁

場(chǎng)景3:貨幣換算

def convert_cents(total_cents):
    dollars, cents = divmod(total_cents, 100)
    return f"${dollars}.{cents:02d}"

print(convert_cents(1234))  # "$12.34"

性能對(duì)比

# 傳統(tǒng)方法(兩次運(yùn)算)
q = a // b
r = a % b

# divmod(一次運(yùn)算)
q, r = divmod(a, b)  # 更快!

5.getattr()/setattr()/hasattr()- 動(dòng)態(tài)屬性操作

為什么需要它們?

當(dāng)你需要根據(jù)字符串動(dòng)態(tài)訪問或修改對(duì)象屬性時(shí),這三個(gè)函數(shù)能讓你的代碼更靈活、更具擴(kuò)展性。

基本用法

class User:
    def __init__(self):
        self.name = "Alice"
        self.age = 25

user = User()

# getattr(): 動(dòng)態(tài)獲取屬性
name = getattr(user, 'name')  # "Alice"
# 提供默認(rèn)值避免AttributeError
email = getattr(user, 'email', 'N/A')  # "N/A"

# setattr(): 動(dòng)態(tài)設(shè)置屬性
setattr(user, 'email', 'alice@example.com')

# hasattr(): 檢查屬性是否存在
if hasattr(user, 'phone'):
    print(user.phone)

實(shí)戰(zhàn)案例

場(chǎng)景1:配置管理

class Config:
    def __init__(self):
        self.debug = False
        self.database = 'sqlite'
        self.port = 8000

def update_config(config, updates):
    """根據(jù)字典批量更新配置"""
    for key, value in updates.items():
        if hasattr(config, key):
            setattr(config, key, value)
        else:
            print(f"警告: 未知配置項(xiàng) {key}")

config = Config()
update_config(config, {'debug': True, 'port': 9000, 'unknown': 'value'})

場(chǎng)景2:表單數(shù)據(jù)映射

class Product:
    def __init__(self, **kwargs):
        # 動(dòng)態(tài)設(shè)置所有傳入的屬性
        for key, value in kwargs.items():
            setattr(self, key, value)

product = Product(name="Laptop", price=999, stock=50)
print(product.name)  # "Laptop"

場(chǎng)景3:API響應(yīng)處理

def safe_get_nested(obj, path, default=None):
    """安全地獲取嵌套屬性,例如 'user.profile.email'"""
    keys = path.split('.')
    for key in keys:
        if hasattr(obj, key):
            obj = getattr(obj, key)
        else:
            return default
    return obj

# 使用示例
value = safe_get_nested(user, 'profile.settings.theme', 'light')

場(chǎng)景4:通用數(shù)據(jù)導(dǎo)出

def export_to_dict(obj, fields):
    """將對(duì)象的指定字段導(dǎo)出為字典"""
    return {
        field: getattr(obj, field, None) 
        for field in fields
    }

user_data = export_to_dict(user, ['name', 'age', 'email'])

總結(jié)

這5個(gè)內(nèi)置函數(shù)看似簡(jiǎn)單,卻能在實(shí)際開發(fā)中顯著提升代碼質(zhì)量:

函數(shù)核心優(yōu)勢(shì)適用場(chǎng)景
any() / all()短路求值,簡(jiǎn)化邏輯判斷數(shù)據(jù)驗(yàn)證、權(quán)限檢查
enumerate()同時(shí)獲取索引和值需要位置信息的遍歷
zip()并行處理多個(gè)序列數(shù)據(jù)合并、矩陣操作
divmod()一次運(yùn)算得到商和余數(shù)時(shí)間轉(zhuǎn)換、分頁計(jì)算
getattr() 系列動(dòng)態(tài)屬性操作配置管理、通用處理

最佳實(shí)踐建議:

  • 可讀性優(yōu)先:雖然這些函數(shù)能讓代碼更簡(jiǎn)潔,但不要為了炫技而犧牲可讀性
  • 性能考量:在處理大數(shù)據(jù)集時(shí),這些函數(shù)的性能優(yōu)勢(shì)會(huì)更加明顯
  • 組合使用:這些函數(shù)可以互相配合,創(chuàng)造更強(qiáng)大的功能
  • 了解限制:例如zip()在不等長(zhǎng)序列的行為,getattr()需要處理不存在屬性的情況

掌握這些函數(shù),你的Python代碼將更加Pythonic、高效和優(yōu)雅?,F(xiàn)在就去試試吧!

到此這篇關(guān)于一文帶你掌握5個(gè)鮮為人知的Python內(nèi)置函數(shù)的文章就介紹到這了,更多相關(guān)Python內(nèi)置函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python Cartopy的基礎(chǔ)使用詳解

    python Cartopy的基礎(chǔ)使用詳解

    這篇文章主要介紹了python Cartopy的基礎(chǔ)使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python如何導(dǎo)出微信公眾號(hào)文章方法詳解

    python如何導(dǎo)出微信公眾號(hào)文章方法詳解

    這篇文章主要介紹了python如何導(dǎo)出微信公眾號(hào)文章方法詳解,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • python類的繼承鏈實(shí)例分析

    python類的繼承鏈實(shí)例分析

    在本篇文章里小編給大家整理了一篇關(guān)于python類的繼承鏈分析內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • python 求一個(gè)列表中所有元素的乘積實(shí)例

    python 求一個(gè)列表中所有元素的乘積實(shí)例

    今天小編就為大家分享一篇python 求一個(gè)列表中所有元素的乘積實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • numpy array找出符合條件的數(shù)并賦值的示例代碼

    numpy array找出符合條件的數(shù)并賦值的示例代碼

    本文主要介紹了numpy array找出符合條件的數(shù)并賦值的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 基于Python共軛梯度法與最速下降法之間的對(duì)比

    基于Python共軛梯度法與最速下降法之間的對(duì)比

    這篇文章主要介紹了基于Python共軛梯度法與最速下降法之間的對(duì)比,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Pycharm pyuic5實(shí)現(xiàn)將ui文件轉(zhuǎn)為py文件,讓UI界面成功顯示

    Pycharm pyuic5實(shí)現(xiàn)將ui文件轉(zhuǎn)為py文件,讓UI界面成功顯示

    這篇文章主要介紹了Pycharm pyuic5實(shí)現(xiàn)將ui文件轉(zhuǎn)為py文件,讓UI界面成功顯示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python多線程模塊Threading用法示例小結(jié)

    Python多線程模塊Threading用法示例小結(jié)

    這篇文章主要介紹了Python多線程模塊Threading用法,結(jié)合實(shí)例形式分析了Python多線程模塊Threading相關(guān)概念、原理、進(jìn)程與線程的區(qū)別及使用技巧,需要的朋友可以參考下
    2019-11-11
  • 使用PyGame顯示圖像的四種方案實(shí)例代碼

    使用PyGame顯示圖像的四種方案實(shí)例代碼

    由于前面學(xué)習(xí)了使用pygame的簡(jiǎn)單操作,現(xiàn)在學(xué)習(xí)當(dāng)前的pygame怎么加載圖片,下面這篇文章主要給大家介紹了關(guān)于使用PyGame顯示圖像的四種方案,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Python?Matplotlib通過plt.subplots創(chuàng)建子繪圖

    Python?Matplotlib通過plt.subplots創(chuàng)建子繪圖

    這篇文章主要介紹了Python?Matplotlib通過plt.subplots創(chuàng)建子繪圖,plt.subplots調(diào)用后將會(huì)產(chǎn)生一個(gè)圖表和默認(rèn)網(wǎng)格,與此同時(shí)提供一個(gè)合理的控制策略布局子繪圖,更多相關(guān)需要的朋友可以參考下面文章內(nèi)容
    2022-07-07

最新評(píng)論

南部县| 泗洪县| 唐山市| 禹州市| 大方县| 汝城县| 丰都县| 漯河市| 邹平县| 峡江县| 闻喜县| 赞皇县| 且末县| 保定市| 临澧县| 孙吴县| 唐山市| 华池县| 于田县| 清水县| 永和县| 佛教| 高清| 阿拉尔市| 南安市| 阳曲县| 米脂县| 隆昌县| 威海市| 香港| 高淳县| 临夏县| 扬州市| 龙胜| 毕节市| 通榆县| 海丰县| 维西| 临桂县| 土默特左旗| 静宁县|