5695585 发表于 2020-5-9 22:18:52

Python函数是不是不需要声明

在课后练习中

我发现好像PYTHON的函数随便放到哪儿,只需要定义,不需要声明

是这样的吗?

相当于写在前面的代码可以调用写在后面的函数

永恒的蓝色梦想 发表于 2020-5-9 22:21:01

相当于写在前面的代码可以调用写在后面的函数不行,如果前面那段代码运行的时候函数还没定义就会报错

老八秘制 发表于 2020-5-9 22:26:04

根据全世界精神正常程序猿遵守的DRY原则,你尽量在代码的开头定义函数再在后面的代码调用
如果先调用后定义会报错,py在调用函数时不会检测后面有没有定义

5695585 发表于 2020-5-9 22:45:20

永恒的蓝色梦想 发表于 2020-5-9 22:21
不行,如果前面那段代码运行的时候函数还没定义就会报错

有个课后习题是这样的哦
def next():
    print('我在next()函数里...')
    pre()
def pre():
    print('我在pre()函数里...')

next()
问输出什么
结果是两句都会输出

解释是:
有些编程语言不够“聪明”,向这类向前引用的方式会导致报错,但Python足够“醒目”,这段代码是正确的!
会输出:
我在next()函数里...
我在pre()函数里...

永恒的蓝色梦想 发表于 2020-5-10 08:37:13

5695585 发表于 2020-5-9 22:45
有个课后习题是这样的哦
def next():
    print('我在next()函数里...')


next 运行的时候 pre 不是定义了嘛?


换成def next():
    print('我在next()函数里...')
    pre()

next()

def pre():
    print('我在pre()函数里...')就会报错

5695585 发表于 2020-5-10 09:01:02

永恒的蓝色梦想 发表于 2020-5-10 08:37
next 运行的时候 pre 不是定义了嘛?




pre的定义看缩进不是在next里面的呀

它是next执行完了才def的

next那个只是调用吧

永恒的蓝色梦想 发表于 2020-5-10 09:02:03

5695585 发表于 2020-5-10 09:01
pre的定义看缩进不是在next里面的呀

它是next执行完了才def的


对啊,但是函数调用之前又不会运行

hrp 发表于 2020-5-10 09:17:54

def next():
    print('我在next()函数里...')
    pre()
def pre():
    print('我在pre()函数里...')

next()
你给整段代码打上断点然后观察它怎么运行的,你会发现它会先走到def next():,然后到def pre():(这两个都是读取定义,不是执行),然后走到next(),也就是说,你这段代码函数运行前,函数定义都已经实现了,所以运行不会出错。

像 蓝色梦想 给的那段代码:
def next():
    print('我在next()函数里...')
    pre()

next()

def pre():
    print('我在pre()函数里...')
它是这样走的:def next()>next()>print('我在next()函数里...')>pre()>函数pre未定义,报错(因为程序根本就没读到过函数定义def pre())

liuzhengyuan 发表于 2020-5-10 11:01:52

5695585 发表于 2020-5-10 09:01
pre的定义看缩进不是在next里面的呀

它是next执行完了才def的


你可以理解为函数定义时一起的

5695585 发表于 2020-5-10 11:07:53

本帖最后由 5695585 于 2020-5-10 11:09 编辑

永恒的蓝色梦想 发表于 2020-5-10 08:37
next 运行的时候 pre 不是定义了嘛?




def next():
    print('我在next()函数里...')
    pre()

next()

def pre():
    print('我在pre()函数里...')

我试了一下,这样会报错

但是这样就不会,我还是不理解

def next():
    print('我在next()函数里...')
    pre()

    next()

def pre():
    print('我在pre()函数里...')
next()

5695585 发表于 2020-5-10 11:10:07

hrp 发表于 2020-5-10 09:17
你给整段代码打上断点然后观察它怎么运行的,你会发现它会先走到def next():,然后到def pre():(这两个 ...

请问怎么单步调试呀在哪里设置

永恒的蓝色梦想 发表于 2020-5-10 11:17:06

5695585 发表于 2020-5-10 11:07
我试了一下,这样会报错

但是这样就不会,我还是不理解

第一个,pre() 在 pre 被定义前之前调用,报错
第二个,pre() 在 pre 定义之后调用,没问题

hrp 发表于 2020-5-10 13:26:51

5695585 发表于 2020-5-10 11:10
请问怎么单步调试呀在哪里设置

看你用的什么编辑器了,pycharm在有代码的行号后面点一下出来红点,然后debug。vscode在行号前面点出红点,然后调试。

Tip0 发表于 2020-5-10 14:05:53

需要吧,代码都是一行行下来的
页: [1]
查看完整版本: Python函数是不是不需要声明