学以致用三十二-----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实例化了
因此得出结论。
类带括号,类实例化,
函数带括号,执行函数,返回函数的结果
否则不执行,只是调用类或函数本身。