一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大看困惑。

今天来总结下。

 class aaa():
y = 'you'
def __init__(self):
self.y = 'me'
def foo(self,aa):
self.name = aa
return (aa) x = aaa
print("1---->",x)
print("2---->",x.y)
print("3---->",x.foo)
# print("========分割线=========") x = aaa()
print("4---->",x)
print("5---->",x.y)
# print("--------分割线---------") print("6---->",x.foo)
print("7---->",x.foo('u'))
print("8---->",x.foo('cc'))
# 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实例化了

因此得出结论。

类带括号,类实例化,

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

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

学以致用三十二-----python中函数的括号使用的更多相关文章

  1. 三十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy的暂停与重启

    scrapy的每一个爬虫,暂停时可以记录暂停状态以及爬取了哪些url,重启时可以从暂停状态开始爬取过的URL不在爬取 实现暂停与重启记录状态 1.首先cd进入到scrapy项目里 2.在scrapy项 ...

  2. python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字

    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...

  3. 对Python中函数参数类型及排序问题,三个方面的总结

    Python中函数的参数问题有点复杂,主要是因为参数类型问题导致的情况比较多,下面来分析一下. 参数类型:缺省参数,关键字参数,不定长位置参数,不定长关键字参数. 其实总共可以分为 位置参数和关键字参 ...

  4. 十二. Python基础(12)--生成器

    十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...

  5. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  6. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  7. NeHe OpenGL教程 第三十二课:拾取游戏

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. 二十二. Python基础(22)--继承

    二十二. Python基础(22)--继承 ● 知识框架   ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A:     def get(s ...

  9. SQL注入之Sqli-labs系列第三十二关(基于宽字符逃逸注入)

    开始挑战第三十二关(Bypass addslashes) 0x1查看源代码 (1)代码关键点 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 function che ...

随机推荐

  1. tornado 基于MongoDB存储 session组件开发

    1.开发伊始 根据源码中RequestHandler类中发现__init__函数中会调用自身initialize函数,此函数中为pass,即可以围绕initialize开发一系列的组件 2.开发实现 ...

  2. coderwarrior 查看程序大小 Code Size

    https://mcuoneclipse.com/2012/09/24/code-size-information-with-gcc-for-armkinetis/

  3. Ubuntu---grep

    摘要:我们已经学过正则表达式了,所以现在开始学习 grep 也是水到渠成的事情. 简介:grep 是 Linux 中最常用的“文本处理工具”之一,grep 与 sed.awk 合称为 Linux 中的 ...

  4. html页面的CSS、DIV命名规则(仅供参考学习)

    CSS命名规则: 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中: ...

  5. 10.17 elemen.js

    今天终于把element.js的官方文档看完了,主要是基础组件的用法,看的时候有种之前学bootstrap的感觉,似曾相识. 虽然它是基于VUE的,但是展示给我们的代码已经精简到不用会VUE也能看懂了 ...

  6. charles修改接口返回值

    我们在测试app时,如果想看大数据量的展示情况,可以通过charles修改接口返回值来实现. 步骤1:手机连接代理 步骤2:app端请求接口,查看charles抓包情况 步骤3:选择想要修改返回值的接 ...

  7. ios OC 关键字 copy,strong,weak,assign的区别

    一.先介绍 copy.strong.weak 的区别,如代码所示 @property(copy,nonatomic)NSMutableString*aCopyMStr; @property(stron ...

  8. Oracle数值处理函数

    1.绝对值:abs()    select abs(-2) value from dual; 2.取整函数(大):ceil()    select ceil(-2.001) value from du ...

  9. Unity3D UI适配

    直接贴图

  10. vue--1.环境搭建及创建项目

    转自https://blog.csdn.net/junshangshui/article/details/80376489 一.环境搭建及创建项目 1.安装node.js,webpack 2.安装vu ...