91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么學習Python技術

發布時間:2021-10-20 11:21:45 來源:億速云 閱讀:125 作者:iii 欄目:編程語言

本篇內容主要講解“怎么學習Python技術”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么學習Python技術”吧!

collection.len()是面向對象語言的寫法,len(collection)是Python語言的寫法,這種風格叫做Pythonic。從前者到后者,就像變魔術一樣,一瞬間讓人眼前一亮。這個魔術就是Python魔法方法,或者叫雙下方法,它是用雙下劃線開頭和雙下劃線結尾的特殊方法,比如obj[key],Python解釋器實際上會轉換成obj.__getitem__(key)來運行,但是使用者并無感知。

__getitem__和__len

____getitem__用來獲取數據,__len__用來返回長度,這2個魔法方法是Python基礎,我們通過一副撲克牌來了解:

import collections  # 定義一副牌 Card = collections.namedtuple('Card', ['rank', 'suit'])  class FrenchDeck:     # 大小     ranks = [str(n) for n in range(2, 11)] + list('JQKA')     # 花色     suits = 'spades diamonds clubs hearts'.split()      def __init__(self):         # 生成一副牌         self._cards = [Card(rank, suit) for suit in self.suits                                         for rank in self.ranks]      def __len__(self):         return len(self._cards)      def __getitem__(self, position):         return self._cards[position]

本來我們對這副牌什么都不能做,但是由于實現了__len__,可以使用len()函數查看有多少張牌:

>>> len(deck) 52

由于實現了__getitem__,可以使用中括號索引取值:

>>> deck[0] Card(rank='2', suit='spades')

能進行切片:

>>> deck[:3] [Card(rank='2', suit='spades'), Card(rank='3', suit='spades'), Card(rank='4', suit='spades')] >>> deck[12::13] [Card(rank='A', suit='spades'), Card(rank='A', suit='diamonds'), Card(rank='A', suit='clubs'), Card(rank='A', suit='hearts')]

能迭代:

>>> for card in deck:  # doctest: +ELLIPSIS ...   print(card) Card(rank='2', suit='spades') Card(rank='3', suit='spades') Card(rank='4', suit='spades') ...

發現沒有,魔法方法是可以用來裝B的!別人寫個類只能get、set,你寫個類還能花式炫技,666。

Python魔法方法是給Python解釋器使用的,一般不需要直接調用,Python會自己去調,比如把len(my_object)寫成my_object.__len__(),就弄巧成拙了。

魔法方法實現運算符

前面例子實現了取值和長度,接著再看一個例子,使用__repr__、__abs__、__bool__、__add__、__mul__,實現運算符:

from math import hypot  # 二維向量 class Vector:      def __init__(self, x=0, y=0):         self.x = x         self.y = y      # 表達式     def __repr__(self):         return 'Vector(%r, %r)' % (self.x, self.y)      # 絕對值     def __abs__(self):         return hypot(self.x, self.y)      # 布爾值     def __bool__(self):         return bool(abs(self))      # 加法     def __add__(self, other):         x = self.x + other.x         y = self.y + other.y         return Vector(x, y)      #乘法     def __mul__(self, scalar):         return Vector(self.x * scalar, self.y * scalar)

__add__實現了加法:

>>> v1 = Vector(2, 4) >>> v2 = Vector(2, 1) >>> v1 + v2 Vector(4, 5)

__abs__實現了絕對值:

>>> v = Vector(3, 4) >>> abs(v) 5.0

__mul__實現了乘法:

>>> v * 3 Vector(9, 12)

__repr__實現了對象的字符串表示:

Vector(4, 5)

否則得到的字符串可能是

__bool__實現了布爾值:

if Vector(4, 5):     return True

其他魔法方法

怎么學習Python技術


一篇文章是講不完魔法方法的,我們會在后續文章中,繼續探討如何使用和實現它們。

Tips

本小節內容是我看《流暢的Python》第一遍時記錄的知識點:

  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. collections.namedtuple可以用來創建只有少數屬性但沒有方法的對象,比如

鴻蒙官方戰略合作共建——HarmonyOS技術社區beer_card = Card('7', 'diamonds')
  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. 2.random.choice和random.sample不一樣的地方在于,sample是返回序列,choice是返回元素,當使用sample(list,  1)[0]的時候,不如直接使用choice(list)。

  3. 特殊方法的存在是為了被Python解釋器調用的。

  4. PyVarObject是表示內存中長度可變的內置對象的C語言結構體。list或str或bytearray的__len__實際上返回的PyVarObject.ob_size屬性,這個比調用一個方法要快的多。

  5. len之所以不是一個普通方法,是為了讓python自帶的數據結構可以走后門,abs也是同理。

  6. 很多時候調用__init__方法的目的是,在你自己的子類的__init__方法中調用超類的構造器。

  7. abs,如果輸入是整數或者浮點數,它返回的是輸入值的絕對值;如果輸入是復數,那么返回這個復數的模。

  8. __repr__和__str__二選一的話,__repr__更好,因為如果一個對象沒有__str__函數,解釋器會用__repr__作為替代。

  9. python對象的一個基本要求就是它得有合理的字符串表示形式,這就是數據模型中存在特殊方法__repr__和__str__的原因。

  10. 為了判定一個值x為真還是為假,python會調用bool(x),它的背后是調用x.__bool__()。如果不存在,就會調用x.__len__(),返回0為Flase,非0為True。

  11. python通過運算符重載這一模式提供了豐富的數值類型,除了內置那些,還有decimal.Decimal和fractions.Fraction。

到此,相信大家對“怎么學習Python技術”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

徐汇区| 城固县| 焉耆| 会同县| 霍城县| 台中县| 沽源县| 日喀则市| 南华县| 九江市| 澜沧| 衢州市| 石嘴山市| 乌兰县| 双峰县| 新竹市| 松原市| 醴陵市| 琼结县| 突泉县| 闽清县| 常熟市| 东山县| 广昌县| 颍上县| 公安县| 漠河县| 北安市| 新营市| 卫辉市| 扎鲁特旗| 那曲县| 泰来县| 体育| 乐昌市| 牡丹江市| 永济市| 天门市| 宁河县| 洪雅县| 印江|