阿力杨_大东愿景 2022-07-30 10:32 采纳率: 100%
浏览 34
已结题

Python定义函数的问题

能得到正确意向的代码:


def break_words(stuff):
    words=stuff.split(' ')
    print(words)

sentence="All good things come to those who wait."
break_words(sentence)

其输出是:

['All','good','things','come','to','those','who','wait']

然而,为什么下列代码没有输出或错误呢?
1️⃣,代码如下:

def break_words(stuff):
    words=stuff.split(' ')
    return words
    print(words)

sentence="All good things come to those who wait."
break_words(sentence)

其输出结果是:

No Output

2️⃣,代码如下:

def break_words(stuff):
    words=stuff.split(' ')
    return words

sentence="All good things come to those who wait."
break_words(sentence)
print(words)

其输出结果是:

Traceback (most recent call last):
    File "file0.py", line7, in <module>
      print(words)
NameError: name 'words' is not defined.

能得到您的帮助,是我莫大的荣幸,谢谢您,希望您能给予我帮助,谢谢!

  • 写回答

4条回答 默认 最新

  • 『Knight』 2022-07-30 11:19
    关注

    -------------------------------------------------------------------------------------首先对于第一段代码的问题----------------------------------------------------------------
    解释器运行此代码,第1行定义一个函数然后一开始不进入函数,直接跳2到 第6行发现定义一个变量,第7行把变量传到函数并执行函数,函数里面第2行切割字符串,此时worlds为['All','good','things','come','to','those','who','wait']然后第3行看到了return worlds解释器直接退出函数并把words返回。所以不会执行下面第4行的print(words),同时第7行执行函数时你没有找变量把函数返回的给存起来当然也就不会有值打印出来
    可以改为一下代码

    def break_words(stuff):
        words = stuff.split(' ')
        return words
    
    
    sentence = "All good things come to those who wait."
    print(break_words(sentence))  # 直接将返回值打印出来
    

    -------------------------------------------------------------------------------------------------对于第二段代码----------------------------------------------------------------------
    你可能意识到了return的问题但是你再这段代码有一个错误:你试图在全局里访问局部变量worlds,worlds只是函数里面的值即函数里的局部变量,当代码执行到return worlds时函数将worlds的值返回,然后就释放被函数占用的空间即worlds的空间也被释放掉了,况且即使没释放掉你在全局也访问不了局部变量,函数是单独开辟了一个空间来存相关的内容的,在局部你可以访问全局的变量。如果你非要这么做那么把worlds设置为全局变量就好了

    def break_words(stuff):
        global words
        words = stuff.split(' ')
        return words
    
    
    sentence = "All good things come to those who wait."
    break_words(sentence)
    print(words)
    
    

    global words来声明是全局变量
    但是最好不要这样,毕竟这样做了你相当于在局部里面定义全局变量

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月7日
  • 已采纳回答 7月30日
  • 修改了问题 7月30日
  • 创建了问题 7月30日

悬赏问题

  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答