python 中print 返回值为 None 为什么
我做了一个测试a='()()()('
b=[]
b=b.extend(a)
print(b)的时候范围值为None
我理解操作的时候没必要用 b= 直接b.extend(a)就好了
但是我就是想知道为什么b=b.extend(a) 操作的时候 打印 b 会是None 呢? b.extend(a)是将a添加到b中,而b = b.extend(a)中,b.extend(a)的返回值是None,所以b就是None. 本帖最后由 jackz007 于 2022-10-19 19:36 编辑
列表属于可修改对象,也就是说,对象的方法具有自修改能力,无需赋值,所以,可修改对象的的绝大部分方法都是无返回值的,像楼主使用的 extend() 就属于其中之一,这种方法直接调用就好,对象即可自行修改到位,不可以赋值。
a='()()()('
b=[]
b.extend(a)
print(b)
jackz007 发表于 2022-10-19 17:57
列表属于可修改对象,也就是说,对象的方法具有自修改能力,无需赋值,所以,可修改对象的的绝大 ...
我现在理解了有可能后面的课程会讲, 我还没学到吧!
其实对一个变量赋值的话必须是那个值要有返回值的,不然的话赋的值就不存在了。
并且用条件判断的话也必须是 两边的返回值进行判断,对吧!
假如入a=b=[]那么b.extend(a)==a 也是false的, 因为左边的没有返回值,右边的有
那这里就有一个情况了 没有返回值是不是就是等于 空呢? 我测试了下也不相等 那么None 仅仅是代表没有返回值的意思吧? jackz007 发表于 2022-10-19 17:57
列表属于可修改对象,也就是说,对象的方法具有自修改能力,无需赋值,所以,可修改对象的的绝大 ...
我现在理解了有可能后面的课程会讲, 我还没学到吧!
其实对一个变量赋值的话必须是那个值要有返回值的,不然的话赋的值就不存在了。
并且用条件判断的话也必须是 两边的返回值进行判断,对吧!
假如入a=b=[]那么b.extend(a)==a 也是false的, 因为左边的没有返回值,右边的有
那这里就有一个情况了 没有返回值是不是就是等于 空呢? 我测试了下也不相等 那么None 仅仅是代表没有返回值的意思吧?
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 也 貌似也不等于 空 paulwang 发表于 2022-10-20 10:15
我现在理解了有可能后面的课程会讲, 我还没学到吧!
其实对一个变量赋值的话必须是那个值要有返回值 ...
是的,如果函数没有返回值,那它返回的就是 None。 paulwang 发表于 2022-10-20 10:18
我在idel 模式中看到b.extend(a) 的返回值什么都没有。 并没有显示None
是不是什么都没有就是None的意思 ...
None 比较特殊,直接输入None 他也不打印
>>> None
>>> 本帖最后由 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 yangmiao07 发表于 2022-10-21 11:09
a="()()()("
b1=[]
b2=b1.extend(a)
看你这个,这个好像就能明白一点了 同问
页:
[1]