python第十九天 关于方法,函数
1.先从简单的函数说起
from inspect import isfunction 导入判断是否是function def foo():pass 定义了一个函数
print(foo) <function foo at 0x105657e18>
print(isfunction(foo)) True
在python中, 第3行代码表示, foo 就是一个变量, foo 指向的地址是 函数具体的执行代码
第4, 第5 行打印结果, foo 的变量类型 是 function
为什么说 foo 是一个变量呢?
用如下代码证明:
from inspect import isfunction def foo():pass
print(foo)
print(isfunction(foo)) foo = 'abc' 发现函数名 foo 可以被赋值, 所以 函数名 就是一个 变量名
print(foo) abc
print(type(foo)) <class 'str'>
print(type(foo) is str) True
2. 在类中定义一个函数
from inspect import isfunction class A:
def foo(self):pass a1 = A()
print(type(A.foo), isfunction(A.foo)) <class 'function'> True
print(type(a1.foo), isfunction(a1.foo)) <class 'method'> False
print(A.foo) <function A.foo at 0x1070eb378>
print(a1.foo) <bound method A.foo of <__main__.A object at 0x105076208>>
第7行打印结果显示, A.foo 是 function, 是函数
第8行打印结果显示, a1.foo 是 method, 是方法, 看第10行打印, 说明 foo 被 对象 a1 绑定了, 是 boud method
这说明, 在python中, 类调用的函数,还是叫函数, 对象 调用的函数, 被区分为 绑定的方法
why ???
a1.foo() 对象调用,OK
A.foo() 类名调用,报错. foo() missing 1 required positional argument: 'self'
说明, 对象调用时, python, 默认 会 把 对象的地址, 当做实参 传给 形参 self
而类名调用时, 没有实参, 传给形参,所以error.
细想一下, 也符合逻辑, 类名调用时, 传什么 给 self 也确实是个问题.
所以,打印两者的id 不同, 就存在可能了
print(id(A.foo))
print(id(a1.foo)) 因为对象调用, 默认多了一步, 把对象地址 当实参 的过程, 这个过程应该也是一步代码, 假想是: a1.foo(a1)
a1.foo() 之前 可能是 a1.foo(a1) 的封装
所以, 猜想 a1.foo 指向的是 a1.foo(a1) , 而 a1.foo(a1) 指向的是 A.foo
结论 就是 A.foo 和 a1.foo id 是不同的
python第十九天 关于方法,函数的更多相关文章
- 孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归
孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...
- 孤荷凌寒自学python第二十九天python的datetime.time模块
孤荷凌寒自学python第二十九天python的datetime.time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.time模块是专门用来表示纯时间部分的类. ...
- Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究
Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: 反射的概念是由Smith在1982年首次提出的 ...
- python第十九天-----Django进阶
1.机智的小django为我你们提供了快捷的表单验证! from django.shortcuts import render, HttpResponse,redirect from django i ...
- python笔记十二(匿名函数)
一.匿名函数 有些情况下,我们需要把函数当做参数传入到另外的函数中,或者是把函数作为某个函数的返回值,此时我们就可以使用匿名函数. 匿名函数的标志是lambda. >>> f = ...
- python第十九天——感冒中
ConfigParser模块,hashlib模块,hmac模块: 创建配置文件: import configparser config = configparser.ConfigParser()#创建 ...
- python六十课——高阶函数之map
1.高阶函数: 特点:函数的形参位置必须接受一个函数对象 分类学习: 1).map(fn,lsd1,[lsd2...]): 参数一:fn --> 函数对象 参数二:lsd1 --> 序列对 ...
- python第二十二课——list函数
演示list类型中常用的一些函数: 1.append(obj):将obj元素追加到列表的末尾 lt=['路费','佐罗','山治','乔巴','乌索普','纳米桑'] #append(): lt.ap ...
- python第十六课——外部函数and内部函数
1.外部函数&内部函数 内部函数: 定义在某个函数的内部,就是内部函数: [注意事项]: 1).内部函数可以随意使用它外部函数中的内容 2).外部函数不能使用内部函数中的内容 3).内部函数不 ...
随机推荐
- java实现字符串和LIST,MAP转换
需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- [编码实践]SpringBoot实战:利用Spring AOP实现操作日志审计管理
设计原则和思路: 元注解方式结合AOP,灵活记录操作日志 能够记录详细错误日志为运营以及审计提供支持 日志记录尽可能减少性能影响 操作描述参数支持动态获取,其他参数自动记录. 1.定义日志记录元注解, ...
- springboot+VUE(二)
入element-ui cnpm install element-ui -S 执行后,会下载element-ui的包到本地,同时会将配置加入到package.json的依赖块中. 通过命令行可以将最新 ...
- 解决uni-app props 传递数组修改后不能使用问题
1.子组件页面结构 //NoticesMarquee 组件 <view v-for="(item, index) in tempList" :key="index& ...
- 定制你自己的vim编辑器
今天定制了一下自己的vim编辑器,效果嘛,谁用谁知道!话不多说,直奔主题.vim编辑器的配置都在/etc/vimrc文件中. #vim /etc/vimrc 打开配置文件,在尾部添加如下的,不是全都必 ...
- JAVA Freemarker + Word 模板 生成 Word 文档 (普通的变量替换,数据的循环,表格数据的循环,以及图片的东替换)
1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml 然后用模板替换变量的方式 1.1,这种方式虽然可行,但是生成的 xml 是在是太乱了,整理 ...
- bootstrap之bootstrap-table插件使用心得以及实现过程
1.首先一个页面(增删改查) 2.实现增删改查(一个框架) 3.编码问题(前端meta utf-8:引用中文包:contentType参数区utf-8的设置:响应的utf-8的编码设置) 4.多条件查 ...
- docker swarm集群搭建以及使用滚动更新
基础环境,三台虚拟机 172.17.3.70 172.17.3.71 172.17.3.72 系统配置:centos 7,关闭selinux 需要优化的基础配置: [root@sw1 ~]# vim ...
- 用Nginx+Lua+Redis给百度鹰眼API服务搭建缓存服务中间件(记录过程)
一.环境安装部分 Centos7,Nginx1.14,Redis5.0,luajit-2.1,ngx_devel_kit-0.3.1rc1,lua-nginx-module-0.10.14. 下载安装 ...
- SpringBoot之Swagger2
SpringBoot利用Swagger2只需配置少量的注解信息便能方便地构建强大的API文档. 1.添加maven依赖 2.创建Swagger2配置类 3.在API添加文档内容 4.访问http:// ...