paulwang 发表于 2022-10-19 17:38:14

python 中print 返回值为 None 为什么

我做了一个测试
a='()()()('
b=[]
b=b.extend(a)

print(b)的时候范围值为None

我理解操作的时候没必要用 b=   直接b.extend(a)就好了
但是我就是想知道为什么b=b.extend(a) 操作的时候 打印 b 会是None 呢?

tommyyu 发表于 2022-10-19 17:44:10

b.extend(a)是将a添加到b中,而b = b.extend(a)中,b.extend(a)的返回值是None,所以b就是None.

jackz007 发表于 2022-10-19 17:57:37

本帖最后由 jackz007 于 2022-10-19 19:36 编辑

          列表属于可修改对象,也就是说,对象的方法具有自修改能力,无需赋值,所以,可修改对象的的绝大部分方法都是无返回值的,像楼主使用的 extend() 就属于其中之一,这种方法直接调用就好,对象即可自行修改到位,不可以赋值。
a='()()()('
b=[]
b.extend(a)
print(b)

paulwang 发表于 2022-10-20 10:15:10

jackz007 发表于 2022-10-19 17:57
列表属于可修改对象,也就是说,对象的方法具有自修改能力,无需赋值,所以,可修改对象的的绝大 ...

我现在理解了有可能后面的课程会讲, 我还没学到吧!
其实对一个变量赋值的话必须是那个值要有返回值的,不然的话赋的值就不存在了。
并且用条件判断的话也必须是 两边的返回值进行判断,对吧!
假如入a=b=[]那么b.extend(a)==a 也是false的, 因为左边的没有返回值,右边的有

那这里就有一个情况了 没有返回值是不是就是等于 空呢? 我测试了下也不相等 那么None 仅仅是代表没有返回值的意思吧?

paulwang 发表于 2022-10-20 10:15:54

jackz007 发表于 2022-10-19 17:57
列表属于可修改对象,也就是说,对象的方法具有自修改能力,无需赋值,所以,可修改对象的的绝大 ...

我现在理解了有可能后面的课程会讲, 我还没学到吧!
其实对一个变量赋值的话必须是那个值要有返回值的,不然的话赋的值就不存在了。
并且用条件判断的话也必须是 两边的返回值进行判断,对吧!
假如入a=b=[]那么b.extend(a)==a 也是false的, 因为左边的没有返回值,右边的有

那这里就有一个情况了 没有返回值是不是就是等于 空呢? 我测试了下也不相等 那么None 仅仅是代表没有返回值的意思吧?

paulwang 发表于 2022-10-20 10:18:35

tommyyu 发表于 2022-10-19 17:44
b.extend(a)是将a添加到b中,而b = b.extend(a)中,b.extend(a)的返回值是None,所以b就是None.

我在idel 模式中看到b.extend(a) 的返回值什么都没有。 并没有显示None
是不是什么都没有就是None的意思呢?
这个 None 也 貌似也不等于 空

jackz007 发表于 2022-10-20 10:28:42

paulwang 发表于 2022-10-20 10:15
我现在理解了有可能后面的课程会讲, 我还没学到吧!
其实对一个变量赋值的话必须是那个值要有返回值 ...

      是的,如果函数没有返回值,那它返回的就是 None。

tommyyu 发表于 2022-10-20 10:29:54

paulwang 发表于 2022-10-20 10:18
我在idel 模式中看到b.extend(a) 的返回值什么都没有。 并没有显示None
是不是什么都没有就是None的意思 ...

None 比较特殊,直接输入None 他也不打印
>>> None
>>>

yangmiao07 发表于 2022-10-21 11:09:44

本帖最后由 yangmiao07 于 2022-10-21 11:14 编辑

a="()()()("
b1=[]
b2=b1.extend(a)
b1
['(', ')', '(', ')', '(', ')', '(']
print(b2)
None

你的两个b,其实并不是一个东西的
b.extend(a):是列表b调用方法新增元素,实现结果是给列表b新增了一个元素,但是这个调用过程是没有返回值的,所以你b=b.extend(a),后面这个b就是none
这个有疑问,你可以看删除的两个方法,pop()有返回值,remove()没有返回值,是一个道理
list=["A","B","C"]
aa=list.remove("A")
bb=list.pop(1)
print(aa,bb)
……None C

fdokin 发表于 2022-10-21 11:24:15

yangmiao07 发表于 2022-10-21 11:09
a="()()()("
b1=[]
b2=b1.extend(a)


看你这个,这个好像就能明白一点了

甄水无香 发表于 2022-10-22 17:19:30

同问
页: [1]
查看完整版本: python 中print 返回值为 None 为什么