python 函数调用顺序
def foo():
print ('in the foo')
bar()
def bar():
print ('in the bar')
foo()
1.foo函数进入内存
2.bar函数进入内存
3.foo()开始实例化使用foo函数。
4.调用已经进入内存的foo函数,运行到第三行,这时因为第二部bar已经进入内存了,所以直接可以引用bar函数。
总结:python 函数调用的顺序是先把函数的虚拟先放进去,从上到下,一直放到foo()函数之前。然后遇到foo函数就开始跑这个foo函数。foo之后的函数还没有进入。
当然这里面还有最重要一点不是废话,其实上面的东西很浅显基本废话。这句不是废话说的是,函数放入内存,只是形式上放一下,并不是真正跑他的内容,这样就导致了第三行bar()其实是在第四行def bar()被装进内存后才进行启动的。上面4个步奏中的第一步foo函数进入内存只是形式进入,只有当3foo()开始第三行的bar(),也就是真正的第一次运行第三行的bar().
比如下面 的就是错误
def foo():
print ('in the foo')
bar()
foo()
def bar():
print ('in the bar')
python 函数调用顺序的更多相关文章
- python函数调用顺序、高阶函数、嵌套函数、闭包详解
一:函数调用顺序:其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用错误示范: def foo(): print 'in the foo' bar() foo() 报错: i ...
- java初始化构造函数调用顺序
类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值: (2)调用父类构造函数: (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式: (4)调用本身构造函数. 例子 ...
- c++深/浅拷贝 && 构造函数析构函数调用顺序练习题
1.深/浅拷贝 编译器为我们提供的合成拷贝构造函数以及合成的拷贝赋值运算符都是浅拷贝.浅拷贝只是做简单的复制,如果在类的构造函数中new出了内存,浅拷贝只会简单的复制一份指向该内存的指针,而不会再开辟 ...
- 一个能让你了解所有函数调用顺序的Android库
http://mobile.51cto.com/android-536059.htm 原理 本库其实并没有什么黑科技,本库也没有java代码,核心就是2个build.gradle中的task.首先,原 ...
- python函数调用时参数传递方式
python函数调用时参数传递方式 C/C++参数传递方式 对于C程序员来说,我们都知道C在函数调用时,采用的是值传递,即形参和实参分配不同的内存地址,在调用时将实参的值传给实参,在这种情况下,在函数 ...
- python = 赋值顺序 && C++ side effect
title: python = 赋值顺序 && C++ side effect date: 2020-03-17 15:00:00 categories: [python][c++] ...
- python实现顺序表
python实现顺序表可以有两中形式进行存储 列表 元组 其实简单来说,顺序表无非就是操作列表和元组的方法来对顺序表进行操作. 实例代码 7 class SqList: 8 def __init__( ...
- python 双层函数调用顺序
读大神代码,见到大神封装的接口很多都是采用双层函数形式. def 外层函数(外层参数) def 内层函数(内层参数) 函数体 return 值 return 内层函数 类似这样的形式,使用 外层函数( ...
- iOS开发app启动原理及视图和控制器的函数调用顺序
main()函数是整个程序的入口,在程序启动之前,系统会调用exec()函数.在Unix中exec和system的不同在于,system是用shell来调用程序,相当于fork+exec+waitpi ...
随机推荐
- 批量更新list<string,string>
public void UpdateList(List<MysqlModule.Model.pro_premanifest> modelList) { List<MySqlParam ...
- NBU 还原LINUX ORACLE RAC数据库(CRM)
CRM集群数据库恢复 linux centos 6.6 oracle 11.2.0.3 集群环境 1.53 oraclea 1.54 oracleb 在linux操作系统root用户下安装好NBUci ...
- 设置,获取,删除cookie
function setCookie(key,value,options){ if (value !== undefined ) { if(options === undefined || optio ...
- 如何添加Modeling 菜单
创建page 在protal settings的cdoform中add new item 在modeing中就可以使用该对象对应的维护页面了.
- javascript学习笔记(六):对象、内置对象
创建对象 对象属性赋值的方式 <!DOCTYPE html> <html> <head lang="en"> <meta chaset=& ...
- Springmvc配置时间日期转换
1.局部日期转换 @Controller public class ProductController{ @RequestMapping(value="/test/springmvc.do& ...
- 修改Eclipse主题与Eclipse中使用SVN
自从开始IDEA后,很久没用eclipse了,有位老同学问我eclipse中如何使用SVN?我就打开eclipse试试,白光太刺眼了~作为强迫症修改下主题.结果如下: 修改完编辑的背景颜色,并没有很好 ...
- centos 7 搭建openvpn-2.4.6
参考:https://blog.csdn.net/weixin_42250094/article/details/80384863 http://www.startupcto.com/server-t ...
- Vue之组件
Vue之全局组件 全局组件可以被任何局部组件调用 <div id="app"> <!--这里是组件的使用--> <global-component&g ...
- 【转】Spring、Spring MVC、MyBatis整合文件配置详解
见:http://www.tuicool.com/articles/eyINveF web.xml的配置 web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经支持注解配置方式 ...