鍍金池/ 問答/Python/ 為什么paraseHTML函數(shù)那塊,我如果一開始讓ulist = [],就沒有輸

為什么paraseHTML函數(shù)那塊,我如果一開始讓ulist = [],就沒有輸出了,反倒去除了之后就有了。望大佬點撥。

import requests
from lxml import etree

def getHTML(url):
    try:
        r = requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.content
    except:
        print('抓取失敗')

def paraseHTML(ulist,html): 
    demo = etree.HTML(html)
    selc=demo.xpath('//div[@class="info"]')
    #ulist = [] 有這句就沒有輸出,為什么?
    #序號
    i = 0
    for a in selc:
        i=i+1
        #導(dǎo)演那部分是以換行符分開的
        #電影名
        title = a.xpath('./div[@class="hd"]/a/span[@class="title"]/text()')[0]
        infos = a.xpath('./div[@class="bd"]/p[@class=""]/text()')
        #導(dǎo)演
        direct = infos[0].strip().replace(u'\xa0','  ').split('  ')[0].split(':')[1]
        date_country_classify = infos[1].strip().replace(u'\xa0','  ').split('  ')
        #上映年份
        year = date_country_classify[0]
        #國家
        country =  date_country_classify[2]
        #類型
        classify = date_country_classify[4]
        #點評
        comment = a.xpath('./div[2]/p/span/text()')[0]
        #豆瓣評分
        rank = a.xpath('./div[2]/div/span[2]/text()')[0]

        ulist.append([title,direct,year,country,classify,comment,rank])

def printHTML(ulist):
    print_templet = '{:5}:{:<10}'
    for g in ulist:
        #print(print_templet.format('排名',i+1))
        print(print_templet.format('電影名稱',g[0],chr(12288)))
        print(print_templet.format('導(dǎo)演',g[1],chr(12288)))
        print(print_templet.format('上映年份',g[2],chr(12288)))
        print(print_templet.format('國家',g[3],chr(12288)))
        print(print_templet.format('分類',g[4],chr(12288)))
        print(print_templet.format('一句話點評',g[5],chr(12288)))
        print(print_templet.format('豆瓣評分',g[6],chr(12288)))
        print("------------------------------------")


def main():
    url = 'https://movie.douban.com/top250?start='
    list_info = []
    html = getHTML(url)
    paraseHTML(list_info,html)
    printHTML(list_info)

main()
        
回答
編輯回答
來守候

python分值傳遞和引用傳遞,當(dāng)你傳遞的參數(shù)是list的時候是引用傳遞,而你又重新給list值,相當(dāng)于重新定義了一個變量,你可以查一看下內(nèi)存地址已經(jīng)變化了

def paraseHTML(ulist,html):
    print id(ulist)
    ulist = []
    print id(ulist)
2018年1月3日 05:40
編輯回答
氕氘氚

知道了,,謝謝

2017年5月12日 13:57