Python 函數實戰指南:提升編程效率的實用技巧

在 Python 編程的世界里,函數是構建高效代碼的基石。掌握實用的函數技巧不僅能讓代碼更加簡潔優雅,還能顯著提升開發效率。我們一起將結合實際案例,深入剖析 Python 函數的使用技巧,幫助開發者在日常開發中事半功倍。

?

?

一、基礎函數的進階用法

?

1. ?len()? 函數的擴展應用

?

?len()? 函數不僅可以獲取列表、字符串的長度,在實際開發中,還可以用于判斷數據是否為空。例如,在處理用戶輸入時,檢查輸入的字符串是否為空:

?

user_input = input("請輸入內容:")

if len(user_input) == 0:

? ? print("輸入不能為空!")

?

?

此外,在處理嵌套數據結構時,?len()? 函數也能派上用場。比如,計算二維列表中每行的元素個數:

?

matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]

for row in matrix:

? ? print(len(row))

?

?

2. ?sorted()? 函數的復雜排序

?

?sorted()? 函數通過 ?key? 參數可以實現復雜的排序邏輯。在電商系統中,對商品列表按照價格和銷量進行綜合排序:

?

products = [

? ? {'name': 'Product A', 'price': 100,'sales': 10},

? ? {'name': 'Product B', 'price': 80,'sales': 15},

? ? {'name': 'Product C', 'price': 100,'sales': 20}

]

# 先按價格升序,價格相同再按銷量降序

sorted_products = sorted(products, key=lambda x: (x['price'], -x['sales']))

print(sorted_products)

?

?

二、迭代相關函數的實戰應用

?

1. ?range()? 函數與列表推導式結合

?

?range()? 函數常與列表推導式結合,快速生成特定規律的列表。例如,生成 1 到 100 中所有偶數的平方:

?

even_squares = [x ** 2 for x in range(2, 101, 2)]

print(even_squares)

?

?

2. ?enumerate()? 函數在列表修改中的應用

?

在遍歷列表并修改元素時,?enumerate()? 函數能方便地獲取元素索引。例如,將列表中所有奇數加 1:

?

nums = [1, 2, 3, 4, 5]

for index, num in enumerate(nums):

? ? if num % 2 == 1:

? ? ? ? nums[index] = num + 1

print(nums)

?

?

3. ?zip()? 函數在數據合并中的應用

?

在處理多個相關數據列表時,?zip()? 函數可以將它們合并。例如,將學生姓名和成績合并成字典:

?

names = ['Alice', 'Bob', 'Charlie']

scores = [85, 90, 78]

student_scores = dict(zip(names, scores))

print(student_scores)

?

?

三、高階函數的實戰技巧

?

1. ?map()? 函數批量數據處理

?

?map()? 函數在數據清洗和轉換中非常實用。例如,將列表中的字符串轉換為整數:

?

str_nums = ['1', '2', '3', '4']

int_nums = list(map(int, str_nums))

print(int_nums)

?

?

在處理文件讀取時,?map()? 函數可以快速處理每一行數據。比如,讀取文件中的整數數據:

?

with open('data.txt', 'r') as file:

? ? data = list(map(int, file.readlines()))

print(data)

?

?

2. ?filter()? 函數數據篩選

?

在日志分析中,?filter()? 函數可以篩選出特定級別的日志。假設日志數據是一個字典列表,包含 ?level? 和 ?message? 字段:

?

logs = [

? ? {'level': 'info','message': '程序啟動'},

? ? {'level': 'error','message': '數據庫連接失敗'},

? ? {'level': 'info','message': '數據加載完成'}

]

error_logs = list(filter(lambda x: x['level'] == 'error', logs))

print(error_logs)

?

?

3. ?reduce()? 函數累積計算

?

?reduce()? 函數在計算累積結果時非常高效。例如,計算列表中所有元素的乘積:

?

from functools import reduce

nums = [1, 2, 3, 4, 5]

product = reduce(lambda x, y: x * y, nums)

print(product)

?

?

在字符串處理中,?reduce()? 函數可以將列表中的字符串合并:

?

words = ['Hello', 'world', '!']

sentence = reduce(lambda x, y: x + y, words)

print(sentence)

?

?

四、自定義函數的優化技巧

?

1. 默認參數的合理使用

?

在定義函數時,合理設置默認參數可以提高函數的靈活性。例如,定義一個計算圓面積的函數,默認半徑為 1:

?

def circle_area(radius=1):

? ? return 3.14 * radius ** 2

print(circle_area())

print(circle_area(5))

?

?

2. 可變參數的應用

?

?*args? 和 ?**kwargs? 可以讓函數接受任意數量的參數。例如,定義一個計算多個數總和的函數:

?

def sum_numbers(*args):

? ? return sum(args)

print(sum_numbers(1, 2, 3))

print(sum_numbers(10, 20, 30, 40))

?

?

3. 函數文檔字符串的編寫

?

編寫清晰的函數文檔字符串可以提高代碼的可讀性和可維護性。例如:

?

def add_numbers(a, b):

? ? """

? ? 該函數用于計算兩個數的和。

?

? ? :param a: 第一個數

? ? :param b: 第二個數

? ? :return: 兩個數的和

? ? """

? ? return a + b

?

?

五、結掌握 Python 函數的實用技巧是提升編程效率的關鍵。通過合理運用基礎函數、迭代函數、高階函數以及優化自定義函數,開發者可以編寫出更加簡潔、高效的代碼。在實際開發中,不斷實踐和總結這些技巧,將有助于我們更好地應對各種編程挑戰,提高開發效率和代碼質量。希望我們分享的技巧能夠對大家的 Python 編程之路有所幫助。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85021.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85021.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OPenCV CUDA模塊圖形變換----構建透視變換映射表函數buildWarpPerspectiveMaps()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該函數用于構建一個透視變換(Perspective Transform)的映射表(xmap / ymap),可用于后…

tcping工具使用指南

tcping是一個用于測試TCP端口連通性的工具,它類似于傳統的ping命令,但工作在傳輸層(TCP)而不是網絡層(ICMP)。 基本功能 tcping的主要功能包括: 測試目標主機特定TCP端口是否開放 測量TCP連接建立時間 統計丟包率和響應時間 安裝方法 …

CSP 2024 入門級第一輪(88.5)

4. 以下哪個序列對應數字 00 至 88 的 44 位二進制格雷碼(Gray code)?( ) A. 0000, 0001, 0011, 0010, 0110, 0111, 0101, 1000 B. 0000, 0001, 0011, 0010, 0110, 0111, 0100, 0101 C. 0000, 0001, 0011, 0010, …

三菱FX-5U系列入門到精通

第2章 中間繼電器 繼電器工作模式:線圈得電,常開觸點閉合,常閉觸點斷開。總結:中間繼電器線圈電壓分為:24VDC 110VAC 220VAC 380VAC PLC控制柜中常用的是24VDC比較多,而動力電柜中或者控制風機水泵的電柜中220VAC比較多。大部分選擇24VDC,然后用觸點控制220或者380,說白…

簡歷模板1——王明 | 高級數據挖掘工程師 | 5年經驗

王明 | 高級數據挖掘工程師 | 5年經驗 📱 (86) 189-xxxx-xxxx | 📧 wangmingemail.com | 📍 深圳市 💻 GitHub | 👔 LinkedIn 💼 工作經歷 ?科技前沿集團 | 高級數據挖掘工程師 📅 2021.06 …

【JVM】- 內存模式

Java內存模型:JMM(Java Memory Model),定義了一套在多線程環境下,讀寫共享數據(成員變量、數組)時,對數據的可見性,有序性和原子性的規則和保障。 原子性 問題分析 【問…

AQS獨占模式——資源獲取和釋放源碼分析

AQS資源獲取(獨占模式) Node節點類 static final class Node {//標記當前節點的線程在共享模式下等待。static final Node SHARED new Node();//標記當前節點的線程在獨占模式下等待。static final Node EXCLUSIVE null;//waitStatus的值&#xff0c…

壓測過程中TPS上不去可能是什么原因

進行性能分析 接口沒有報錯或者錯誤率低于1%,繼續增加并發還是一樣,這個時候需要考慮幾點 1.是否觸發限流,比如waf、Nginx等情況,有沒有一些限流的情況,如果觸發了限流,請求是沒有達到后端的,所…

Golang 解大整數乘法

文章目錄 Golang 解大整數乘法問題描述:LeetCode 43. 字符串相乘思路Golang 代碼 Golang 解大整數乘法 在初學 C 語言的時候,我們一定接觸過“字符串相加”或“字符串相乘”之類的問題,對于初學者而言,這類問題的難度一般來說是比…

web3-區塊鏈的技術安全/經濟安全以及去杠桿螺旋(經濟穩定)

web3-區塊鏈的技術安全/經濟安全以及去杠桿螺旋(經濟穩定) 三個基本設計問題 技術安全 在技術結構中對其進行原子級的、瞬時利用(無風險) 無風險,因為攻擊者的結果還是二進制的: 只會是攻擊成功 獲利或…

Java多線程通信:wait/notify與sleep的深度剖析(時序圖詳解)

在Java多線程編程中,線程間的通信與協作是實現復雜并發邏輯的關鍵。wait()、notify()以及sleep()方法作為線程控制的重要工具,有著各自獨特的使用場景與規則。本文將深入探討wait()和notify()的協作機制,以及sleep()的阻塞特性,同…

關于使用EasyExcel、 Vue3實現導入導出功能

后端部分: 其中查詢數據的服務省略 1、引用 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.3</version></dependency> 2、controller package com.rs.cphs.sys.controller;i…

機器學習中的數據準備關鍵技術

有效的數據準備對于構建強大的機器學習模型至關重要。本文檔總結并闡述了為監督和非監督學習任務準備數據的關鍵技術。 1. 理解數據類型 有兩種數據類型。定性數據描述對象的特征&#xff0c;而定量數據描述對象的數量。 定性&#xff08;分類&#xff09;數據 名義&#x…

深度學習——基于卷積神經網絡實現食物圖像分類【3】(保存最優模型)

文章目錄 引言一、項目概述二、環境配置三、數據預處理3.1 數據轉換設置3.2 數據集準備 四、自定義數據集類五、CNN模型架構六、訓練與評估流程6.1 訓練函數6.2 評估與模型保存 七、完整訓練流程八、模型保存與加載8.1 保存模型8.2 加載模型 九、優化建議十、常見問題解決十一、…

《棒球百科》棒球怎么玩·棒球9號位

用最簡單的方式介紹棒球的核心玩法和規則&#xff0c;完全零基礎也能看懂&#xff1a; 一句話目標 進攻方&#xff1a;用球棒把球打飛&#xff0c;然后拼命跑完4個壘包&#xff08;逆時針繞一圈&#xff09;得分。 防守方&#xff1a;想盡辦法讓進攻方出局&#xff0c;阻止他…

語言模型是怎么工作的?通俗版原理解讀!

大模型為什么能聊天、寫代碼、懂醫學&#xff1f; 我們從四個關鍵模塊&#xff0c;一步步拆開講清楚 &#x1f447; ? 模塊一&#xff1a;模型的“本事”從哪來&#xff1f;靠訓練數據 別幻想它有意識&#xff0c;它的能力&#xff0c;全是“喂”出來的&#xff1a; 吃過成千…

nrf52811墨水屏edp_service.c文件學習

on_connect函數 /**brief Function for handling the ref BLE_GAP_EVT_CONNECTED event from the S110 SoftDevice.** param[in] p_epd EPD Service structure.* param[in] p_ble_evt Pointer to the event received from BLE stack.*/ static void on_connect(ble_epd_t …

Nginx-2 詳解處理 Http 請求

Nginx-2 詳解處理 Http 請求 Nginx 作為當今最流行的開源 Web 服務器之一&#xff0c;以其高性能、高穩定性和豐富的功能而聞名。在處理 HTTP請求 的過程中&#xff0c;Nginx 采用了模塊化的設計&#xff0c;將整個請求處理流程劃分為若干個階段&#xff0c;每個階段都可以由特…

40-Oracle 23 ai Bigfile~Smallfile-Basicfile~Securefile矩陣對比

小伙伴們是不是在文件選擇上還默認給建文件4G/個么&#xff0c;在oracle每個版本上系統默認屬性是什么&#xff0c;選擇困難癥了沒&#xff0c;一起一次性文件存儲和默認屬性看透。 基于Oracle歷代在存儲架構的技術演進分析&#xff0c;結合版本升級和23ai新特性&#xff0c;一…

【一】零基礎--分層強化學習概覽

分層強化學習&#xff08;Hierarchical Reinforcement Learning, HRL&#xff09;最早一般視為1993 年封建強化學習的提出. 一、HL的基礎理論 1.1 MDP MDP&#xff08;馬爾可夫決策過程&#xff09;&#xff1a;MDP是一種用于建模序列決策問題的框架&#xff0c;包含狀態&am…