鱼C论坛

 找回密码
 立即注册
查看: 1266|回复: 6

[已解决]两个代码应如何修改才不会出现None?

[复制链接]
发表于 2023-5-25 11:52:33 | 显示全部楼层 |阅读模式

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

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

x
def fun1():
        print('fun1()正在被调用…')
        def fun2():
                print('fun2()正在被调用…')
                return
        fun2()
>>> print(fun1())
fun1()正在被调用…
fun2()正在被调用…
None # 不想出现这行



def fun1():
        print('fun1()正在被调用…')
        def fun2():
                print('fun2()正在被调用…')
                return
        return fun2()
>>> print(fun1())
fun1()正在被调用…
fun2()正在被调用…
None # 不想出现这行
最佳答案
2023-5-26 19:59:26
lzb1001 发表于 2023-5-26 12:15
感谢解答。

1、第一个代码中,因为`fun1()`没有返回任何值,

是的,您的理解基本上是正确的。

对于原代码1,因为 fun1() 函数没有返回任何值,所以执行 print(fun1()) 时会先输出 fun1()正在被调用… 和 fun2()正在被调用… 这两行,然后再输出 None,表示函数 fun1() 没有返回值。如果只想输出 fun1()正在被调用… 和 fun2()正在被调用… 这两行,可以直接调用函数 fun1() 而不使用 print(),如下所示:


  1. fun1()
复制代码

对于原代码2,因为 fun2() 函数有返回值,但是在 fun1() 函数中没有进行处理,所以执行 print(fun1()) 时同样会输出 fun1()正在被调用… 和 fun2()正在被调用… 这两行,然后再输出返回值 None。如果只想输出 fun1()正在被调用… 和 fun2()正在被调用… 这两行,可以将 return fun2() 改为 fun2() 来避免返回值的影响,如下所示:

  1. def fun1():
  2.         print('fun1()正在被调用…')
  3.         def fun2():
  4.                 print('fun2()正在被调用…')
  5.         fun2()

  6. fun1()
复制代码

不需要使用 print() 就可以直接调用函数 fun1() 来输出结果。

给我最佳答案呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-25 11:53:16 | 显示全部楼层
第一个代码中, fun1() 没有返回值,因此当我们在 print() 语句中调用 fun1() 时,它返回 None 。为了避免出现 None ,我们可以将 fun1() 中的 fun2() 函数的返回值返回给 fun1() 。

修改后的代码如下:
  1. def fun1():
  2.     print('fun1()正在被调用…')
  3.     def fun2():
  4.         print('fun2()正在被调用…')
  5.     return fun2()
  6. print(fun1())
复制代码

第二个代码中, fun1() 中的 return 语句返回的是 fun2() 函数的返回值,但是 fun2() 函数没有返回值,因此 fun1() 的返回值为 None 。为了避免出现 None ,我们可以将 fun2() 函数的返回值改为一个非 None 的值。

修改后的代码如下:
  1. def fun1():
  2.     print('fun1()正在被调用…')
  3.     def fun2():
  4.         print('fun2()正在被调用…')
  5.         return 0
  6.     return fun2()
  7. print(fun1())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-25 12:33:21 | 显示全部楼层
本帖最后由 lzb1001 于 2023-5-25 12:35 编辑
isdkz 发表于 2023-5-25 11:53
第一个代码中, fun1() 没有返回值,因此当我们在 print() 语句中调用 fun1() 时,它返回 None 。为了避免 ...


第一个代码不行吧,看看下面的结果还是有一个None:

def fun1():
        print('fun1()正在被调用…')
        def fun2():
                print('fun2()正在被调用…')
        return fun2()

>>> print(fun1())
fun1()正在被调用…
fun2()正在被调用…
None


第二个代码可以直接这样改吧,刚试的:

def fun1():
        print('fun1()正在被调用…')
        def fun2():
                return 'fun2()正在被调用…'
        return fun2()

>>> print(fun1())
fun1()正在被调用…
fun2()正在被调用…
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-25 22:49:41 | 显示全部楼层
第一个代码中,因为`fun1()`没有返回任何值,所以`print(fun1())`会输出`None`。要去掉这行,只需要将`print(fun1())`改为`fun1()`即可。

修改后的代码如下:


  1. def fun1():
  2.     print('fun1()正在被调用…')
  3.     def fun2():
  4.         print('fun2()正在被调用…')
  5.         return
  6.     fun2()

  7. fun1() # 不需要再加上print
复制代码

第二个代码中,因为`fun2()`有返回值,但是`fun1()`没有对其进行处理,所以仍然会输出`None`。要去掉这行,只需要将`fun2()`改为`return fun2()`即可。

修改后的代码如下:


  1. def fun1():
  2.     print('fun1()正在被调用…')
  3.     def fun2():
  4.         print('fun2()正在被调用…')
  5.         return
  6.     return fun2()

  7. fun1() # 不需要再加上print
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-26 08:05:49 | 显示全部楼层
最后一行 不要加 print 就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-26 12:15:16 | 显示全部楼层
本帖最后由 lzb1001 于 2023-5-26 12:31 编辑
sfqxx 发表于 2023-5-25 22:49
第一个代码中,因为`fun1()`没有返回任何值,所以`print(fun1())`会输出`None`。要去掉这行,只需要将`prin ...


感谢解答。

1、第一个代码中,因为`fun1()`没有返回任何值,

----按你发的,代码没有修改,也就是说fun1()`仍然没有返回任何值吧?

2、第二个代码中,因为`fun2()`有返回值,但是`fun1()`没有对其进行处理,所以仍然会输出`None`。要去掉这行,只需要将`fun2()`改为`return fun2()`即可。

---我发的代码中不就是return fun2()嘛?


看了大神的解答,也就是说两个原代码都不用改变,只要改调用的形式即可

即:只要把两个print都去掉就行

对吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-26 19:59:26 | 显示全部楼层    本楼为最佳答案   
lzb1001 发表于 2023-5-26 12:15
感谢解答。

1、第一个代码中,因为`fun1()`没有返回任何值,

是的,您的理解基本上是正确的。

对于原代码1,因为 fun1() 函数没有返回任何值,所以执行 print(fun1()) 时会先输出 fun1()正在被调用… 和 fun2()正在被调用… 这两行,然后再输出 None,表示函数 fun1() 没有返回值。如果只想输出 fun1()正在被调用… 和 fun2()正在被调用… 这两行,可以直接调用函数 fun1() 而不使用 print(),如下所示:


  1. fun1()
复制代码

对于原代码2,因为 fun2() 函数有返回值,但是在 fun1() 函数中没有进行处理,所以执行 print(fun1()) 时同样会输出 fun1()正在被调用… 和 fun2()正在被调用… 这两行,然后再输出返回值 None。如果只想输出 fun1()正在被调用… 和 fun2()正在被调用… 这两行,可以将 return fun2() 改为 fun2() 来避免返回值的影响,如下所示:

  1. def fun1():
  2.         print('fun1()正在被调用…')
  3.         def fun2():
  4.                 print('fun2()正在被调用…')
  5.         fun2()

  6. fun1()
复制代码

不需要使用 print() 就可以直接调用函数 fun1() 来输出结果。

给我最佳答案呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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