Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果脚本没有“return”功能,为什么要使用“return”?_Python_Python 3.x_Csv_Web Scraping_Return - Fatal编程技术网

Python 如果脚本没有“return”功能,为什么要使用“return”?

Python 如果脚本没有“return”功能,为什么要使用“return”?,python,python-3.x,csv,web-scraping,return,Python,Python 3.x,Csv,Web Scraping,Return,我已经使用Python创建了一个脚本,用于解析电影名称及其年代分布在torrent站点的多个页面上,并将它们写入csv文件。它工作无误,将数据写入csv文件,没有任何问题 在我的get_data()函数中,我没有使用这一行return itemlist,而是在创建这个函数时write_data()完全独立,因此我将数据写入了一个CSV文件,该文件取自变量url下的这个列表itemlist 如果我保持现有设计的完整性,是否有必要使用现在注释掉的这一行returnitemlist?若然,原因为何 i

我已经使用Python创建了一个脚本,用于解析电影名称及其年代分布在torrent站点的多个页面上,并将它们写入csv文件。它工作无误,将数据写入csv文件,没有任何问题

在我的
get_data()
函数中,我没有使用这一行
return itemlist
,而是在创建这个函数时
write_data()
完全独立,因此我将数据写入了一个CSV文件,该文件取自变量
url
下的这个列表
itemlist

如果我保持现有设计的完整性,是否有必要使用现在注释掉的这一行
returnitemlist
?若然,原因为何

import requests
from bs4 import BeautifulSoup
import csv

URLS = ["https://yts.am/browse-movies?page={}".format(page) for page in range(1,6)]
itemlist = []

def get_data(links):
    for url in links:
        res = requests.get(url)
        soup = BeautifulSoup(res.text,"lxml")
        for record in soup.select('.browse-movie-bottom'):
            items = {}
            items["Name"] = record.select_one('.browse-movie-title').text
            items["Year"] = record.select_one('.browse-movie-year').text
            itemlist.append(items)
    # return itemlist

def write_data():
    with open("outputfile.csv","w", newline="") as f:
        writer = csv.DictWriter(f,['Name','Year'])
        writer.writeheader()
        for data in itemlist:
            writer.writerow(data)

if __name__ == '__main__':
    get_data(URLS)
    write_data()

在代码中,itemlist是全局变量。上述情况下不需要Return语句。

对于现有设计,您不需要该行,因为您的
get\u data
打算从外部范围而不是返回列表修改列表

但是如果您想重命名
itemlist
,则需要同时在
get\u data
write\u data
中重命名它(在所有可能使用它的函数中)

如果将
write\u data
定义为

def write_data(some_list):
    ...
并将其用作

if __name__ == '__main__':
    write_data(get_data(URLS))

在这种情况下,
write_data
接收由
get_data
返回的列表,您不需要在
get_data

外部定义
itemlist=[]
,在这种特定情况下,您的脚本可以工作。但是在其他地方重用您的函数不是很好吗?在另一个文件中,您可以说:

from xy import get_data
links = ["url1", "url2",...]
a = get_data(links)

无需重写函数即可使用它。

在任何编程语言中使用全局变量都是不可取的。如果要重用函数,可以使用return语句并将结果传递给write_data函数。我建议您看看@andersson在上面给出的内容

让我们在Python控制台中执行此操作:

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
...
格言2说“显性比隐性好”。因此,我认为通过调用这些函数来告知潜在用户预期的副作用,对于可读性来说更好。为了实现这一点,您需要返回您获得的数据列表,并将其交给
write\u data
来完成它的工作


作为一个独立的脚本,您的脚本很好。作为一个库,除非您返回您填充的列表,否则它是不实用的。

好吧,您无论如何都不会使用该结果。如果您要返回列表,它也应该在函数内部创建。这也会使函数更易于重用和测试。类似地,它应该被传递到第二个函数中,该函数当前不是“完全独立的”。但是如果脚本是功能性的,为什么您认为您需要对其进行任何更改?我听说在函数中使用
return
是一种很好的做法,这也是我询问我所做的@jornsharpe是否正确的唯一原因?这
好吗,无论如何,您都不会使用该结果
任何形式的建议@usr2564301?谢谢Andersson先生的回答。