• 学以致用三十二-----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实例化了

    因此得出结论。

    类带括号,类实例化,

    函数带括号,执行函数,返回函数的结果

    否则不执行,只是调用类或函数本身。

  • 相关阅读:
    ORA-01940: cannot drop a user that is currently connected解决方法
    Git基本用法简介
    C 入门 第十节 存储区
    C 入门 第九节 结构体指针
    C 入门 第八节 指针
    C 入门 第七节 结构体
    C 入门 第六节 自定义函数
    C 入门 第五节 多维数组 字符串数组
    C 入门 第四节
    C 入门 第三节
  • 原文地址:https://www.cnblogs.com/liongong/p/9923657.html
Copyright © 2020-2023  润新知