標籤:

Python built-in functions (A&B)

不知道大家對python中的內建函數感不感興趣,我有一個想法,想去梳理下這些內在的函數,偶有拾遺,也不失為是一番樂事。我會以Python2.7.14的手冊為參考資料,將內建函數一一說明,簡單的一筆帶過,有意思的就多花些筆墨。大概有76個函數,不要急,我們慢慢談。

1. abs()

Return the absolute value of a number. The argument may be a plain or long integer or a floating point number. If the argument is a complex number, its magnitude is returned.

返回一個數的絕對值,但如果這個數是複數的話,就返回它的模值。

>>> abs(-1)1>>> abs(complex(1,2))2.23606797749979>>> math.sqrt(1**2+2**2)2.23606797749979>>>

2. all(iterable)

Return True if all elements of the iterable are true (or if the iterable is empty). Equivalent to:

def all(iterable): for element in iterable: if not element: return False return True

用來檢驗迭代序列里的每一個值都是真值。那麼問題來了,python是依據什麼來判斷真值的呢?

Python中的任何對象都可以直接進行真值測試,可用於if,while的條件判斷,也可用於bool邏輯運算。而真值測試的返回結果總是True或者False。

以下內置對象會被視為FALSE值

  • None
  • False
  • 任何數值類型的0,例如0,0.0,0j
  • 任何空序列,例如,(),[]
  • 任何空映射{}

>>> bool(None)False>>> bool(False)False>>> bool(0),bool(0.0),bool(0j)(False, False, False)>>> bool(),bool(()),bool([])(False, False, False)>>> bool({})False>>>

常量NotImplemented、Ellipsis、True是真值

>>> bool(NotImplemented)True>>> bool(Ellipsis)True>>> bool(True)True

對於用戶自定義的類,其真假值取決於該類有沒有定義__bool__()或__len__(),以及這兩個方法返回的值

如果自定義類未沒有定義__bool__()和 __len__ ()方法,則該類的實例對象的真假值測試總是True。

>>> class A:... pass...>>> a=A()>>> bool(a)True>>>

如果自定義類只定義了__bool__()方法,則該類的實例對象的真假值測試結果為__bool__()方法返回的結果

>>> class B:... def __bool__(self):... return How are you...>>> b=B()>>> bool(b)True>>>

如果自定義類只定義了__len__()方法,則該類的實例對象的真假值測試結果為__len__()方法返回的結果是否為整數0

>>> class C(): def __init__(self,name): self.name = name def __len__(self): return len(self.name)>>> c1 = C()>>> bool(c1)False>>> c2 = C(jay)>>> bool(c2)True

如果自定義類同時定義了__bool__()和__len__()方法,則該類的實例對象的真假值測試結果為__bool__()方法返回的結果,即__bool__()方法優先順序高於__len__()方法。

3. any(iterable)

Return True if any element of the iterable is true. If the iterable is empty, return False. Equivalent to:

def any(iterable): for element in iterable: if element: return True return False

和all方法類似,如果迭代對象里有一個真值就返回True,否則返回False.

4. basestring()

This abstract type is the superclass for str and unicode. It cannot be called or instantiated, but it can be used to test whether an object is an instance of str or unicode. isinstance(obj, basestring) is equivalent to isinstance(obj, (str, unicode)).

basestring是str和unicode的超類(父類),也是抽象類,因此不能被調用和實例化,但可以被用來判斷一個對象是否為str或者unicode的實例,isinstance(obj, basestring)等價於isinstance(obj, (str, unicode));

>>> isinstance("Hello world", str)True>>> isinstance("Hello world", basestring)True >>> isinstance(u"你好", unicode)True>>> isinstance(u"你好", basestring)True

要不要在這裡談一談Python的編碼問題?這個就說來話長了,Python2.7的編碼問題尤其讓人頭疼,每當你辛辛苦苦爬取到一些內容,但總是會在編解碼處出現莫名其妙的問題。我覺得可以多開一片文章來匯總一下編碼相關的注意點。我在編碼坑中跌倒很多次,也徘徊了還久,希望後來人不要步我的後塵。

5. bin(x)

Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an index() method that returns an integer.

將整形轉換為一個二進位字元串,如果該數值不是整形,那麼它必須有個內置__index()__函數返回一個整數。

>>> class B:... def __index__(self):... return 1...>>> class C:... def __index__(self):... return 1...>>> bin(1)0b1>>> bin(1)Traceback (most recent call last): File "", line 1, in TypeError: str object cannot be interpreted as an index>>> b=B()>>> c=C()>>> bin(b)Traceback (most recent call last): File "", line 1, in TypeError: __index__ returned non-(int,long) (type str)>>> bin(c)0b1>>>

6. class bool([x])

Return a Boolean value, i.e. one of True or False. x is converted using the standard truth testing procedure. If x is false or omitted, this returns False; otherwise it returns True. bool is also a class, which is a subclass of int. Class bool cannot be subclassed further. Its only instances are False and True.

對一個對象做真值測試,返回bool值。真假值的定義在上面all()函數里詳細談過。

7. class bytearray([source[, encoding[, errors]]])

Return a new array of bytes. The bytearray class is a mutable sequence of integers in the range 0 <= x < 256. It has most of the usual methods of mutable sequences, described in Mutable Sequence Types, as well as most methods that the str type has, see String Methods.

The optional source parameter can be used to initialize the array in a few different ways:

If it is unicode, you must also give the encoding (and optionally, errors) parameters; bytearray() then converts the unicode to bytes using unicode.encode(). If it is an integer, the array will have that size and will be initialized with null bytes. If it is an object conforming to the buffer interface, a read-only buffer of the object will be used to initialize the bytes array. If it is an iterable, it must be an iterable of integers in the range 0 <= x < 256, which are used as the initial contents of the array. Without an argument, an array of size 0 is created.

好大一長串解釋,編碼相關,想等到講過編碼以後再說。但還是簡單的說下吧,就剩下這一個b類內置函數也不是回事兒。 在python2我們不區分bytes和str。bytes是python3特有的。bytes是byte的序列,而str是unicode的序列。

str 使用encode方法轉化為 bytes。bytes通過decode轉化為str。在Python 3中把兩者給分開了,這個在使用中需要注意。實際應用中在互聯網上是通過二進位進行傳輸,所以就需要將str轉換成bytes進行傳輸,而在接收中通過decode()解碼成我們需要的編碼進行處理數據這樣不管對方是什麼編碼而本地是我們使用的編碼這樣就不會亂碼。 bytearray和bytes不一樣的地方在於,bytearray是可變的。詳情請移步cnblogs.com/chenlin163/


推薦閱讀:

談談梅森旋轉:演算法及其爆破
如何真正零基礎入門Python?(第一節)
做python爬蟲需要會web後端嗎,不會的話能做嗎?
機器學習-淺談隨機森林的幾個tricks-20170917
python與numpy使用的一些小tips(5)

TAG:Python |