学以致用三十二-----python中函数的括号使用
一直以来对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中函数的括号使用的更多相关文章
- 三十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy的暂停与重启
scrapy的每一个爬虫,暂停时可以记录暂停状态以及爬取了哪些url,重启时可以从暂停状态开始爬取过的URL不在爬取 实现暂停与重启记录状态 1.首先cd进入到scrapy项目里 2.在scrapy项 ...
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...
- 对Python中函数参数类型及排序问题,三个方面的总结
Python中函数的参数问题有点复杂,主要是因为参数类型问题导致的情况比较多,下面来分析一下. 参数类型:缺省参数,关键字参数,不定长位置参数,不定长关键字参数. 其实总共可以分为 位置参数和关键字参 ...
- 十二. Python基础(12)--生成器
十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- NeHe OpenGL教程 第三十二课:拾取游戏
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 二十二. Python基础(22)--继承
二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ...
- SQL注入之Sqli-labs系列第三十二关(基于宽字符逃逸注入)
开始挑战第三十二关(Bypass addslashes) 0x1查看源代码 (1)代码关键点 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 function che ...
随机推荐
- 《Dare To Dream》第七次作业:团队项目设计完善&编码测试
任务一:团队项目<软件设计方案说明书>Github链接:https://github.com/Sophur/Team-Project 任务二:项目集成开发环境: (1)JSP技术 JSP( ...
- lucene复合条件查询案例——查询name域 或 description域 包含lucene关键字的两种方式
方式一:使用语法表达式查询 //查询name域 或 description域包含lucene关键字 QueryParser queryParser = new QueryParser("na ...
- python中re正则表达式
1.re匹配的语法 re.math 从头开始匹配,没有匹配到返回None re.seach 匹配包含,,没有匹配到返回None re.findall 把所有匹配到的字符,以列表的形式返回,没有匹配到返 ...
- Synchronized的几种用法
https://blog.csdn.net/luoweifu/article/details/46613015
- Checkbox的只读设置
readonly和disabled属性均不生效.可按如下方式处理,记得引入jquery.js文件 <input type="checkbox" name="chk& ...
- Ubuntu 16.04 安装的那点事
通常,Ubuntu都是与windows共存——安装成双系统的 如果在虚拟机上安装,请参照 https://blog.csdn.net/wyx100/article/details/51582617 U ...
- 关于jqGrid组件表格无法自适应宽度问题
今天生成了一个4列的表格,但是无法自适应宽度,使用 $(window).resize(function(){ $(window).unbind("onresize"); $(&qu ...
- Month format:number to English abbre
``` DATA LV_MONTH TYPE FCKTX. CLEAR:LV_MONTH,lv_date. SELECT SINGLE KTX INTO LV_MONTH FROM T247 WHER ...
- 关于Mybatis浅谈
1. 历史 MyBatis本是apache的一个开源项目iBatis. 2010年这个项目由apache software foundation 迁移到了google code,并且取名为MyBati ...
- spring注解式参数校验
很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者返回异常时的校验信息,在代码中相当冗长,今天我们就来学习spring注解式参数校验. 其实就是:hibernate的validator. 开始啦. ...