Python--內置屬性、函數(常見部分)

內置屬性

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]),

 

 

本文爲原創,轉載請註明出處

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章