Python文件函数和附加函数的混淆

2024-05-28 18:51:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两道考试题

t2=("A","B","Hello")
alist=["Barney",["Wilma"]]
print(alist[1].append(t2))

回答:

None

我以为是[“Wilma”,(“A”,”B”,”Hello”)]

以及

文件具有:

James,8,9
Sonia,7,6
Clark,4,5

代码:

endofprogram=False
try:
    infile=open("names.txt",”r”)
except IOError:
    print("Error reading file")
    endofprogram=True
if endofprogram==False:
    for line in infile:
        line.strip('\n')
        alist=line.split(',')
        print(alist)

回答

['James','8','9\n']
['Sonia','7','6\n']
['Clark','4','5\n']

为什么“\n”仍然存在? 最后:

def change(aList):
    aList=aList.pop()
    aList.append(5)
    return
def main():
    mylist=[1,2,[3]]
    change(mylist)
    print(mylist)
main()

回答:

[1,2]

为什么这是答案?是不是应该是[1,2,5]


Tags: falsehellolineinfileprintclarkappendt2
3条回答

append函数不返回任何内容,因此结果为None。它只会附加到列表中

strip函数只删除末尾的字符;开始。如果您在Windows上工作,实际的行尾很可能是\n\r,最后一个字符。不能被你的脱衣舞命令移除

第三个问题是因为在change函数中,一旦函数更改存在,aList值就会丢失。你应该做:

def Change(l):
  l.pop()
  l.append(5)

在Python中,赋值不会改变任何底层变量。而是将名称绑定到一个新值。因此,在行alIst = aList.pop()之后,aList指向[3],但不再链接到myList对象。在append函数之后,aList指向[3, 5],但是只要Change返回,这个对象就会被垃圾收集

  • list.append是就地操作,它就地修改列表并返回None
>>> lst = []
>>> repr(lst.append(1)) #returns None
'None'
>>> lst                 #list modified
[1]
  • 字符串是不可变的,需要将.strip()回调的结果重新赋给变量
line = line.strip('\n') #re-assign the new returned string to a variable.
alist = line.split(',')
  • 您将aList分配给不同的列表,因此.append()调用不会影响最初传递的列表
def change(aList):
    aList = aList.pop() #Now aList points to [3] not to `[1, 2, [3]]`
    aList.append(5)

您只需在此处使用赋值语句:

aList[-1] = 5
  1. ^{}是一个返回None的操作,因为它就地修改列表。必须打印实际列表才能获得预期的输出

  2. line.strip("\n")确实会剥离换行符,但它永远不会保存在任何地方。字符串在python中是不可变的,因此^{}返回一个新的字符串,并去掉字符。正确的用法是说line = line.strip("\n")

例1:

>>> alist[1].append(t2)
>>> print alist
['Barney', ['Wilma', ('A', 'B', 'Hello')]]

例2:

>>> line = "Foo\n"
>>> line.strip("\n")
'Foo'
>>> line
'Foo\n'
>>> line = line.strip("\n")
>>> line
'Foo'

相关问题 更多 >

    热门问题