內置屬性
1、__file__
在pycharm中,__file__會返回當前文件的絕對路徑,而在終端直接運行時,則返回的是文件本身(這是個坑。。在IDE開發的時候運行正常,上線就出問題)。
pycharm:print(__file__) # F:/test_demo/demo.py
終端: python demo.py # 會輸出 demo.py
所以要使用絕對路徑的話,推薦使用 os.path.abspath(__file__),這種寫法在終端與pycharm中輸出的都是絕對路徑
2、__name__
表示當前模塊的名稱,如果爲main,表示爲頂層模塊,能夠調用其他非main的模塊,並且可運行。如果爲非main,則無法運行,只能用來做導入使用(相信大多數同學都試過,在啓動項目時,通常只有入口文件可以啓動,單獨運行項目中其他某個py文件,是無法運行的,而且,在入口文件中,不能存在相對導入包的方式,就是因爲該文件爲頂層模塊,而項目的其他py文件可以存在相對導包的方式)。
還可以用來返回類、實例、函數名等(這個沒啥用~,瞭解即可):
class B:
pass
print(B.__name__) # B
def a():
pass
print(a.__name__) # a
3、__class__
返回所在的類。
用法:實例或者函數.__class__,
如果是類名.__name__則返回元類 ‘type’(以後會寫一篇關於元類的帖)
4、__doc__
返回註釋信息(注意,必須是三引號的註釋,其他類型的註釋不會被識別進行返回)
def a(a,b):
"""
this is a demo test
:param a:
:param b:
:return:
"""
c = a + b
return c
print(a.__doc__) # 輸出如下
# this is a demo test
# :param a:
# :param b:
# :return:
5、__dict__
以字典形式返回對象的全部屬性和方法
class A(object):
def show(self):
pass
print(A.__dict__) # {'__module__': '__main__', 'show': <function A.show at 0x0021C6F0>,.....
6、__base__
返回父類(沒啥可說的)
7、__mro__
返回繼承順序:
class B(object):
pass
class A(B):
pass
print(A.__mro__) # (<class '__main__.A'>, <class '__main__.B'>, <class 'object'>)。
如果只是單繼承,繼承層次不深的話很好理解,但其實並不是單純的從下到上的順序,感興趣的同學可以去了解一下,這裏就不展開了。
8、__metaclass__
元類,以後會單獨開一篇。
內置函數
先說一下函數與方法的區別(我真是想起什麼來說什麼- -)。。初學的話,應該都想過函數跟方法有什麼區別,畢竟它們的相似度有目共睹。。
直接上代碼:
class B(object):
def demo(self):
pass
def second_demo(self):
pass
def demo():
pass
def second_demo():
pass
print(demo) # <function demo at 0x005D6BB8>
print(second_demo) # <function second_demo at 0x006129C0>
print(B.demo) # <function B.demo at 0x0027C6F0>
print(B.second_demo) # <function B.second_demo at 0x00612978>
b = B()
print(b.demo) # <bound method B.demo of <__main__.B object at 0x002BC4D0>>
print(b.second_demo) # <bound method B.second_demo of <__main__.B object at 0x00611290>>
通過上面可以看到,每個普通函數、類方法、實例方法之間的內存地址是各不相同的
其次,在同一個類下的方法是共用一片內存空間(就是這個類的內存空間)。當一個方法修改或產生一個變量後,其他方法也能夠使用到這個變量,這個變量不會消失,而函數之間則是完全獨立的。
最後注意:只有實例調用的才叫方法!!類名直接調用本身還是進行的函數調用。
進入正題。。。
鑑於篇幅太長,有的同學看不下去,此處只舉比較簡單的函數。有幾個比較重要的函數另開篇單獨寫。
1、zip函數
可將2個可迭代對象同時進行遍歷。
lst = [1,2]
lst2 = [3,4]
for item1, item2 in zip(lst, lst2):
print("item1:{}, item2:{}".format(item1, item2))
# item1:1, item2:3
# item1:2, item2:4
注意,(1)zip遍歷的次數根據2個可迭代對象中元素較少的選取。也就是說如果lst2=[3],則只循環一次。
(2)2個可迭代對象可以是不同類型,比如同時遍歷一個列表與元組
2、dict函數
構建字典
3、abs函數
返回number 的絕對值
語法:abs(number)
4、all函數
判斷某個可迭代對象裏是否全部爲真
語法:all(iteratble)
print(all([1,2,3,4])) # True
print(all([1,2,3,0])) # False
5、any函數
iterable裏任一元素爲真則爲True
語法:any(iterable)
6、callable函數
判斷對象是否爲可調用對象,是則返回True,否則返回False。(返回真,可能調用失敗,返回假,則肯定調用失敗)
7、dir函數
返回obj的全部屬性和方法,如果對象爲實例或類對象,則遞歸找到基類的屬性(類似上面的__dict__)
語法:dir([obj])
8、help函數
返回對象的詳細信息。非常強大
語法:help(obj)
9、pow函數
返回x的y次冪,如果z存在,則對z取餘,(比直接 pow(x, y) % z
計算更高效)
語法:pow(x,y[,z])
注意:10**2 = 100 ,10**-2 = 0.01。**是冪運算
10、round函數
返回num舍入小數點後n位精度的值
語法:round(num,[,n]),
本文爲原創,轉載請註明出處