色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python 里最具代表性的符號居然如此強大

Linux愛好者 ? 來源:Python金牌大牛 ? 作者:Python金牌大牛 ? 2021-06-01 15:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

要說 Python 里使用頻率最高的符號,我想下劃線應(yīng)該排第一吧?

在不同場合下,下劃線有不同含義:比如_var表示內(nèi)部變量;__var表示私有屬性;__var__表示魔術(shù)方法;這些含義有的是程序員群體的約定,如_var;有的是 Python 解釋器規(guī)定的形式,如__var。

本文總結(jié) Python 語言編程中常用下劃線的地方,力圖一次搞懂_用法。目前常見的用法有五種:

_用于臨時變量

var_用于解決命名沖突問題

_var用于保護變量

__var用于私有變量

__var__用于魔術(shù)方法

下面我們具體看看這些下劃線應(yīng)用場景。

一、_用于臨時變量

單下劃線一般用于表示臨時變量,在 REPL、for 循環(huán)和元組拆包等場景中比較常見。

1.1 REPL單下劃線在 REPL 中關(guān)聯(lián)的是上一次計算的非 None 結(jié)果。

》》》 1+1

2

》》》 _

2

》》》 a=2+2

》》》 _

2

1+1,結(jié)果為 2,賦值給_;而賦值表達式a=2+2a 為 4,但整個表達式結(jié)果為None,故不會關(guān)聯(lián)到_。這有點類似日常大家使用的計算器中的ANS按鍵,直接保存了上次的計算結(jié)果。

1.2 for循環(huán)中的_for 循環(huán)中_作為臨時變量用。下劃線來指代沒什么意義的變量。例如在如下函數(shù)中,當我們只關(guān)心函數(shù)執(zhí)行次數(shù),而不關(guān)心具體次序的情況下,可以使用_作為參數(shù)。

nums = 13

for _ in range(nums):

fun_oper()

1.3 元組拆包中的_第三個用法是元組拆包,賦值的時候可以用_來表示略過的內(nèi)容。如下代碼忽略北京市人口數(shù),只取得名字和區(qū)號。

》》》 city,_,code = (‘Beijing’,21536000,‘010’)

》》》 print(city,code)

Beijing 010

如果需要略過的內(nèi)容多于一個的話,可以使用*開頭的參數(shù),表示忽略多個內(nèi)容。如下代碼忽略面積和人口數(shù),只取得名字和區(qū)號

city,*_,code = (‘Beijing’,21536000,16410.54,‘010’)

1.4 國際化函數(shù)在一些國際化編程中,_常用來表示翻譯函數(shù)名。例如 gettext 包使用時:

import gettext

zh = gettext.tranlation(‘dict’,‘locale’,languages=[‘zh_CN’])

zh.install()

_(‘hello world’)

依據(jù)設(shè)定的字典文件,其返回相應(yīng)的漢字“你好世界”。

1.5 大數(shù)字表示形式_也可用于數(shù)字的分割,這在數(shù)字比較長的時候常用。

》》》 a = 9_999_999_999

》》》 a

9999999999

a 的值自動忽略了下劃線。這樣用_分割數(shù)字,有利于便捷讀取比較大的數(shù)。

二、var_用于解決命名沖突問題

變量后面加一個下劃線。主要用于解決命名沖突問題,元編程中遇時 Python 保留的關(guān)鍵字時,需要臨時創(chuàng)建一個變量的副本時,都可以使用這種機制。

def type_obj_class(name,class_):

pass

def tag(name,*content,class_):

pass

以上代碼中出現(xiàn)的class是 Python 的保留關(guān)鍵字,直接使用會報錯,使用下劃線后綴的方式解決了這個問題。

三、_var用于保護變量

前面一個下劃線,后面加上變量,這是僅供內(nèi)部使用的“保護變量”。比如函數(shù)、方法或者屬性。

這種保護不是強制規(guī)定,而是一種程序員的約定,解釋器不做訪問控制。一般來講這些屬性都作為實現(xiàn)細節(jié)而不需要調(diào)用者關(guān)心,隨時都可能改變,我們編程時雖然能訪問,但是不建議訪問。

這種屬性,只有在導(dǎo)入時,才能發(fā)揮保護作用。而且必須是from XXX import *這種導(dǎo)入形式才能發(fā)揮保護作用。

使用from XXX import *是一種通配導(dǎo)入(wildcard import),這是 Python 社區(qū)不推薦的方式,因為你根本搞不清你到底導(dǎo)入了什么屬性、方法,很可能搞亂你自己的命名空間。PEP8推薦的導(dǎo)入方式是from XXX import aVar , b_func , c_func這種形式。

比如在下例汽車庫函數(shù) tools.py 里定義的“保護屬性”:發(fā)動機型號和輪胎型號,這屬于實現(xiàn)細節(jié),沒必要暴露給用戶。當我們使用 from tools import * 語句調(diào)用時,其實際并沒有導(dǎo)入所有_開頭的屬性,只導(dǎo)入了普通 drive 方法。

_moto_type = ‘L15b2’

_wheel_type = ‘michelin’

def drive():

_start_engine()

_drive_wheel()

def _start_engine():

print(‘start engine %s’%_moto_type)

def _drive_wheel():

print(‘drive wheel %s’%_wheel_type)

查看命令空間print(vars())可見,只有 drive 函數(shù)被導(dǎo)入進來,其他下劃線開頭的“私有屬性”都沒有導(dǎo)入進來。

{‘__name__’: ‘__main__’, ‘__doc__’: None, ‘__package__’: None, ‘__loader__’: 《_frozen_importlib_external.SourceFileLoader object at 0x005CF868》, ‘__spec__’: None, ‘__annotations__’:{}, ‘__builtins__’: 《module ‘builtins’ (built-in)》, ‘__file__’: ‘。\xiahuaxian.py’, ‘__cached__’: None, ‘walk’: 《function walk at 0x01DA8C40》, ‘root’: ‘。\__pycache__’, ‘_’: [21536000, 16410.54], ‘dirs’: [‘tools.cpython-38.pyc’], ‘city’: ‘Beijing’, ‘code’: ‘010’, ‘drive’: 《function drive at 0x01DBC4A8》}

3.1 突破保護屬性之所以說是“保護”并不是“私有”,是因為 Python 沒有提供解釋器機制來控制訪問權(quán)限。我們依然可以訪問這些屬性:

import tools

tools._moto_type = ‘EA211’

tools.drive()

以上代碼,以越過“保護屬性”。此外,還有兩種方法能突破這個限制,一種是將“私有屬性”添加到 tool.py 文件的 __all__ 列表里,使from tools import *也導(dǎo)入這些本該隱藏的屬性。

__all__ = [‘drive’,‘_moto_type’,‘_wheel_type’]

另一種是導(dǎo)入時指定“受保護屬性”名。

from tools import drive,_start_engine

_start_engine()

甚至是,使用import tools也可以輕易突破保護限制。所以可見,“保護屬性”是一種簡單的隱藏機制,只有在from tools import *時,由解釋器提供簡單的保護,但是可以輕易突破。這種保護更多地依賴程序員的共識:不訪問、修改“保護屬性”。除此之外,有沒有更安全的保護機制呢?有,就是下一部分討論的私有變量。

四、__var用于私有變量

私有屬性解決的之前的保護屬性保護力度不夠的問題。變量前面加上兩個下劃線,類里面作為屬性名和方法都可以。兩個下劃線屬性由 Python 的改寫機制來實現(xiàn)對這個屬性的保護。

看下面汽車例子中,品牌為普通屬性,發(fā)動機為“保護屬性”,車輪品牌為“私有屬性”。

class Car:

def __init__(self):

self.brand = ‘Honda’

self._moto_type = ‘L15B2’

self.__wheel_type = ‘michelin’

def drive(self):

print(‘Start the engine %s,drive the wheel %s,I get a running %s car’%

(self._moto_type,

self.__wheel_type,

self.brand))

我們用var(car1)查看下具體屬性值,

[‘_Car__wheel_type’, ‘__class__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__init_subclass__’, ‘__le__’, ‘__lt__’, ‘__module__’, ‘__ne__’, ‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘__weakref__’, ‘_moto_type’, ‘brand’, ‘drive’]

可見,實例化 car1 中,普通屬性 self.brand 和保護屬性 self._moto_type 都得以保存,兩個下劃線的私有屬性 __wheel_type 沒有了。取而代之的是_Car_wheel_type這個屬性。這就是改寫機制(Name mangling)。兩個下劃線的屬性,被改寫成帶有類名前綴的變量,這樣子類很難明明一個和如此復(fù)雜名字重名的屬性。保證了屬性不被重載,保證了其的私有性。

4.1 突破私有屬性這里“私有變量”的實現(xiàn),是從解釋器層面給與的改寫,保護了私有變量。但是這個機制并非絕對安全,因為我們依然可以通過 obj._ClasssName__private 來訪問 __private 私有屬性。

car1.brand = ‘Toyota’

car1._moto_type = ‘6AR-FSE’

car1._Car__wheel_type = ‘BRIDGESTONE’

car1.drive()

結(jié)果

Start the engine 6AR-FSE,

drive the wheel BRIDGESTONE,

I get a running Toyota car

可見,對改寫機制改寫的私有變量,雖然保護性加強了,但依然可以訪問并修改。只是這種修改,只是一種雜耍般的操作,并不可取。

五、__var__用于魔術(shù)方法

變量前面兩個下劃線,后面兩個下劃線。這是 Python 當中的魔術(shù)方法,一般是給系統(tǒng)程序調(diào)用的。例如上例中的 __init__ 就是類的初始化魔術(shù)方法,還有支持 len 函數(shù)的 __len__ 方法,支持上下文管理器協(xié)議的 __enter__ 和 __exit__ 方法,支持迭代器協(xié)議的 __iter__ 方法,支持格式化顯示的 __repr__ 和 __str__ 方法等等。這里我們?yōu)樯侠?Car 類添加魔術(shù)方法 __repr__ 來支持格式化顯示。

def __repr__(self):

return ‘***Car %s:with %s Engine,%sWheel***’%

(self.brand,self._moto_type,self.__wheel_type)

未添加__repr__魔術(shù)方法之前,print(car1)結(jié)果為《__main__.Car object at 0x0047F7F0》,這個結(jié)果讓人看的一頭霧水,增加 repr 魔術(shù)方法之后,顯示結(jié)果為***Car Toyota:with 6AR-FSE Engine,BRIDGESTONE Wheel***清晰明了,利于調(diào)試。這就是魔術(shù)方法的功效:支持系統(tǒng)調(diào)用,改進用戶類表現(xiàn),增加協(xié)議支持,使用戶類表現(xiàn)得更像系統(tǒng)類。

5.1 Python魔術(shù)方法分類以下所有魔術(shù)方法均需要在前后加上__,這里省略了這些雙下劃線。

一元運算符 neg pos abs invert

轉(zhuǎn)換 complex int float round inex

算術(shù)運算 add sub mul truediv floordiv mod divmod pow lshift rshift and xor or

算術(shù)運算除 and 之外,前面再加上 r,表示反運算。除 dimod 外,前面加上 i,表示就地運算。

比較 lt le eq ne gt ge

類屬性 getattr getattribute setattr delattr dir get set delete

格式化 bytes hash bool format

類相關(guān) init del new

列表 getitem

迭代器 iter next

上下文管理器 enter exit

六、總結(jié)

總之,下劃線在 Python 當中應(yīng)用還是很廣泛的,甚至可以說 Python 對下劃線有所偏愛。可以看到 _常用于臨時變量,在 REPL,for 循環(huán),元組拆包和國際化中得到了廣泛應(yīng)用。var_用于解決命名沖突問題,使用時比較簡單易懂的。

_var對變量的保護,只是一種脆弱的保護,更多依靠程序員的約定。__var用于私有變量,借助改寫機制支持,已經(jīng)支持了私有變量,但是仍然存在漏洞。對__var__用于魔術(shù)方法,進行了一個簡單的介紹,魔術(shù)方法較多,但是理解并不復(fù)雜。希望以后可以進一步介紹這些魔術(shù)方法。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4828

    瀏覽量

    86965
  • 解釋器
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    6776

原文標題:Python 里最具代表性的符號,竟如此強大

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    凱睿德制造入選2025年《Gartner MES市場指南》代表性供應(yīng)商

    葡萄牙波爾圖?2025年7月16日?/美通社/ --?作為先進的制造執(zhí)行系統(tǒng)(MES)的領(lǐng)導(dǎo)者及ASMPT?子公司,凱睿德制造被Gartner于2025年5月發(fā)布的《MES?市場指南》評選為“代表性
    的頭像 發(fā)表于 07-17 10:24 ?124次閱讀

    PIX RoboBus無人駕駛小巴落地深圳

    近日,PIX Moving聯(lián)合深圳海上世界,正式啟動RoboBus無人駕駛小巴常態(tài)化運營。作為深圳最具代表性的濱海文旅地標,深圳海上世界迎來了這輛科技感十足的智能接駁車,為市民和游客帶來一場融合未來出行與城市美學(xué)的全新體驗。
    的頭像 發(fā)表于 07-04 15:50 ?327次閱讀

    2025年市場主流AI MCU品牌及其代表性型號進行系統(tǒng)盤點#2025.6

    將對2025年市場上主流AI MCU品牌及其代表性型號進行系統(tǒng)盤點,從國際巨頭到國內(nèi)新銳,全面呈現(xiàn)這一領(lǐng)域的技術(shù)發(fā)展趨勢與應(yīng)用前景。 一、國際品牌AI MCU產(chǎn)品線 1. 恩智浦(NXP) - i.MX
    的頭像 發(fā)表于 07-02 09:46 ?1162次閱讀

    單片開關(guān)電源設(shè)計200例

    本文全面、深入、系統(tǒng)地闡述了單片開關(guān)電源的實用電路設(shè)計。精選了最具代表性的200個設(shè)計實例,分成通用開關(guān)電源、DC/DC變換器、電源適配器、蓄電池充電器、家用電器電源、現(xiàn)代辦公設(shè)備電源、網(wǎng)絡(luò)及通信
    發(fā)表于 05-26 16:52

    紅入選安全大模型及Agentic AI賦能網(wǎng)絡(luò)安全代表性廠商

    近日,專注于網(wǎng)絡(luò)安全和數(shù)字風(fēng)險管理的第三方研究機構(gòu)安全牛,正式發(fā)布了《Agentic AI安全技術(shù)應(yīng)用報告》(以下簡稱“報告”)。報告依托多方調(diào)研分析,對Agentic AI發(fā)展背景、安全框架、建設(shè)實施、產(chǎn)業(yè)能力、代表性廠商、落地應(yīng)用案例等諸多方面進行了研究。
    的頭像 發(fā)表于 04-30 14:19 ?500次閱讀

    文丘效應(yīng)方程的應(yīng)用

    本文要點文丘效應(yīng)方程實際上意味著什么?在哪里可以觀察到文丘效應(yīng)?如何在CFD中更好地實現(xiàn)文丘效應(yīng)?人們常說,數(shù)學(xué)是通用語言。這一論斷的依據(jù)可能是:物理現(xiàn)象和理論概念可以用符號和方
    的頭像 發(fā)表于 02-28 18:08 ?612次閱讀
    文丘<b class='flag-5'>里</b>效應(yīng)方程的應(yīng)用

    達實智能大廈入選成為建筑智能化領(lǐng)域代表方案

    近期,仲量聯(lián)行進行了2024十大代表性房地產(chǎn)科技革新方案的年度盤點,達實智能大廈入選成為建筑智能化領(lǐng)域代表方案!
    的頭像 發(fā)表于 02-07 17:19 ?692次閱讀

    鎧裝鋁芯電纜的符號和用途詳解

    鎧裝鋁芯電纜的符號和用途詳解如下: 一、符號詳解 鎧裝鋁芯電纜的型號通常由多個部分組成,每個部分代表不同的含義。以下是一些常見的符號及其解釋: YJ:表示采用交聯(lián)聚乙烯絕緣材料。交聯(lián)聚
    的頭像 發(fā)表于 01-13 10:20 ?1911次閱讀

    芯盾時代入選《API安全技術(shù)應(yīng)用指南(2024版)》API安全十大代表性廠商

    的零信任業(yè)務(wù)安全產(chǎn)品方案提供商,憑借在API安全領(lǐng)域領(lǐng)先的產(chǎn)品方案、豐富的實踐經(jīng)驗和優(yōu)秀的市場表現(xiàn),成功入選“API安全領(lǐng)域十大代表性廠商”。 安全牛點評 ? 芯盾時代API安全能力 1.基于API安全能力,持續(xù)深耕于業(yè)務(wù)安全,進一步加強了客戶信
    的頭像 發(fā)表于 12-18 11:04 ?1208次閱讀
    芯盾時代入選《API安全技術(shù)應(yīng)用指南(2024版)》API安全十大<b class='flag-5'>代表性</b>廠商

    邏輯異或運算符在Python中的用法

    ,Python中的 ^ 符號實際上是一個按位異或運算符,用于對整數(shù)的二進制表示進行異或操作。 盡管如此,我們?nèi)匀豢梢酝ㄟ^一些方法來實現(xiàn)邏輯異或的功能,即當兩個布爾值不同時為真,相同時為假。這可以通過使用邏輯運算符來實現(xiàn),而不是直
    的頭像 發(fā)表于 11-19 09:46 ?887次閱讀

    全國5G新基建智慧燈桿建設(shè)十大代表性案例

    全國5G新基建智慧燈桿建設(shè)十大代表性案例
    的頭像 發(fā)表于 11-07 12:50 ?1333次閱讀
    全國5G新基建智慧燈桿建設(shè)十大<b class='flag-5'>代表性</b>案例

    Python常用函數(shù)大全

    Python 世界,有一些寶藏函數(shù)和模塊,它們可以讓你編程更輕松、代碼更高效。這篇文章將帶你一一認識這些神器,讓你的開發(fā)生活瞬間輕松不少!
    的頭像 發(fā)表于 10-27 17:20 ?934次閱讀

    第二屆大會回顧第25期 | OpenHarmony上的Python設(shè)備應(yīng)用開發(fā)

    Python以其簡單、易學(xué)和功能強大而聞名,有著廣泛的用戶群體。采用Python開發(fā)有助于降低OpenHarmony的學(xué)習(xí)門檻。如何在OpenHarmony上用Python開發(fā)設(shè)備應(yīng)用
    的頭像 發(fā)表于 08-27 11:53 ?1241次閱讀
    第二屆大會回顧第25期 | OpenHarmony上的<b class='flag-5'>Python</b>設(shè)備應(yīng)用開發(fā)

    使用Python批量連接華為網(wǎng)絡(luò)設(shè)備

    隨著網(wǎng)絡(luò)規(guī)模的擴大和設(shè)備數(shù)量的增加,手動配置和管理每臺網(wǎng)絡(luò)設(shè)備變得越來越不現(xiàn)實。因此,自動化工具和腳本變得尤為重要。Python語言以其簡潔強大的第三方庫支持,成為了網(wǎng)絡(luò)自動化領(lǐng)域的首選。本篇文章將詳細介紹如何使用
    的頭像 發(fā)表于 08-12 17:48 ?932次閱讀

    pytorch和python的關(guān)系是什么

    在當今的人工智能領(lǐng)域,Python已經(jīng)成為了最受歡迎的編程語言之一。Python的易學(xué)易用、豐富的庫和框架以及強大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語言。而在深度學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 08-01 15:27 ?3302次閱讀
    主站蜘蛛池模板: 思思久久99热只有频精品66 | AV天堂午夜精品蜜臀AV | 国产精品一库二库三库 | 老阿姨才是最有味的一区二区 | 亚洲精品一卡二卡三卡四卡2021 | YELLOW日本动漫高清免费 | 欧美最猛性xxxxx亚洲精品 | 蜜桃色欲AV久久无码精品 | 日本黄色成年人免费观看 | 高龄熟女50P | 亚洲欧美一区二区成人片 | 欧美亚洲日本日韩在线 | 麻豆文化传媒一区二区 | 动漫美女被爆挤奶歪歪漫画 | 99 久久99久久精品免观看 | 琪琪电影午夜理论片YY6080 | 一个人在线观看的视频 | 无码任你躁久久久久久老妇双奶 | 97久久精品人人槡人妻人 | 国产成人精品免费青青草原app | 神马电影我不卡4k手机在线观看 | A级韩国乱理伦片在线观看 a级成人免费毛片完整版 | 日本伦理片 中文字幕 | 热热久久超碰精品中文字幕 | 好吊妞国产欧美日韩视频 | 精品香蕉99久久久久网站 | 丝袜情趣在线资源二区 | 母乳女神春日もな | 99热久久久无码国产精品性麻豆 | 桃色窝 | 动漫美女被吸奶 | 粉嫩无套白浆第一次jk | 色久久一个亚洲综合网 | 男人边吃奶边摸边做刺激情话 | 久久精品99国产精品日本 | 欧美亚洲精品真实在线 | 免费无遮挡又黄又爽网站 | 一二三四电影完整版免费观看 | 午夜AV国产欧美亚洲高清在线 | DASD-700美谷朱里 | 日本高清无吗 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品