天天看點

内置函數&匿名函數

1、數學運算類

函數名 函數功能 備注
abs(x) 求絕對值 1、參數可以是整型,也可以是複數2、若參數是複數,則傳回複數的模
complex([real[, imag]]) 建立一個複數
divmod(a, b) 分别取商和餘數 注意:整型、浮點型都可以,傳回值為一個元組
float([x]) 将一個字元串或數轉換為浮點數。 如果無參數将傳回0.0
int([x[, base]]) 将一個字元轉換為int類型 base表示進制
  1. >>> int('0xa',16)  
  2. 10  
  3. >>> int('10',8)  
  4. 8  
  5. >>> int('12',16)  
  6. 18  
long([x[, base]]) 将一個字元轉換為long類型
pow(x, y[, z]) 傳回x的y次幂  Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
range([start], stop[, step]) 産生一個序列 預設從0開始
round(x[, n]) 四舍五入 n : 保留小數點後n位,預設為0
sum(iterable[, start]) 對集合求和
oct(x) 将一個數字轉化為8進制
hex(x) 将整數x轉換為16進制字元串
chr(i) 傳回整數i對應的ASCII字元
bin(x) 将整數x轉換為二進制字元串
bool([x]) 将x轉換為Boolean類型

2. 集合類操作

函數名稱
basestring() str和unicode的超類 不能直接調用,可以用作isinstance判斷
format(value [, format_spec]) 格式化輸出字元串 格式化的參數順序從0開始,如“I am {0},I like {1}”
unichr(i) 傳回給定int類型的unicode
enumerate(sequence [, start = 0]) 傳回一個可枚舉的對象 該對象的next()方法将傳回一個tuple
iter(o[, sentinel]) 生成一個對象的疊代器,第二個參數表示分隔符
max(iterable[, args…][key]) 傳回集合中的最大值
min(iterable[, args…][key]) 傳回集合中的最小值
dict([arg]) 建立資料字典
list([iterable]) 将一個集合類轉換為另外一個集合類
set() set對象執行個體化
frozenset([iterable]) 産生一個不可變的set
str([object]) 轉換為string類型
sorted(iterable[, cmp[, key[, reverse]]]) 隊集合排序
tuple([iterable]) 生成一個tuple類型
xrange([start], stop[, step]) xrange()函數與range()類似,但xrnage()并不建立清單,而是傳回一個xrange對象 它的行為與清單相似,但是隻在需要時才計算清單值,當清單很大時,這個特性能為我們節省記憶體

3. 邏輯判斷

all(iterable) 集合中的元素都為真的時候為真 特别的,若為空串傳回為True
any(iterable) 1、集合中的元素有一個為真的時候為真 特别的,若為空串傳回為False
cmp(x, y) 如果x < y ,傳回負數;x == y, 傳回0;x > y,傳回正數

4. 映射

callable(object) 檢查對象object是否可調用 1、類是可以被調用的2、執行個體是不可以被調用的,除非類中聲明了call方法
classmethod() 注解,用來說明這個方式是個類方法 類方法即可被類調用,也可以被執行個體調用,類方法類似于Java中的static方法,類方法中不需要有self參數
compile(source, filename, mode[, flags[, dont_inherit]]) 将source編譯為代碼或者AST對象 代碼對象能夠通過exec語句來執行或者eval()進行求值。
dir([object]) 1、不帶參數時,傳回目前範圍内的變量、方法和定義的類型清單;2、帶參數時,傳回參數的屬性、方法清單。3、如果參數包含方法dir(),該方法将被調用。當參數為執行個體時。4、如果參數不包含dir(),該方法将最大限度地收集參數資訊delattr(object, name) 删除object對象名為name的屬性
eval(expression [, globals [, locals]]) 計算表達式expression的值
execfile(filename [, globals [, locals]]) 用法類似exec(),不同的是execfile的參數filename為檔案名,而exec的參數為字元串。
filter(function, iterable) 構造一個序列,等價于[ item for item in iterable if function(item)] 1、參數function:傳回值為True或False的函數,可以為None2、參數iterable:序列或可疊代對象
getattr(object, name [, defalut]) 擷取一個類的屬性
globals() 傳回一個描述目前全局符号表的字典
hasattr(object, name) 判斷對象object是否包含名為name的特性
hash(object) 如果對象object為哈希表類型,傳回對象object的哈希值
id(object) 傳回對象的唯一辨別
isinstance(object, classinfo) 判斷object是否是class的執行個體
issubclass(class, classinfo) 判斷是否是子類
len(s) 傳回集合長度
locals() 傳回目前的變量清單
map(function, iterable, …) 周遊每個元素,執行function操作
memoryview(obj) 傳回一個記憶體鏡像類型的對象
next(iterator[, default]) 類似于iterator.next()
object() 基類
property([fget[, fset[, fdel[, doc]]]]) 屬性通路的包裝類,設定後可以通過c.x=value等來通路setter和getter
reduce(function, iterable[, initializer]) 合并操作,從第一個開始是前兩個參數,然後是前兩個的結果與第三個合并進行處理,以此類推
reload(module) 重新加載子產品
setattr(object, name, value) 設定屬性值
repr(object) 将一個對象變換為可列印的格式
slice()
staticmethod 聲明靜态方法,是個注解
super(type[, object-or-type]) 引用父類
type(object) 傳回該object的類型
vars([object]) 傳回對象的變量,若無參數與dict()方法類似
bytearray([source [, encoding [, errors]]]) 傳回一個byte數組 1、如果source為整數,則傳回一個長度為source的初始化數組;2、如果source為字元串,則按照指定的encoding将字元串轉換為位元組序列;3、如果source為可疊代類型,則元素必須為[0 ,255]中的整數;4、如果source為與buffer接口一緻的對象,則此對象也可以被用于初始化bytearray.
zip([iterable, …])

5.IO操作

file(filename [, mode [, bufsize]]) file類型的構造函數,作用為打開一個檔案,如果檔案不存在且mode為寫或追加時,檔案将被建立。 添加‘b’到mode參數中,将對檔案以二進制形式操作。添加‘+’到mode參數中,将允許對檔案同時進行讀寫操作1、參數filename:檔案名稱。2、參數mode:’r’(讀)、’w’(寫)、’a’(追加)。3、參數bufsize:如果為0表示不進行緩沖,如果為1表示進行行緩沖,如果是一個大于1的數表示緩沖區的大小 。
input([prompt]) 擷取使用者輸入 推薦使用raw_input,因為該函數将不會捕獲使用者的錯誤輸入
open(name[, mode[, buffering]]) 打開檔案
print 列印函數
raw_input([prompt]) 設定輸入 輸入都是作為字元串處理

6. help()–幫助資訊

&内置方法

 内置方法  說明
 __init__(self,...)  初始化對象,在建立新對象時調用
 __del__(self)  釋放對象,在對象被删除之前調用
 __new__(cls,*args,**kwd)  執行個體的生成操作
 __str__(self)  在使用print語句時被調用
 __getitem__(self,key)  擷取序列的索引key對應的值,等價于seq[key]
 __len__(self)  在調用内聯函數len()時被調用
 __cmp__(stc,dst)  比較兩個對象src和dst
 __getattr__(s,name)  擷取屬性的值
 __setattr__(s,name,value)  設定屬性的值
 __delattr__(s,name)  删除name屬性
 __getattribute__()  __getattribute__()功能與__getattr__()類似
 __gt__(self,other)  判斷self對象是否大于other對象
 __lt__(slef,other)  判斷self對象是否小于other對象
 __ge__(slef,other)  判斷self對象是否大于或者等于other對象
 __le__(slef,other)  判斷self對象是否小于或者等于other對象
 __eq__(slef,other)  判斷self對象是否等于other對象
 __call__(self,*args)  把執行個體對象作為函數調用

__init__():

__init__方法在類的一個對象被建立時,馬上運作。這個方法可以用來對你的對象做一些你希望的初始化。注意,這個名稱的開始和結尾都是雙下劃線。

代碼例子:

#!/usr/bin/python

# Filename: class_init.py

class Person:

    def __init__(self, name):

        self.name = name

    def sayHi(self):

        print 'Hello, my name is', self.name

p = Person('Swaroop')

p.sayHi()

輸出:

Hello, my name is Swaroop

   說明:__init__方法定義為取一個參數name(以及普通的參數self)。在這個__init__裡,我們隻是建立一個新的域,也稱為name。注意它們是兩個不同的變量,盡管它們有相同的名字。點号使我們能夠區分它們。最重要的是,我們沒有專門調用__init__方法,隻是在建立一個類的新執行個體的時候,把參數包括在圓括号内跟在類名後面,進而傳遞給__init__方法。這是這種方法的重要之處。現在,我們能夠在我們的方法中使用self.name域。這在sayHi方法中得到了驗證。

__new__():

__new__()在__init__()之前被調用,用于生成執行個體對象.利用這個方法和類屬性的特性可以實作設計模式中的單例模式.單例模式是指建立唯一對象嗎,單例模式設計的類隻能執行個體化一個對象.

# -*- coding: UTF-8 -*-

class Singleton(object):

    __instance = None                       # 定義執行個體

    def __init__(self):

        pass

    def __new__(cls, *args, **kwd):         # 在__init__之前調用

        if Singleton.__instance is None:    # 生成唯一執行個體

            Singleton.__instance = object.__new__(cls, *args, **kwd)

        return Singleton.__instance

__getattr__()、__setattr__()和__getattribute__():

當讀取對象的某個屬性時,python會自動調用__getattr__()方法.例如,fruit.color将轉換為fruit.__getattr__(color).當使用指派語句對屬性進行設定時,python會自動調用__setattr__()方法.__getattribute__()的功能與__getattr__()類似,用于擷取屬性的值.但是__getattribute__()能提供更好的控制,代碼更健壯.注意,python中并不存在__setattribute__()方法.

代碼例子:

class Fruit(object):

    def __init__(self, color = "red", price = 0):

        self.__color = color

        self.__price = price

    def __getattribute__(self, name):               # 擷取屬性的方法

        return object.__getattribute__(self, name)

    def __setattr__(self, name, value):

        self.__dict__[name] = value

if __name__ == "__main__":

    fruit = Fruit("blue", 10)

    print fruit.__dict__.get("_Fruit__color")       # 擷取color屬性

    fruit.__dict__["_Fruit__price"] = 5

    print fruit.__dict__.get("_Fruit__price")       # 擷取price屬性

__getitem__():

如果類把某個屬性定義為序列,可以使用__getitem__()輸出序列屬性中的某個元素.假設水果店中銷售多鐘水果,可以通過__getitem__()方法擷取水果店中的沒種水果

class FruitShop:

     def __getitem__(self, i):      # 擷取水果店的水果

         return self.fruits[i]      

    shop = FruitShop()

    shop.fruits = ["apple", "banana"]

    print shop[1]

    for item in shop:               # 輸出水果店的水果

        print item,

輸出為:

banana

apple banana

__str__():

__str__()用于表示對象代表的含義,傳回一個字元串.實作了__str__()方法後,可以直接使用print語句輸出對象,也可以通過函數str()觸發__str__()的執行.這樣就把對象和字元串關聯起來,便于某些程式的實作,可以用這個字元串來表示某個類

class Fruit:      

    '''Fruit類'''               #為Fruit類定義了文檔字元串

    def __str__(self):          # 定義對象的字元串表示

        return self.__doc__

    fruit = Fruit()

    print str(fruit)            # 調用内置函數str()出發__str__()方法,輸出結果為:Fruit類

    print fruit                 #直接輸出對象fruit,傳回__str__()方法的值,輸出結果為:Fruit類

__call__():

在類中實作__call__()方法,可以在對象建立時直接傳回__call__()的内容.使用該方法可以模拟靜态方法

class Fruit:

    class Growth:        # 内部類

        def __call__(self):

            print "grow ..."

    grow = Growth()      # 調用Growth(),此時将類Growth作為函數傳回,即為外部類Fruit定義方法grow(),grow()将執行__call__()内的代碼

if __name__ == '__main__':

    fruit.grow()         # 輸出結果:grow ...

    Fruit.grow()         # 輸出結果:grow ...

匿名函數

python 使用 lambda 來建立匿名函數。

所謂匿名,意即不再使用 def 語句這樣标準的形式定義一個函數。

  • lambda 隻是一個表達式,函數體比 def 簡單很多。
  • lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
  • lambda 函數擁有自己的命名空間,且不能通路自有參數清單之外或全局命名空間裡的參數。
  • 雖然lambda函數看起來隻能寫一行,卻不等同于C或C++的内聯函數,後者的目的是調用小函數時不占用棧記憶體進而增加運作效率。

文法

lambda 函數的文法隻包含一個語句,如下:

lambda [arg1 [,arg2,.....argn]]:expression      

如下執行個體:

#!/usr/bin/python3
 # 可寫函數說明sum = lambda arg1, arg2: arg1 + arg2;
 # 調用sum函數print ("相加後的值為 : ", sum( 10, 20 ))print ("相加後的值為 : ", sum( 20, 20 ))