lzb1001 发表于 2023-5-25 11:52:33

两个代码应如何修改才不会出现None?

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 # 不想出现这行

isdkz 发表于 2023-5-25 11:53:16

第一个代码中, fun1() 没有返回值,因此当我们在 print() 语句中调用 fun1() 时,它返回 None 。为了避免出现 None ,我们可以将 fun1() 中的 fun2() 函数的返回值返回给 fun1() 。

修改后的代码如下:

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

print(fun1())


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

修改后的代码如下:

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

print(fun1())

lzb1001 发表于 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()正在被调用…

sfqxx 发表于 2023-5-25 22:49:41

第一个代码中,因为`fun1()`没有返回任何值,所以`print(fun1())`会输出`None`。要去掉这行,只需要将`print(fun1())`改为`fun1()`即可。

修改后的代码如下:


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

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

修改后的代码如下:


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

fun1() # 不需要再加上print

qq1151985918 发表于 2023-5-26 08:05:49

最后一行 不要加 print 就好了

lzb1001 发表于 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都去掉就行

对吧?

sfqxx 发表于 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(),如下所示:


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

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

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

给我最佳答案呗{:10_254:}
页: [1]
查看完整版本: 两个代码应如何修改才不会出现None?