python 前向引用

即函数调用在函数定义之前

可以这样

def bbb():
    print(‘this is b‘)
    aaa()
def aaa():
    print(‘this is a‘)
bbb()
--------->
this is b
this is a

可以这样

def aaa():
    print(‘this is a‘)
def bbb():
    print(‘this is b‘)
    aaa()
bbb()
----------->
this is b
this is a

但不可以这样

def bbb():
    print(‘this is b‘)
    aaa()
bbb()
def aaa():
    print(‘this is a‘)
--------->
Traceback (most recent call last):
this is b
  File "E:/pycharm/TEST.py", line 600, in <module>
    bbb()
  File "E:/pycharm/TEST.py", line 599, in bbb
    aaa()
NameError: name ‘aaa‘ is not defined

  

时间: 2024-10-27 13:08:07

python 前向引用的相关文章

Python之函数、参数、局部全局变量、前向引用、递归

函数 函数:实现某种功能(数学形式.python def函数式编程) 过程:就是函数没有返回值 参数 1.形参 实参 位置参数 关键字参数 默认参数 1 # 形参x,y不分配内存空间 实参2,3在调用的时候才分配空间,调用完毕就释放空间 2 def calc(x, y): 3 res = x ** y 4 return res 5 6 7 c = calc(2, 3) 8 print(c) 9 10 11 def test(x, y, z): 12 print(x) 13 print(y) 14

python的计数引用分析(一)

python的垃圾回收采用的是引用计数机制为主和分代回收机制为辅的结合机制,当对象的引用计数变为0时,对象将被销毁,除了解释器默认创建的对象外.(默认对象的引用计数永远不会变成0) 所有的计数引用+1的情况: 一.对象被创建:1.a = 23 这里23这个对象并没有在内存中新建,因为在Python启动解释器的时候会创建一个小整数池,-5~256之间的这些对象会被自动创建加载到内存中等待调用:a = 23是为23这个整数对象增加了一个引用.执行代码: >>> import sys >

java 报错非法的前向引用

今天在看<thinking in java>的时候,第四章提到了非法的前向引用,于是自己试了一下,书中的例子倒是一下就明白了,但是自己写的一个却怎么也不明白,于是上网问了一位前辈,终于明白啦! 这个是错误的代码: class BB { static int a = 0 ; public BB() { a++ ; System.out.println("执行BB" + a) ; } public void printA() { System.out.println("

iOS开发类别的前向引用

类别(category)除了可以对类进行扩展外,前向引用的能力也很强大.对于一些私有的方法(没有在.h文件里面声明的方法)如果我们想使用的话,有的使用的是performSelector来执行动态调用,这样完全可以调用私用方法,但是这样完全避开了编译器的语法检查,有时候未必是一种好的方法.使用类别来进行前向引用可以解决这个问题. 定义一个item类 @interface ZJItem : NSObject - (void)info; @end .m文件 @implementation ZJItem

Javac编译时报“非法的前向引用”,以及Eclipse自带的Java编译器的缺陷

编译以下类的时候,如果切换WARNING_LEVEL的赋值方式为"= StatusDef.WARNING",javac会报"非法的前向引用". Eclipse自带的编译器会编译通过,这是Eclipse编译器的一个缺陷. 产生这个编译错误的原因是,cinit方法是按照字段在源码中的声明顺序依次执行各个初始化代码段. 对于ForwardReference类,cinit方法依次执行以下功能: 通过NORMAL_LEVEL的数值,创建C0000_1字段. 在ForwardR

Python的模块引用和查找路径

模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中的一个.cs文件,Java中的一个.java或者编译后的.class文件可以认为是一个模块(但常常不表述为模块):对于解释型的语言会更加直观些,比如PHP的.php文件,在Python中就是.py文件可以认为是一个模块.在"模块"之上有"包",主要是

python之import引用

关于python的import引用的最大关键是init.py文件的作用,这个文件对于import的方法使用至关重要. 这个是我在搭建自动化框架过程中用到的import的方法使用. 比如说,我现在login.py想引用bottom底下的log.py的时候,这个时候,我们如何引用呢? from bottom import log 又比如说,我现在想在test文件中引用login.py那这个时候如何引用? from case.login import login 又比如说,我想在test.py中引用l

Python 对象的引用计数和拷贝

Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己,可通过内建函数id(obj)查看. 2.type,对象的类型决定了该对象可以保存什么类型的值,可用内建函数type(obj)查看: 3.value,即对象的值. 下面是一个例子: >>> str = "hello world" >>> type(str

python中的引用

作为一个python初学者,今天被一个python列表和词典引用的问题折磨了很久,但其实了解了缘由也很简单,记录在此备忘. 首先背书python中的引用对象问题: 1. python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方式.实际上,这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象.如果函数收到的是一个不可变对象(比如数字.字符或者元组)的引用,就不能