鱼C论坛

 找回密码
 立即注册
查看: 1834|回复: 3

[已解决]关于Python中函数定义问题

[复制链接]
发表于 2017-5-23 21:48:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def a():
        print("调用函数a")
        b()

def b():
        print("调用函数b")

a()

调用函数a
调用函数b




def a():
        print("函数a()正在被调用")
        b()
        def b():
                print("函数b()正在被调用")

a()
函数a()正在被调用
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    a()
  File "<pyshell#30>", line 3, in a
    b()
UnboundLocalError: local variable 'b' referenced before assignment




为什么前边的不会报错,后边的会报错。
最佳答案
2017-5-23 21:59:27
你应该把 b() 这个函数先定义,再去调用它,你不能先去调用 b() 这个函数再去定义这个函数

正如它报错给的:

local variable 'b' referenced before assignment('b' 这个本地变量在定义之前)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-23 21:59:27 | 显示全部楼层    本楼为最佳答案   
你应该把 b() 这个函数先定义,再去调用它,你不能先去调用 b() 这个函数再去定义这个函数

正如它报错给的:

local variable 'b' referenced before assignment('b' 这个本地变量在定义之前)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-23 22:43:43 | 显示全部楼层
零度非安全 发表于 2017-5-23 21:59
你应该把 b() 这个函数先定义,再去调用它,你不能先去调用 b() 这个函数再去定义这个函数

正如它报错给 ...

def a():
        print("调用函数a")
        b()

def b():
        print("调用函数b")

a()

调用函数a
调用函数b


这样写,在调用函数a()的时候才会调用函数b(),此时编译器认为函数b()已经被定义了。
所以才不会报错,我理解的没错吧。

编译器会查看函数内部的语句么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-24 09:58:53 | 显示全部楼层
景命 发表于 2017-5-23 22:43
def a():
        print("调用函数a")
        b()

当 Python 运行到 def 语句时,它将会生成一个新的对象并将其赋值给这个函数名

就像所有赋值一样,函数名变成了某一个函数的引用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表