chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

每個(gè)Pythoner都知道一個(gè)最基本的魔術(shù)方法

馬哥Linux運(yùn)維 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-05-01 17:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

介紹

Python中,所有以“__”雙下劃線包起來(lái)的方法,都統(tǒng)稱為“Magic Method”,例如類的初始化方法 __init__,Python中所有的魔術(shù)方法均在官方文檔中有相應(yīng)描述,但是對(duì)于官方的描述比較混亂而且組織比較松散。很難找到有一個(gè)例子。

構(gòu)造和初始化

每個(gè)Pythoner都知道一個(gè)最基本的魔術(shù)方法, __init__ 。通過(guò)此方法我們可以定義一個(gè)對(duì)象的初始操作。然而,當(dāng)調(diào)用 x = SomeClass() 的時(shí)候, __init__ 并不是第一個(gè)被調(diào)用的方法。實(shí)際上,還有一個(gè)叫做__new__ 的方法,兩個(gè)共同構(gòu)成了“構(gòu)造函數(shù)”。

__new__是用來(lái)創(chuàng)建類并返回這個(gè)類的實(shí)例, 而__init__只是將傳入的參數(shù)來(lái)初始化該實(shí)例。

在對(duì)象生命周期調(diào)用結(jié)束時(shí),__del__ 方法會(huì)被調(diào)用,可以將__del__理解為“構(gòu)析函數(shù)”。下面通過(guò)代碼的看一看這三個(gè)方法:

from os.path import joinclass FileObject: '''給文件對(duì)象進(jìn)行包裝從而確認(rèn)在刪除時(shí)文件流關(guān)閉''' def __init__(self, filepath='~', filename='sample.txt'): #讀寫(xiě)模式打開(kāi)一個(gè)文件 self.file = open(join(filepath, filename), 'r+') def __del__(self): self.file.close() del self.file

控制屬性訪問(wèn)

許多從其他語(yǔ)言轉(zhuǎn)到Python的人會(huì)抱怨它缺乏類的真正封裝。(沒(méi)有辦法定義私有變量,然后定義公共的getter和setter)。Python其實(shí)可以通過(guò)魔術(shù)方法來(lái)完成封裝。我們來(lái)看一下:

__getattr__(self, name)

定義當(dāng)用戶試圖獲取一個(gè)不存在的屬性時(shí)的行為。這適用于對(duì)普通拼寫(xiě)錯(cuò)誤的獲取和重定向,對(duì)獲取一些不建議的屬性時(shí)候給出警告(如果你愿意你也可以計(jì)算并且給出一個(gè)值)或者處理一個(gè) AttributeError 。只有當(dāng)調(diào)用不存在的屬性的時(shí)候會(huì)被返回。

__setattr__(self, name, value)

與__getattr__(self, name)不同,__setattr__ 是一個(gè)封裝的解決方案。無(wú)論屬性是否存在,它都允許你定義對(duì)對(duì)屬性的賦值行為,以為這你可以對(duì)屬性的值進(jìn)行個(gè)性定制。實(shí)現(xiàn)__setattr__時(shí)要避免”無(wú)限遞歸”的錯(cuò)誤。

__delattr__

與 __setattr__ 相同,但是功能是刪除一個(gè)屬性而不是設(shè)置他們。實(shí)現(xiàn)時(shí)也要防止無(wú)限遞歸現(xiàn)象發(fā)生。

__getattribute__(self, name)

__getattribute__定義了你的屬性被訪問(wèn)時(shí)的行為,相比較,__getattr__只有該屬性不存在時(shí)才會(huì)起作用。因此,在支持__getattribute__的Python版本,調(diào)用__getattr__前必定會(huì)調(diào)用 __getattribute__。__getattribute__同樣要避免”無(wú)限遞歸”的錯(cuò)誤。需要提醒的是,最好不要嘗試去實(shí)現(xiàn)__getattribute__,因?yàn)楹苌僖?jiàn)到這種做法,而且很容易出bug。

在進(jìn)行屬性訪問(wèn)控制定義的時(shí)候很可能會(huì)很容易引起“無(wú)限遞歸”。如下面代碼:

# 錯(cuò)誤用法def __setattr__(self, name, value): self.name = value # 每當(dāng)屬性被賦值的時(shí)候(如self.name = value), ``__setattr__()`` 會(huì)被調(diào)用,這樣就造成了遞歸調(diào)用。 # 這意味這會(huì)調(diào)用 ``self.__setattr__('name', value)`` ,每次方法會(huì)調(diào)用自己。這樣會(huì)造成程序崩潰。# 正確用法def __setattr__(self, name, value): self.__dict__[name] = value # 給類中的屬性名分配值 # 定制特有屬性

Python的魔術(shù)方法很強(qiáng)大,但是用時(shí)卻需要慎之又慎,了解正確的使用方法非常重要。

創(chuàng)建自定義容器

有很多方法可以讓你的Python類行為向內(nèi)置容器類型一樣,比如我們常用的list、dict、tuple、string等等。Python的容器類型分為可變類型(如list、dict)和不可變類型(如string、tuple),可變?nèi)萜骱筒豢勺內(nèi)萜鞯膮^(qū)別在于,不可變?nèi)萜饕坏┵x值后,不可對(duì)其中的某個(gè)元素進(jìn)行修改。 在講創(chuàng)建自定義容器之前,應(yīng)該先了解下協(xié)議。這里的協(xié)議跟其他語(yǔ)言中所謂的”接口”概念很像,它給你很多你必須定義的方法。然而在Python中的協(xié)議是很不正式的,不需要明確聲明實(shí)現(xiàn)。事實(shí)上,他們更像一種指南。

自定義容器的magic method

下面細(xì)致了解下定義容器可能用到的魔術(shù)方法。首先,實(shí)現(xiàn)不可變?nèi)萜鞯脑?,你只能定義 __len__ 和 __getitem__ (下面會(huì)講更多)??勺?nèi)萜鲄f(xié)議則需要所有不可變?nèi)萜鞯乃?,另外還需要 __setitem__ 和 __delitem__。如果你希望你的對(duì)象是可迭代的話,你需要定義 __iter__ 會(huì)返回一個(gè)迭代器。迭代器必須遵循迭代器協(xié)議,需要有 __iter__(返回它本身) 和 next。

__len__(self)

返回容器的長(zhǎng)度。對(duì)于可變和不可變?nèi)萜鞯膮f(xié)議,這都是其中的一部分。

__getitem__(self, key)

定義當(dāng)某一項(xiàng)被訪問(wèn)時(shí),使用self[key]所產(chǎn)生的行為。這也是不可變?nèi)萜骱涂勺內(nèi)萜鲄f(xié)議的一部分。如果鍵的類型錯(cuò)誤將產(chǎn)生TypeError;如果key沒(méi)有合適的值則產(chǎn)生KeyError。

__setitem__(self, key, value)

當(dāng)你執(zhí)行self[key] = value時(shí),調(diào)用的是該方法。

__delitem__(self, key)

定義當(dāng)一個(gè)項(xiàng)目被刪除時(shí)的行為(比如 del self[key])。這只是可變?nèi)萜鲄f(xié)議中的一部分。當(dāng)使用一個(gè)無(wú)效的鍵時(shí)應(yīng)該拋出適當(dāng)?shù)漠惓!?/p>

__iter__(self)

返回一個(gè)容器迭代器,很多情況下會(huì)返回迭代器,尤其是當(dāng)內(nèi)置的iter()方法被調(diào)用的時(shí)候,以及當(dāng)使用for x in container:方式循環(huán)的時(shí)候。迭代器是它們本身的對(duì)象,它們必須定義返回self的__iter__方法。

__reversed__(self)

實(shí)現(xiàn)當(dāng)reversed()被調(diào)用時(shí)的行為。應(yīng)該返回序列反轉(zhuǎn)后的版本。僅當(dāng)序列可以是有序的時(shí)候?qū)崿F(xiàn)它,例如對(duì)于列表或者元組。

__contains__(self, item)

定義了調(diào)用in和not in來(lái)測(cè)試成員是否存在的時(shí)候所產(chǎn)生的行為。你可能會(huì)問(wèn)為什么這個(gè)不是序列協(xié)議的一部分?因?yàn)楫?dāng)__contains__沒(méi)有被定義的時(shí)候,如果沒(méi)有定義,那么Python會(huì)迭代容器中的元素來(lái)一個(gè)一個(gè)比較,從而決定返回True或者False。

__missing__(self, key)

dict字典類型會(huì)有該方法,它定義了key如果在容器中找不到時(shí)觸發(fā)的行為。比如d = {‘a(chǎn)’: 1}, 當(dāng)你執(zhí)行d[notexist]時(shí),d.__missing__[‘notexist’]就會(huì)被調(diào)用。

一個(gè)例子

下面是書(shū)中的例子,用魔術(shù)方法來(lái)實(shí)現(xiàn)Haskell語(yǔ)言中的一個(gè)數(shù)據(jù)結(jié)構(gòu)。

# -*- coding: utf-8 -*-class FunctionalList: ''' 實(shí)現(xiàn)了內(nèi)置類型list的功能,并豐富了一些其他方法: head, tail, init, last, drop, take''' def __init__(self, values=None): if values is None: self.values = [] else: self.values = values def __len__(self): return len(self.values) def __getitem__(self, key): return self.values[key] def __setitem__(self, key, value): self.values[key] = value def __delitem__(self, key): del self.values[key] def __iter__(self): return iter(self.values) def __reversed__(self): return FunctionalList(reversed(self.values)) def append(self, value): self.values.append(value) def head(self): # 獲取第一個(gè)元素 return self.values[0] def tail(self): # 獲取第一個(gè)元素之后的所有元素 return self.values[1:] def init(self): # 獲取最后一個(gè)元素之前的所有元素 return self.values[:-1] def last(self): # 獲取最后一個(gè)元素 return self.values[-1] def drop(self, n): # 獲取所有元素,除了前N個(gè) return self.values[n:] def take(self, n): # 獲取前N個(gè)元素 return self.values[:n]

其實(shí)在collections模塊中已經(jīng)有了很多類似的實(shí)現(xiàn),比如Counter、OrderedDict等等。

反射

你也可以控制怎么使用內(nèi)置在函數(shù)sisinstance()和issubclass()方法 反射定義魔術(shù)方法. 這個(gè)魔術(shù)方法是:

__instancecheck__(self, instance)

檢查一個(gè)實(shí)例是不是你定義的類的實(shí)例

__subclasscheck__(self, subclass)

檢查一個(gè)類是不是你定義的類的子類

這些魔術(shù)方法的用例看起來(lái)很小, 并且確實(shí)非常實(shí)用. 它們反應(yīng)了關(guān)于面向?qū)ο蟪绦蛏弦恍┲匾臇|西在Python上,并且總的來(lái)說(shuō)Python: 總是一個(gè)簡(jiǎn)單的方法去找某些事情, 即使是沒(méi)有必要的. 這些魔法方法可能看起來(lái)不是很有用, 但是一旦你需要它們,你會(huì)感到慶幸它們的存在。

可調(diào)用的對(duì)象

你也許已經(jīng)知道,在Python中,方法是最高級(jí)的對(duì)象。這意味著他們也可以被傳遞到方法中,就像其他對(duì)象一樣。這是一個(gè)非常驚人的特性。

在Python中,一個(gè)特殊的魔術(shù)方法可以讓類的實(shí)例的行為表現(xiàn)的像函數(shù)一樣,你可以調(diào)用它們,將一個(gè)函數(shù)當(dāng)做一個(gè)參數(shù)傳到另外一個(gè)函數(shù)中等等。這是一個(gè)非常強(qiáng)大的特性,其讓Python編程更加舒適甜美。

__call__(self, [args...])

允許一個(gè)類的實(shí)例像函數(shù)一樣被調(diào)用。實(shí)質(zhì)上說(shuō),這意味著 x() 與 x.__call__() 是相同的。注意 __call__ 的參數(shù)可變。這意味著你可以定義 __call__ 為其他你想要的函數(shù),無(wú)論有多少個(gè)參數(shù)。

__call__ 在那些類的實(shí)例經(jīng)常改變狀態(tài)的時(shí)候會(huì)非常有效。調(diào)用這個(gè)實(shí)例是一種改變這個(gè)對(duì)象狀態(tài)的直接和優(yōu)雅的做法。用一個(gè)實(shí)例來(lái)表達(dá)最好不過(guò)了:

# -*- coding: UTF-8 -*-class Entity: """ 調(diào)用實(shí)體來(lái)改變實(shí)體的位置 """def __init__(self, size, x, y): self.x, self.y = x, y self.size = sizedef __call__(self, x, y): """ 改變實(shí)體的位置 """ self.x, self.y = x, y

上下文管理

with聲明是從Python2.5開(kāi)始引進(jìn)的關(guān)鍵詞。你應(yīng)該遇過(guò)這樣子的代碼:

with open('foo.txt') as bar: # do something with bar

在with聲明的代碼段中,我們可以做一些對(duì)象的開(kāi)始操作和退出操作,還能對(duì)異常進(jìn)行處理。這需要實(shí)現(xiàn)兩個(gè)魔術(shù)方法: __enter__ 和 __exit__。

__enter__(self)

定義了當(dāng)使用with語(yǔ)句的時(shí)候,會(huì)話管理器在塊被初始創(chuàng)建時(shí)要產(chǎn)生的行為。請(qǐng)注意,__enter__的返回值與with語(yǔ)句的目標(biāo)或者as后的名字綁定。

__exit__(self, exception_type, exception_value, traceback)

定義了當(dāng)一個(gè)代碼塊被執(zhí)行或者終止后,會(huì)話管理器應(yīng)該做什么。它可以被用來(lái)處理異常、執(zhí)行清理工作或做一些代碼塊執(zhí)行完畢之后的日常工作。如果代碼塊執(zhí)行成功,exceptiontype,exceptionvalue,和traceback將會(huì)為None。否則,你可以選擇處理這個(gè)異?;蛘呤侵苯咏唤o用戶處理。如果你想處理這個(gè)異常的話,請(qǐng)確保__exit在所有語(yǔ)句結(jié)束之后返回True。如果你想讓異常被會(huì)話管理器處理的話,那么就讓其產(chǎn)生該異常。

創(chuàng)建對(duì)象描述器

描述器是通過(guò)獲取、設(shè)置以及刪除的時(shí)候被訪問(wèn)的類。當(dāng)然也可以改變其它的對(duì)象。描述器并不是獨(dú)立的。相反,它意味著被一個(gè)所有者類持有。當(dāng)創(chuàng)建面向?qū)ο蟮臄?shù)據(jù)庫(kù)或者類,里面含有相互依賴的屬相時(shí),描述器將會(huì)非常有用。一種典型的使用方法是用不同的單位表示同一個(gè)數(shù)值,或者表示某個(gè)數(shù)據(jù)的附加屬性。

為了成為一個(gè)描述器,一個(gè)類必須至少有__get__,__set__,__delete__方法被實(shí)現(xiàn):

__get__(self, instance, owner)

定義了當(dāng)描述器的值被取得的時(shí)候的行為。instance是擁有該描述器對(duì)象的一個(gè)實(shí)例。owner是擁有者本身

__set__(self, instance, value)

定義了當(dāng)描述器的值被改變的時(shí)候的行為。instance是擁有該描述器類的一個(gè)實(shí)例。value是要設(shè)置的值。

__delete__(self, instance)

定義了當(dāng)描述器的值被刪除的時(shí)候的行為。instance是擁有該描述器對(duì)象的一個(gè)實(shí)例。

下面是一個(gè)描述器的實(shí)例:?jiǎn)挝晦D(zhuǎn)換。

# -*- coding: UTF-8 -*-class Meter(object): """ 對(duì)于單位"米"的描述器 """ def __init__(self, value=0.0): self.value = float(value) def __get__(self, instance, owner): return self.value def __set__(self, instance, value): self.value = float(value)class Foot(object): """ 對(duì)于單位"英尺"的描述器 """ def __get__(self, instance, owner): return instance.meter * 3.2808 def __set__(self, instance, value): instance.meter = float(value) / 3.2808class Distance(object): """ 用米和英寸來(lái)表示兩個(gè)描述器之間的距離 """ meter = Meter(10) foot = Foot()

使用時(shí):

>>>d = Distance()>>>print d.foot>>>print d.meter32.80810.0

復(fù)制

有時(shí)候,尤其是當(dāng)你在處理可變對(duì)象時(shí),你可能想要復(fù)制一個(gè)對(duì)象,然后對(duì)其做出一些改變而不希望影響原來(lái)的對(duì)象。這就是Python的copy所發(fā)揮作用的地方。

__copy__(self)

定義了當(dāng)對(duì)你的類的實(shí)例調(diào)用copy.copy()時(shí)所產(chǎn)生的行為。copy.copy()返回了你的對(duì)象的一個(gè)淺拷貝——這意味著,當(dāng)實(shí)例本身是一個(gè)新實(shí)例時(shí),它的所有數(shù)據(jù)都被引用了——例如,當(dāng)一個(gè)對(duì)象本身被復(fù)制了,它的數(shù)據(jù)仍然是被引用的(因此,對(duì)于淺拷貝中數(shù)據(jù)的更改仍然可能導(dǎo)致數(shù)據(jù)在原始對(duì)象的中的改變)。

__deepcopy__(self, memodict={})

定義了當(dāng)對(duì)你的類的實(shí)例調(diào)用copy.deepcopy()時(shí)所產(chǎn)生的行為。copy.deepcopy()返回了你的對(duì)象的一個(gè)深拷貝——對(duì)象和其數(shù)據(jù)都被拷貝了。memodict是對(duì)之前被拷貝的對(duì)象的一個(gè)緩存——這優(yōu)化了拷貝過(guò)程并且阻止了對(duì)遞歸數(shù)據(jù)結(jié)構(gòu)拷貝時(shí)的無(wú)限遞歸。當(dāng)你想要進(jìn)行對(duì)一個(gè)單獨(dú)的屬性進(jìn)行深拷貝時(shí),調(diào)用copy.deepcopy(),并以memodict為第一個(gè)參數(shù)。

附錄

用于比較的魔術(shù)方法

數(shù)值計(jì)算的魔術(shù)方法

單目運(yùn)算符和函數(shù)

雙目運(yùn)算符或函數(shù)

增量運(yùn)算

類型轉(zhuǎn)換

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

    關(guān)注

    3

    文章

    4413

    瀏覽量

    67238
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4867

    瀏覽量

    89822

原文標(biāo)題:Python 開(kāi)發(fā)者不得不知的魔術(shù)方法(Magic Method)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    labview魔術(shù)方陣小程序(

    `魔術(shù)方陣簡(jiǎn)單的說(shuō),就是將連續(xù)整數(shù)1,2,3....,n?的數(shù)字,依特別之順序,排在方陣裡,以3x3陣列為例,方陣內(nèi)所輸入的值只能維1-9且不能重復(fù)。而每行的數(shù),每列的數(shù)或?qū)蔷€位置的數(shù)各自
    發(fā)表于 02-08 11:22

    labview魔術(shù)方陣小程序(二)

    輸入的值只能維1-9且不能重復(fù)。而每行的數(shù),每列的數(shù)或?qū)蔷€位置的數(shù)各自相加所得的和皆均相同。試將以上敘述撰寫(xiě)為程式,用來(lái)判斷輸入方陣(3x3)是否為魔術(shù)方陣。labview2010:[hide][/hide]`
    發(fā)表于 02-08 11:23

    解決最基本錯(cuò)誤警告的方法

    正在學(xué)習(xí)AD6.9。對(duì)于原理圖設(shè)計(jì)時(shí)出現(xiàn)的各種錯(cuò)誤、警告。希望大家能分享下解決最基本錯(cuò)誤警告的方法。
    發(fā)表于 12-13 21:44

    【開(kāi)獎(jiǎng)中】答題就找魔術(shù)手!看ADI最新解決方案,領(lǐng)魔術(shù)手精美禮品!

    主題:賞魔術(shù)手之美、識(shí)魔術(shù)手之能、解魔術(shù)手之謎、享魔術(shù)手之禮;簡(jiǎn)單4步走,答題就找魔術(shù)手;魔術(shù)
    發(fā)表于 08-31 10:35

    請(qǐng)問(wèn)TSCL是多核共有1個(gè)還是每個(gè)各自有個(gè)?

    想問(wèn)下,像6678等的多核DSP中,TSCL是多個(gè)核共有1個(gè)還是每個(gè)各自有個(gè)?望專家們幫
    發(fā)表于 12-25 11:33

    請(qǐng)問(wèn)cc1100例程里為什么每個(gè)CSN = 0個(gè)while?

    cc1100例程為什么每個(gè)CSN = 0; 個(gè)while (MISO)?
    發(fā)表于 05-20 04:35

    款簡(jiǎn)單易做的魔術(shù)

    ;魔術(shù)棍拿走,小燈泡不會(huì)發(fā)亮?! ?b class='flag-5'>一、電路工作原理  圖1魔術(shù)燈內(nèi)安有簡(jiǎn)單電路,電路中串聯(lián)了個(gè)
    發(fā)表于 07-15 17:57

    最基本的紋波測(cè)量方法分享

    來(lái)自MPS的科普視頻,介紹了最基本的紋波測(cè)量方法,歡迎探討交流! ...
    發(fā)表于 01-03 07:19

    制作個(gè)好夢(mèng)機(jī)的方法

    制作個(gè)好夢(mèng)機(jī)的方法   做夢(mèng)機(jī)是每個(gè)樂(lè)意組裝和試驗(yàn)的制作,它也是很有用的。它的功能是產(chǎn)生松馳的催眠訊號(hào),有助你晚上好好地睡上
    發(fā)表于 12-24 10:59 ?1322次閱讀
    制作<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>好夢(mèng)機(jī)的<b class='flag-5'>方法</b>

    Reduce階段values中的每個(gè)共享個(gè)對(duì)象

    Hadoop備忘:Reduce階段IterableVALUEIN values中的每個(gè)共享個(gè)對(duì)象。在Reduce階段,具有相同key的的所有的value都會(huì)被組織到
    發(fā)表于 11-28 11:00 ?1582次閱讀

    每個(gè)系統(tǒng)管理員都要知道的 30 個(gè) Linux 系統(tǒng)監(jiān)控工具

    本文詳細(xì)介紹了每個(gè)系統(tǒng)管理員都要知道的 30 個(gè) Linux 系統(tǒng)監(jiān)控工具。您需要監(jiān)控 Linux 服務(wù)器的性能嗎?試試用這些內(nèi)置命令和附加工具吧!大多數(shù) Linux 發(fā)行版附帶了大
    的頭像 發(fā)表于 02-26 15:46 ?3021次閱讀
    <b class='flag-5'>每個(gè)</b>系統(tǒng)管理員都要<b class='flag-5'>知道</b>的 30 <b class='flag-5'>個(gè)</b> Linux 系統(tǒng)監(jiān)控工具

    MIUI的這10個(gè)小設(shè)置你知道

    其實(shí)在MIUI里,藏著很多個(gè)性化的選擇,接下來(lái)的這10個(gè)小設(shè)置,你知道嗎?
    的頭像 發(fā)表于 05-08 16:53 ?4951次閱讀

    如何自制個(gè)魔術(shù)

    這里向大家介紹款簡(jiǎn)單易做的趣味制作——魔術(shù)燈。電路如圖1所示。只要手拿裝有永久磁鐵的魔術(shù)棍,由下向上晃下,小燈泡就會(huì)發(fā)亮;魔術(shù)棍拿走后,
    的頭像 發(fā)表于 04-05 17:35 ?4892次閱讀
    如何自制<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>魔術(shù)</b>燈

    交換機(jī)最基本的配置與使用方法

    交換機(jī)最基本的配置與使用方法
    的頭像 發(fā)表于 01-04 11:34 ?9515次閱讀

    每個(gè)Linux用戶需要知道的重要Bash shell變量

    Bash 是大多數(shù) Linux 發(fā)行版的默認(rèn) shell。以下是每個(gè) Linux 用戶需要知道些重要的 Bash shell 變量。
    的頭像 發(fā)表于 02-13 09:22 ?1595次閱讀