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第十九天 关于方法,函数的更多相关文章

  1. 孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归

    孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...

  2. 孤荷凌寒自学python第二十九天python的datetime.time模块

     孤荷凌寒自学python第二十九天python的datetime.time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.time模块是专门用来表示纯时间部分的类. ...

  3. Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究

    Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: ​ 反射的概念是由Smith在1982年首次提出的 ...

  4. python第十九天-----Django进阶

    1.机智的小django为我你们提供了快捷的表单验证! from django.shortcuts import render, HttpResponse,redirect from django i ...

  5. python笔记十二(匿名函数)

    一.匿名函数 有些情况下,我们需要把函数当做参数传入到另外的函数中,或者是把函数作为某个函数的返回值,此时我们就可以使用匿名函数. 匿名函数的标志是lambda.   >>> f = ...

  6. python第十九天——感冒中

    ConfigParser模块,hashlib模块,hmac模块: 创建配置文件: import configparser config = configparser.ConfigParser()#创建 ...

  7. python六十课——高阶函数之map

    1.高阶函数: 特点:函数的形参位置必须接受一个函数对象 分类学习: 1).map(fn,lsd1,[lsd2...]): 参数一:fn --> 函数对象 参数二:lsd1 --> 序列对 ...

  8. python第二十二课——list函数

    演示list类型中常用的一些函数: 1.append(obj):将obj元素追加到列表的末尾 lt=['路费','佐罗','山治','乔巴','乌索普','纳米桑'] #append(): lt.ap ...

  9. python第十六课——外部函数and内部函数

    1.外部函数&内部函数 内部函数: 定义在某个函数的内部,就是内部函数: [注意事项]: 1).内部函数可以随意使用它外部函数中的内容 2).外部函数不能使用内部函数中的内容 3).内部函数不 ...

随机推荐

  1. java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()

    这个问题好奇怪, 出现这个错误是通用Mapper初始化的错误,排查的方向就是往这个方向,可能的情况有以下几种: .jar包冲突 <dependency> <groupId>tk ...

  2. 实现自己的HashMap

    准备工作 ,实现自己的Map.entry.代码如下 : import java.util.Map;public class MapEntry<K,V> implements Map.Ent ...

  3. 深度原理与框架-图像超分辨重构-tensorlayer

    图像超分辨重构的原理,输入一张像素点少,像素较低的图像, 输出一张像素点多,像素较高的图像 而在作者的文章中,作者使用downsample_up, 使用imresize(img, []) 将图像的像素 ...

  4. IDE 设备(磁盘/CD-ROM)配置不正确。“ide1:1”上具有一个 IDE 从设备,但没有主设备。此配置在虚拟机中无法正常运行。请使用配置编辑器将磁盘/CD-ROM 从“ide1:1”移到“ide1:0”。

    开启vmware报这个错: IDE 设备(磁盘/CD-ROM)配置不正确.“ide1:1”上具有一个 IDE 从设备,但没有主设备.此配置在虚拟机中无法正常运行.请使用配置编辑器将磁盘/CD-ROM ...

  5. python2和python3关于列表推导的差别

    看下面两个例子: python2的环境:列表中的同名变量名被替换了 >>> x = 'my precious' >>> dummy = [x for x in 'A ...

  6. jquery中的 parseJSON() 源码分析

    parseJSON: function( data ) { // Attempt to parse using the native JSON parser first if ( window.JSO ...

  7. crontab,定时任务执行找不到库or shell可执行,crontab 定时任务下就不能执行,tensorflow,ImportError: libcuda.so.1: cannot open shared object file: No such file or directory

    在线上启动一个定时任务,但是起来查看,发现任务执行找不到库,报cuda错误: ImportError: libcuda.so.1: cannot open shared object file: No ...

  8. 手机访问电脑端Wampserver2.4-x64服务

    我用的Wampserver2.4-x64 1. 先确保你的手机和电脑连在同一个局域网内. 2. Window + R, 然后输入 ipconfig,然后获取ip地址, 长这样: 192.168.XX. ...

  9. MySQL实现批量检查表并进行repair与optimize的方法

    这篇文章主要介绍了MySQL实现批量检查表并进行repair与optimize的方法,结合实例形式分析了MySQL批量修复与优化表的相关技巧,需要的朋友可以参考下 本文实例讲述了MySQL实现批量检查 ...

  10. IDEA报错No Spring WebApplicationInitializer types detected on classpath

    IDEA报错No Spring WebApplicationInitializer types detected on classpath https://my.oschina.net/sprouti ...