學以致用三十二-----python中函數的括號使用


一直以來對python中函數括號的使用,有點分不清楚,到底什么時候用括號,什么時候不用括號,造成了很大看困惑。

今天來總結下。

 1 class aaa():
 2     y = 'you'
 3     def __init__(self):
 4         self.y = 'me'
 5     def foo(self,aa):
 6         self.name = aa
 7         return (aa)
 8 
 9 x = aaa
10 print("1---->",x)
11 print("2---->",x.y)
12 print("3---->",x.foo)
13 # print("========分割線=========")
14 
15 x = aaa()
16 print("4---->",x)
17 print("5---->",x.y)
18 # print("--------分割線---------")
19 
20 print("6---->",x.foo)
21 print("7---->",x.foo('u'))
22 print("8---->",x.foo('cc'))
23 # print("~~~~~~~~分割線~~~~~~~~~")

執行結果:

1----> <class '__main__.aaa'>
2----> you
3----> <function aaa.foo at 0x000001F6592626A8>
4----> <__main__.aaa object at 0x000001F659296B70>
5----> me
6----> <bound method aaa.foo of <__main__.aaa object at 0x000001F659296B70>>
7----> u
8----> cc

根據結果來分析:

1、 x = aaa     aaa是一個類名,后面沒加括號,打印結果 ,表明x是個類

2、 由於沒有加括號,類沒有實例化,y為公有屬性,因此x.y打印的結果為you

3、foo為aaa類中的函數,稱為方法或屬性,同時 foo后面也未加括號,打印結果為foo在內存中的地址

     注意,此時 print(x.foo())或者 print(x.foo('aa')) 都會報錯,   

print(x.foo())
TypeError: foo() missing 2 required positional arguments: 'self' and 'aa'

print(x.foo('aa'))
TypeError: foo() missing 1 required positional argument: 'aa'

由此可見,根據提示,foo后面應該帶兩個參數,這里為啥要帶兩個參數呢。因為x沒有初始化,x沒有作為參數傳到foo函數里

所以

print(x.foo(x,'cc'))
print(x.foo(aaa,'cc'))

得到結果 cc 

               cc

可以看出,這里self指的是類本身

4、 x = aaa()   類aaa后面帶括號,打印結果 aaa 類內存中的地址

5、由於x = aaa() 表示aaa被實例化,因此會調用構造方法中的y,打印結果是self.y的值

6、表示foo是類中的方法,foo沒有帶括號,不執行函數。

7和8 ,foo帶括號,執行foo函數。此處 foo里只帶一個參數“u” 或者"cc" ,並沒有和上面提到的帶兩個參數,因為aaa實例化了

因此得出結論。

類帶括號,類實例化,

函數帶括號,執行函數,返回函數的結果

否則不執行,只是調用類或函數本身。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM