【Python快速上手(三十三)】- Python operator 模塊

目錄

  • Python快速上手(三十三)- Python operator 模塊
    • Python operator 模塊詳解
      • 1. 模塊簡介
      • 2. 算術運算符函數
      • 3. 比較運算符函數
      • 4. 位運算符函數
      • 5. 序列操作函數
      • 6. 方法調用函數
      • 7. 操作函數對象
      • 8. 實際應用案例
      • 9. 小結

Python快速上手(三十三)- Python operator 模塊

Python operator 模塊詳解

operator 模塊提供了一系列函數對應于Python內部運算符。這些函數可用于代替運算符在函數式編程或需要動態指定操作的場景中使用。

1. 模塊簡介

operator 模塊中的函數對應于Python的內建運算符,例如加法、減法、乘法等。通過這些函數,可以將運算符作為參數傳遞給其他函數,這對于需要高階函數或動態運算的場景非常有用。

import operator

2. 算術運算符函數

2.1 加法

import operatorprint(operator.add(2, 3))  # 輸出:5

2.2 減法

print(operator.sub(5, 3))  # 輸出:2

2.3 乘法

print(operator.mul(2, 3))  # 輸出:6

2.4 真除法

print(operator.truediv(7, 2))  # 輸出:3.5

2.5 地板除法

print(operator.floordiv(7, 2))  # 輸出:3

2.6 冪運算

print(operator.pow(2, 3))  # 輸出:8

2.7 取模

print(operator.mod(7, 3))  # 輸出:1

2.8 一元運算
正號運算

print(operator.pos(5))  # 輸出:5

負號運算

print(operator.neg(5))  # 輸出:-5

3. 比較運算符函數

3.1 等于

print(operator.eq(2, 2))  # 輸出:True
print(operator.eq(2, 3))  # 輸出:False

3.2 不等于

print(operator.ne(2, 2))  # 輸出:False
print(operator.ne(2, 3))  # 輸出:True

3.3 小于

print(operator.lt(2, 3))  # 輸出:True
print(operator.lt(3, 2))  # 輸出:False

3.4 小于等于

print(operator.le(2, 3))  # 輸出:True
print(operator.le(3, 3))  # 輸出:True

3.5 大于

print(operator.gt(3, 2))  # 輸出:True
print(operator.gt(2, 3))  # 輸出:False

3.6 大于等于

print(operator.ge(3, 2))  # 輸出:True
print(operator.ge(3, 3))  # 輸出:True

4. 位運算符函數

4.1 按位與

print(operator.and_(5, 3))  # 輸出:1

4.2 按位或

print(operator.or_(5, 3))  # 輸出:7

4.3 按位異或

print(operator.xor(5, 3))  # 輸出:6

4.4 按位取反

print(operator.invert(5))  # 輸出:-6

4.5 左移

print(operator.lshift(5, 2))  # 輸出:20

4.6 右移

print(operator.rshift(5, 2))  # 輸出:1

5. 序列操作函數

5.1 獲取元素

a = [1, 2, 3, 4, 5]
print(operator.getitem(a, 2))  # 輸出:3

5.2 設置元素

a = [1, 2, 3, 4, 5]
operator.setitem(a, 2, 10)
print(a)  # 輸出:[1, 2, 10, 4, 5]

5.3 刪除元素

a = [1, 2, 3, 4, 5]
operator.delitem(a, 2)
print(a)  # 輸出:[1, 2, 4, 5]

5.4 獲取屬性

class Test:def __init__(self):self.value = 42obj = Test()
print(operator.attrgetter('value')(obj))  # 輸出:42

5.5 設置屬性

class Test:def __init__(self):self.value = 42obj = Test()
operator.attrgetter('value')(obj)
print(obj.value)  # 輸出:42

5.6 刪除屬性

class Test:def __init__(self):self.value = 42obj = Test()
operator.delattr(obj, 'value')

5.7 獲取多個屬性

class Test:def __init__(self):self.value1 = 42self.value2 = 24obj = Test()
print(operator.attrgetter('value1', 'value2')(obj))  # 輸出:(42, 24)

6. 方法調用函數

6.1 調用方法

class Test:def method(self, a, b):return a + bobj = Test()
print(operator.methodcaller('method', 2, 3)(obj))  # 輸出:5

6.2 不帶參數的方法

class Test:def method(self):return 42obj = Test()
print(operator.methodcaller('method')(obj))  # 輸出:42

7. 操作函數對象

7.1 attrgetter
獲取對象的屬性:

class Person:def __init__(self, name, age):self.name = nameself.age = agep = Person('Alice', 30)
get_name = operator.attrgetter('name')
print(get_name(p))  # 輸出:Alice

7.2 itemgetter
獲取序列中的元素:

data = [1, 2, 3, 4, 5]
get_first = operator.itemgetter(0)
print(get_first(data))  # 輸出:1

獲取多個元素:

get_first_and_last = operator.itemgetter(0, -1)
print(get_first_and_last(data))  # 輸出:(1, 5)

7.3 methodcaller
調用對象的方法:

class Person:def greet(self, greeting):return f"{greeting}, I am {self.name}"p = Person('Alice', 30)
greet = operator.methodcaller('greet', 'Hello')
print(greet(p))  # 輸出:Hello, I am Alice

8. 實際應用案例

8.1 使用運算符函數進行排序
假設有一個包含元組的列表,希望根據元組的第二個元素排序:

data = [('a', 3), ('b', 1), ('c', 2)]
sorted_data = sorted(data, key=operator.itemgetter(1))
print(sorted_data)  # 輸出:[('b', 1), ('c', 2), ('a', 3)]

8.2 高階函數與運算符函數結合
將運算符函數與 map 和 reduce 等高階函數結合使用:

from functools import reduce# 列表元素相乘
data = [1, 2, 3, 4, 5]
result = reduce(operator.mul, data)
print(result)  # 輸出:120# 列表元素相加
result = map(operator.add, data, data)
print(list(result))  # 輸出:[2, 4, 6, 8, 10]

8.3 使用 methodcaller 實現批量方法調用
批量調用對象的方法:

class Person:def __init__(self, name):self.name = namedef greet(self):print(f"Hello, I am {self.name}")people = [Person('Alice'), Person('Bob'), Person('Charlie')]
greet_all = operator.methodcaller('greet')
for person in people:greet_all(person)

8.4 使用 attrgetter 實現動態屬性訪問
動態訪問對象的屬性:

class Person:def __init__(self, name, age):self.name = nameself.age = agepeople = [Person('Alice', 30), Person('Bob', 25), Person('Charlie', 35)]
names = list(map(operator.attrgetter('name'), people))
print(names)  # 輸出:['Alice', 'Bob', 'Charlie']

9. 小結

operator 模塊在 Python 中提供了豐富的函數來替代內置運算符,從而使得運算符可以像函數一樣被傳遞和調用。通過本文的介紹,我們詳細了解了 operator 模塊的常見函數和實際應用,包括算術運算符、比較運算符、位運算符、序列操作函數、方法調用函數以及操作函數對象的用法。掌握 operator 模塊的使用方法,可以使代碼更加簡潔、高效,并在需要動態指定操作或進行高階函數編程時提供極大的便利。

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

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

相關文章

Java基礎入門day57

day57 JSP、Servlet&#xff0c;Java bean和JDBC整合項目 index.jsp頁面 <% page contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %> <!DOCTYPE html> <html> <head><title>JSP - Hello World</title> …

CSS 媒體查詢 響應式開發

介紹 媒體查詢&#xff08;Media Queries&#xff09;是CSS3的技術&#xff0c;可以根據設備的特性&#xff08;如屏幕寬度、高度、方向等&#xff09;來應用不同的樣式規則。媒體查詢可以使網頁在不同設備上呈現不同的樣式&#xff0c;以實現響應式設計。 語法 media scree…

Pytorch中的torch.save()文件保存格式探索以及mmdetection加載預訓練模型參數對不齊和收到意外參數報錯解決方案

使用mmdetection時遇到的問題比較多&#xff0c;首先要對自己要使用的預訓練模型有一定的了解&#xff0c;并且懂得使用各種分類模型時不同的模型不同任務執行階段需要參數上的對其。&#xff08;比如mask-rcnn和它的三個頭之間的參數&#xff09;。 首先&#xff0c;談談torc…

什么是聲明式事務管理?

聲明式事務管理是Spring提供的一種事務管理機制&#xff0c;它允許開發者通過聲明的方式&#xff0c;而不是通過編程的方式&#xff0c;來管理事務的邊界和行為。在聲明式事務管理中&#xff0c;你可以通過注解或XML配置來指定方法或類上的事務屬性和行為。 在Spring中&#x…

Spring Boot集成六大常用中間件,附集成源碼,親測有效

目錄 萬字論文&#xff0c;從0到1&#xff0c;只需1小時獲取途徑1、Spring Boot如何集成Spring Data JPA&#xff1f;2、Spring Boot如何集成Spring Security&#xff1f;3、Spring Boot如何集成Redis&#xff1f;4、Spring Boot如何集成RabbitMQ&#xff1f;5、Spring Boot如何…

JavaEE(入門)

JavaEE &#xff08;詳細注釋版&#xff09; 1. 入門基礎 1.1 JavaEE簡介 JavaEE&#xff08;Java Platform, Enterprise Edition&#xff09;是由Sun Microsystems推出的一套標準&#xff0c;現由Oracle維護。JavaEE平臺主要用于開發和運行企業級應用程序&#xff0c;具有高…

11 Goroutine-并發與并行、阻塞與非阻塞

并發 順序執行&#xff1a;按照事先計劃好的順序&#xff0c;執行完一個操作后&#xff0c;再執行下一個操作。 順序執行效率不高的原因&#xff1a; 每個操作由多個步驟組成&#xff0c;每個步驟所需要的時間長短不一&#xff0c;有些步驟可能相當耗時。顧客點菜需要時間&a…

VectorDBBench在windows的調試

VectorDBBench在windows的調試 VectorDBBench是一款向量數據庫基準測試工具&#xff0c;支持milvus、Zilliz Cloud、Elastic Search、Qdrant Cloud、Weaviate Cloud 、 PgVector、PgVectorRS等&#xff0c;可以測試其QPS、時延、recall。 VectorDBBench是一款使用python編寫的…

輕松學EntityFramework Core--Entity Framework Core 簡介

一、什么是Entity Framework Core Entity Framework Core&#xff08;簡稱EF Core&#xff09;是一個現代的、跨平臺的、開源的ORM&#xff08;對象關系映射&#xff09;框架&#xff0c;由微軟開發。它允許.NET開發者通過.NET對象與關系型數據庫進行交互&#xff0c;而無需編…

putty中的plink.exe功能和用法

plink對于自動化的執行命令和工作非常有好處。plink可以讓我們直接在命令行制定好命令&#xff0c;然后執行&#xff0c;完成后自動關閉session。 Plink: command-line connection utility Release 0.81 Usage: plink [options] [user]host [command]("host" can al…

2024年150道高頻Java面試題(七十四)

147. 如何在 MyBatis 中實現一對多和多對一的關系映射&#xff1f; 在 MyBatis 中實現一對多&#xff08;One-to-Many&#xff09;和多對一&#xff08;Many-to-One&#xff09;的關系映射&#xff0c;主要是通過 <resultMap> 元素中的 <collection> 和 <assoc…

深度學習模型在OCR中的可解釋性問題與提升探討

摘要&#xff1a; 隨著深度學習技術在光學字符識別&#xff08;OCR&#xff09;領域的廣泛應用&#xff0c;人們對深度學習模型的可解釋性問題日益關注。本文將探討OCR中深度學習模型的可解釋性概念及其作用&#xff0c;以及如何提高可解釋性&#xff0c;使其在實際應用中更可…

在Linux系統上使用Nginx的詳解指南

目錄 簡介 準備工作 安裝Nginx 通過包管理器安裝 源碼編譯安裝 Nginx基礎配置 主配置文件nginx.conf詳解 基本服務器塊配置 SSL/TLS配置 動靜分離 反向代理配置 負載均衡配置 常見問題及解決方法 結論 1. 簡介 Nginx是一款高性能HTTP和反向代理服務器&#xff…

上位機圖像處理和嵌入式模塊部署(f103 mcu唯一的id)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】 對于stm32f103系列mcu來說,一般每一顆原廠的mcu,都會對應一個唯一的id。那這個id可以用來做什么用呢?個人認為,可以用來做激活使用。舉個例子,第一次mcu模塊使用的時候,一般可…

Java 零基礎入門學習(小白也能看懂!)

&#x1f4da;博客主頁&#xff1a;愛敲代碼的小楊. ?專欄&#xff1a;《Java SE語法》 | 《數據結構與算法》 | 《C生萬物》 |《MySQL探索之旅》 |《Web世界探險家》 ??感謝大家點贊&#x1f44d;&#x1f3fb;收藏?評論?&#x1f3fb;&#xff0c;您的三連就是我持續更…

第16篇:JTAG UART IP應用<三>

Q&#xff1a;如何通過HAL API函數庫訪問JTAG UART&#xff1f; A&#xff1a;Quartus硬件工程以及Platform Designer系統也和第一個Nios II工程--Hello_World的Quartus硬件工程一樣。 Nios II軟件工程對應的C程序調用HAL API函數&#xff0c;如open用于打開和創建文件&#…

前端最新面試題(ES6模塊篇)

目錄 1 ES5、ES6和ES2015有什么區別? 2 babel是什么,有什么作用? 3 let有什么用,有了var為什么還要用let? 4 舉一些ES6對String字符串類型做的常用升級優化? 5 舉一些ES6對Array數組類型做的常用升級優化 6 舉一些ES6對Number數字類型做的常用升級優化 7 舉一些ES…

前端基礎入門三大核心之JS篇:JavaScript,不只是咖啡因那么簡單!—— 進階案例集錦篇

前端基礎入門三大核心之JS篇&#xff1a;解鎖JavaScript的魔法密鑰—— 進階案例集錦 &#x1f9d9; 基礎概念與作用&#xff1a;JS&#xff0c;不僅僅是“腳本”&#x1f4da; 變量聲明的進化史 &#x1f50d; 多維度功能使用&#xff1a;函數、數組與對象&#x1f916; 函數&…

前后端聯調小細節

前端向后端發數據&#xff0c;有時候前端和后端的字段是一樣的&#xff0c;字段沒有問題&#xff0c;前端發過來的載荷也沒有問題&#xff0c;但后端接收到的字段是null的&#xff0c;這時候可以排查前端發過來的數據是不是多嵌套了一層&#xff0c;比如發過來的是。 實例如下…

使用YOLOv9訓練和測試自己的數據集

任務&#xff1a;檢測舌頭上的裂紋和齒痕 已經有了labelme標注的數據集&#xff0c;并且轉為了coco格式 參考&#xff1a; 詳細&#xff01;正確&#xff01;COCO數據集&#xff08;.json&#xff09;訓練格式轉換成YOLO格式&#xff08;.txt&#xff09;_coco數據集的train…