偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Python 的隱藏武庫:十個(gè)能讓你代碼效率飆升的內(nèi)置函數(shù)

開發(fā)
本文將為你揭示十個(gè)內(nèi)置函數(shù)的精妙用法。它們看似平平無奇,卻能在關(guān)鍵時(shí)刻,以最優(yōu)雅、最高效的方式解決復(fù)雜問題,讓你的代碼可讀性、健壯性和專業(yè)度瞬間提升一個(gè)檔次。

Python的魅力,不僅在于其簡潔的語法,更在于其“開箱即用”的強(qiáng)大能力。它的內(nèi)置函數(shù)庫,就像一個(gè)被許多開發(fā)者忽略的武庫,里面藏著無數(shù)削鐵如泥的“神兵利器”。

本文將為你揭示10個(gè)內(nèi)置函數(shù)的精妙用法。它們看似平平無奇,卻能在關(guān)鍵時(shí)刻,以最優(yōu)雅、最高效的方式解決復(fù)雜問題,讓你的代碼可讀性、健壯性和專業(yè)度瞬間提升一個(gè)檔次。

妙用一:zip() - 不只是并行遍歷,更是數(shù)據(jù)重塑的利器

zip()最廣為人知的用法是將多個(gè)可迭代對(duì)象“打包”起來,進(jìn)行并行遍歷。但這僅僅是它能力的冰山一角。

(1) 場景痛點(diǎn)

如何快速地將兩個(gè)列表(一個(gè)存鍵,一個(gè)存值)合并成一個(gè)字典?傳統(tǒng)做法需要循環(huán):

keys = ['name', 'age', 'city']
values = ['Alice', 30, 'New York']
profile = {}
for i in range(len(keys)):
    profile[keys[i]] = values[i]

(2) zip()的妙解

zip()與dict()構(gòu)造函數(shù)的完美結(jié)合,一行代碼即可解決:

keys = ['name', 'age', 'city']
values = ['Alice', 30, 'New York']
profile = dict(zip(keys, values))
# profile -> {'name': 'Alice', 'age': 30, 'city': 'New York'}

代碼簡潔,意圖明確。

(3) 技術(shù)升華:矩陣轉(zhuǎn)置

zip()最令人驚艷的技巧之一,是利用參數(shù)解包*來實(shí)現(xiàn)矩陣(二維列表)的轉(zhuǎn)置:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
transposed_matrix = [list(row) for row in zip(*matrix)]
# transposed_matrix -> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

這一行代碼背后,是zip(*matrix)將matrix的每一行解包成獨(dú)立的參數(shù)傳給zip,zip再將這些行的第一個(gè)、第二個(gè)、第三個(gè)元素分別聚合,從而實(shí)現(xiàn)了轉(zhuǎn)置。

妙用二:enumerate() - 告別手動(dòng)索引,擁抱優(yōu)雅循環(huán)

在循環(huán)中需要同時(shí)獲取元素的索引和值,是極其常見的需求。

(1) 場景痛點(diǎn)

C語言風(fēng)格的寫法是維護(hù)一個(gè)外部計(jì)數(shù)器:

items = ['apple', 'banana', 'cherry']
index = 0
for item in items:
    print(f"Index: {index}, Value: {item}")
    index += 1

這種寫法不僅冗余,而且容易出錯(cuò)(比如忘記index += 1)。

(2) enumerate()的妙解

enumerate()在每次迭代時(shí),會(huì)同時(shí)返回索引和值,讓代碼變得干凈利落:

items = ['apple', 'banana', 'cherry']
for index, item in enumerate(items):
    print(f"Index: {index}, Value: {item}")

它還支持一個(gè)可選的start參數(shù),用于指定索引的起始值,如enumerate(items, start=1)。

妙用三:sorted() - key參數(shù)是釋放其全部力量的鑰匙

sorted()可以對(duì)任何可迭代對(duì)象進(jìn)行排序,但其真正的威力在于key參數(shù)的運(yùn)用。

(1) 場景痛點(diǎn)

如何對(duì)一個(gè)包含字典的列表,按字典中某個(gè)特定的鍵(如'age')進(jìn)行排序?

users = [
    {'name': 'Bob', 'age': 25},
    {'name': 'Alice', 'age': 30},
    {'name': 'Charlie', 'age': 22}
]
# 傳統(tǒng)方法可能需要復(fù)雜的自定義排序函數(shù)

(2) key參數(shù)的妙解

key參數(shù)接收一個(gè)函數(shù),這個(gè)函數(shù)會(huì)在排序前作用于每個(gè)元素,sorted()會(huì)根據(jù)該函數(shù)的返回值來進(jìn)行排序。lambda匿名函數(shù)是它的天作之合。

# 按年齡升序排序
sorted_users = sorted(users, key=lambda user: user['age'])

# 按名字長度降序排序
sorted_by_name_len = sorted(users, key=lambda user: len(user['name']), reverse=True)

key參數(shù)讓你能夠以任何你能想到的邏輯,對(duì)復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)行精準(zhǔn)排序。

妙用四:map() & filter() - 函數(shù)式編程的優(yōu)雅

這兩個(gè)函數(shù)是Python中函數(shù)式編程思想的體現(xiàn),能用極簡的代碼完成數(shù)據(jù)轉(zhuǎn)換和篩選。

(1) 場景痛點(diǎn)

將一個(gè)字符串列表全部轉(zhuǎn)換為整數(shù),或者篩選出列表中的所有正數(shù)。

# 轉(zhuǎn)換
str_numbers = ['1', '2', '3']
int_numbers = []
for s in str_numbers:
    int_numbers.append(int(s))

# 篩選
numbers = [-1, 0, 1, 2, -5]
positives = []
for n in numbers:
    if n > 0:
        positives.append(n)

(2) map()與filter()的妙解

  • map(function, iterable):將函數(shù)應(yīng)用于可迭代對(duì)象的每個(gè)元素。
  • filter(function, iterable):根據(jù)函數(shù)返回的True/False來過濾元素。
# 轉(zhuǎn)換
str_numbers = ['1', '2', '3']
int_numbers = list(map(int, str_numbers)) # -> [1, 2, 3]

# 篩選
numbers = [-1, 0, 1, 2, -5]
positives = list(filter(lambda n: n > 0, numbers)) # -> [1, 2]```
注意:`map`和`filter`在Python 3中返回的是迭代器,這在處理大數(shù)據(jù)集時(shí)非常節(jié)省內(nèi)存,需要時(shí)再用`list()`將其物化。

## **妙用五:any() & all() - 讓條件判斷代碼更具可讀性**

當(dāng)需要判斷一個(gè)序列中是否存在/全部滿足某個(gè)條件時(shí),`any()`和`all()`提供了最直觀的表達(dá)方式。

### **場景痛點(diǎn)**
檢查一個(gè)列表中是否至少有一個(gè)負(fù)數(shù)。
```python
numbers = [1, 2, -3, 4]
has_negative = False
for num in numbers:
    if num < 0:
        has_negative = True
        break

代碼邏輯需要通過一個(gè)布爾標(biāo)志位來傳遞,不夠直接。

(3) any()與all()的妙解

  • any(iterable):如果iterable中至少有一個(gè)元素為True,則返回True。
  • all(iterable):如果iterable中所有元素都為True,則返回True。
numbers = [1, 2, -3, 4]
# 結(jié)合生成器表達(dá)式,代碼極簡
has_negative = any(num < 0 for num in numbers) # -> True
all_positive = all(num > 0 for num in numbers) # -> False

其他五個(gè)不容錯(cuò)過的妙用

妙用六:getattr() - 動(dòng)態(tài)派發(fā)的利器

當(dāng)你需要根據(jù)一個(gè)字符串動(dòng)態(tài)地調(diào)用一個(gè)對(duì)象的屬性或方法時(shí),getattr()是比if/elif鏈更優(yōu)雅的解決方案。

class Calculator:
    def add(self, a, b): return a + b
    def subtract(self, a, b): return a - b

calc = Calculator()
operation = "add"
result = getattr(calc, operation)(10, 5) # 動(dòng)態(tài)調(diào)用 calc.add(10, 5)

妙用七:isinstance() - 健壯的類型檢查

相比于type(obj) == SomeClass,isinstance(obj, SomeClass)是更健壯的選擇,因?yàn)樗鼤?huì)考慮繼承關(guān)系。

class Animal: pass
class Dog(Animal): pass

my_dog = Dog()
print(type(my_dog) == Animal)       # -> False (過于嚴(yán)格)
print(isinstance(my_dog, Animal)) # -> True (正確,狗是一種動(dòng)物)

妙用八:divmod() - 合二為一的整數(shù)除法

divmod(a, b)同時(shí)返回(a // b, a % b),即商和余數(shù)。這比分開計(jì)算兩次效率更高,代碼也更清晰。

seconds = 135
minutes, sec = divmod(seconds, 60) # -> (2, 15)

妙用九:callable() - 安全地調(diào)用“可能存在”的函數(shù)

在編寫接受回調(diào)函數(shù)作為參數(shù)的高階函數(shù)時(shí),使用callable()來檢查傳入的參數(shù)是否真的可以被調(diào)用,是保證代碼健壯性的好習(xí)慣。

def execute_callback(callback, *args):
    if callable(callback):
        callback(*args)
    else:
        print("Provided callback is not a function.")

妙用十:globals() & locals() - 強(qiáng)大的內(nèi)省與調(diào)試工具

globals()和locals()分別返回一個(gè)表示全局和局部符號(hào)表(變量)的字典。它們?cè)谡{(diào)試、模板引擎或動(dòng)態(tài)創(chuàng)建代碼等高級(jí)場景中非常有用。

x = 10
def my_func():
    y = 20
    print("Locals:", locals()) # -> {'y': 20}
    print("Global 'x':", globals()['x']) # -> 10

本文所列舉的10個(gè)函數(shù),僅僅是Python內(nèi)置武庫的冰山一角。它們的精妙之處,在于將常見的編程模式封裝成了簡單、高效、可讀的接口。

責(zé)任編輯:趙寧寧 來源: Python數(shù)智工坊
相關(guān)推薦

2021-09-15 09:20:37

Python函數(shù)代碼

2023-12-22 15:44:43

2024-01-24 13:14:00

Python內(nèi)置函數(shù)工具

2025-06-30 02:44:00

SpringBoot開發(fā)優(yōu)化

2023-11-29 07:04:19

Git工作效率

2023-05-24 10:24:56

代碼Python

2022-08-27 15:03:43

Python損失函數(shù)算法

2024-06-26 13:11:40

2025-06-25 10:02:55

2024-10-17 16:45:46

Python內(nèi)置函數(shù)

2023-05-16 06:50:50

prompt郵件語法

2024-07-18 15:08:27

2022-08-19 16:09:08

Python損失函數(shù)算法

2022-06-06 16:40:20

工作流程效率管理

2025-07-28 06:49:48

Python開發(fā)圖像處理

2024-11-25 16:08:57

Python代碼代碼調(diào)試

2024-05-28 14:36:00

Python開發(fā)

2024-05-21 12:18:57

Python代碼重構(gòu)

2021-09-19 22:51:49

iPhone手機(jī)iOS

2021-10-15 10:04:37

云計(jì)算安全云服務(wù)
點(diǎn)贊
收藏

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