標籤:
python內部提供了很多內建函數。下面讓我們從a-z開始學習python的內建函數
1.1
callable(object)
如果object參數是可以調用的對象(callable),則返回true,否則就返回false。
a = 123
def fun():
print("hello")
print(callable(a))
print(callable(fun()))
輸出的結果是:
False
hello
False
func()是可以調用的對象,所以返回true,但是變數a不是,所以返回false
1.2
chr(i)
返回unicode代碼是i的字元
print(chr(97))
輸出的結果是:a
i的有效只範圍是0~1114111,超過範圍會報錯。
1.3
classmethod(function)
把類函數當作類的一個方法返回。類方法第一個參數是指明類,跟類中函數一樣,第一個參數是指明類執行個體。類方法修飾符採用下面的格式來使用:
class C:
@classmethod
def f(cls, arg1, arg2, ...):
...
從上面格式來看,@classmethod是函數在前置的一個修飾符,可以查看語言參考手冊。經過類方法修飾符的函數,可以直接通過類來調用,比如C.f()方式;也可以通執行個體的方式來調用,比如C().f()方式,但這個執行個體在這個函數裡被忽略掉了,沒起到什麼作用。如果類方法修飾符的函數,在繼承類時,衍生類別作為第一個參數傳遞給這個函數,也就是cls等於衍生類別。
類方法修飾符定義的函數與C++或JAVA裡靜態函數是不一樣的,如果要相似的功能,需要使用另外一個修飾符staticmethod。
classmethod設計的目的是什麼呢?其實與Python物件導向編程有關的,因為Python不支援多個的參數重載建構函式,比如在C++裡,建構函式可以根據參數個數不一樣,可以寫多個建構函式。Python為瞭解決這個問題,採用classmethod修飾符的方式,這樣定義出來的函數就可以在類對象執行個體化之前調用這些函數,就相當於多個建構函式,解決多個建構函式的代碼寫在類外面的問題。
與修飾符staticmethod的區別是類方法有一個型別參數,而靜態方法沒有。靜態方法主要用來解決全域函數的範圍的問題,而類方法是解決多個建構函式的問題,因此應用場境不一樣。
1.3這個函數的說明引用來自csdn:http://blog.csdn.net/caimouse/article/details/41016797
1.4
complex([real[,imag])
大多數有語言基礎的應該都很瞭解這個complex不管入門哪種語言,感覺剛開始都回去寫一個複數類
complex([real[,imag]])
返回一個複數,並且格式是:
real + imag * j
當然,你可以把一個字串或者一個數字轉換為一個複數,如果第一個參數real就是一個字串,那麼這個字串就會被理解成複數。並且不需要第二個參數
complex就會立即執行。字串只能是第一個參數,第二個參數絕不可能是字串的。當你傳入的參數是字串,這個字串一定不能包含空格,否則會報錯
請看幾個執行個體:
print(complex(1,2))
輸出的結果是:(1+2j)
print(complex(1))
輸出的結果是:(1+0j)
print(complex(‘1+2j‘))
輸出的結果是:(1+2j)
print(complex(‘1 + 2j‘))
報錯:ValueError: complex() arg is a malformed string
1.5
delattr(object,name)
函數的參數包括一個obj和一個字串,字串必須是obj的屬性,這個函數刪除指定的屬性。
class example:
pass
a = example()
setattr(a,‘ok‘,‘hello‘)
print(‘before--a.ok:‘,a.ok)
delattr(a,‘ok‘)
print(‘after--a.ok:‘,a.ok)
看看輸出的結果:
before--a.ok: hello
Traceback (most recent call last):
File "D:\Python\xode\try.py", line 7, in <module>
print(‘after--a.ok:‘,a.ok)
AttributeError: ‘example‘ object has no attribute ‘ok‘
顯然,a的‘ok‘屬性被刪除。
1.6
dir([object])
參數object可選,當沒有參數時,返回當前範圍內的列表名;有參數的時候,試圖返回該對象的有效屬性列表
如果這個對象有一個方法名:__dir__(),這個方法將被調用並且返回其屬性列表。如果對象沒有提供__dir__()
,這個函數會試圖去從對象的__dict__屬性收集資訊。
這是python3.4.3文檔給出的例子:
>>> import struct
>>> dir() # show the names in the module namespace
[‘__builtins__‘, ‘__name__‘, ‘struct‘]
>>> dir(struct) # show the names in the struct module
[‘Struct‘, ‘__all__‘, ‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘,
‘__initializing__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘,
‘_clearcache‘, ‘calcsize‘, ‘error‘, ‘pack‘, ‘pack_into‘,
‘unpack‘, ‘unpack_from‘]
>>> class Shape:
... def __dir__(self):
... return [‘area‘, ‘perimeter‘, ‘location‘]
>>> s = Shape()
>>> dir(s)
[‘area‘, ‘location‘, ‘perimeter‘]
1.7
divmod(a,b)
需要兩個數字參數,並且返回一系列由這兩個參數整除而產生的商和餘數
對於不同的操作符,運用二進位算術運算子
1.對於整數integers,這個函數的運算結果是(a//b,a%b)
2.對於浮點數float,這個函數的運算結果是(q,a%b),其中q = math.floor(a/b)
幾個執行個體:
print(divmod(15,4))
運算的結果是:(3, 3)
print(divmod(15.2,4))
運算的結果是:(3.0, 3.1999999999999993)
print(divmod(15.2,0))
ZeroDivisionError: float divmod()
1.8
enumerate(iterable,start = 0)
返回一個枚舉(enumerate)對象,iterable必須是一個可以迭代的對象,
people = [‘girl‘,‘boy‘,‘man‘,‘woman‘]
print(list(enumerate(people)))
返回的結果是:
[(0, ‘girl‘), (1, ‘boy‘), (2, ‘man‘), (3, ‘woman‘)]
如果這樣
print(list((enumerate(people,start = 5))))
返回的結果是:
[(5, ‘girl‘), (6, ‘boy‘), (7, ‘man‘), (8, ‘woman‘)]
可以看出第二個參數start是開始枚舉開始的序號。預設是0。
1.9
eval(expression, globals=None, locals=None)
參數是一個字串,和可選的全域和本地,如果提供了全域這個參數,那麼
全域參數必須是一個字典對象。如果提供本地參數,本地必須是映射對象。
x = 1
print(eval(‘x+1‘))
輸出是:2
江蘇南京 鐘志遠 904727147
python內建函數(二)