鱼C论坛

 找回密码
 立即注册
查看: 1428|回复: 5

[已解决]大佬们!def的函数return返回值不能是列表吗?

[复制链接]
发表于 2020-5-14 16:48:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def file_line_record(file_name):
    file1 = open(file_name,'r',encoding='utf-8')
    stock_line = []
    count_line = 0
    for each_line in file1:
        count_line += 1
        stock_line.append(each_line)
    return stock_line
    print('一共有%d行'%count_line)
    print('stock_line库现存着%s'%stock_line)

这是一个用来统计txt文件里句子的行数的
count_line是句子总行数
stock_line[]是把每一行作为一个元素放进列表里

然后这个函数,我调用完后在后面的程序里用到stock_line程序就报错说我没有定义过它。这该怎么解决?
Traceback (most recent call last):
  File "C:/Users/10797/Desktop/5.14升级版顶行打印.py", line 14, in <module>
    print(stock_line)
NameError: name 'stock_line' is not defined
最佳答案
2020-5-14 16:55:16
本帖最后由 wuqramy 于 2020-5-14 16:58 编辑

return函数就运行结束喽
所以无法print
至于怎么调用,就要这么写:
stock_line = file_line_record('你的文件名')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-14 16:55:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 wuqramy 于 2020-5-14 16:58 编辑

return函数就运行结束喽
所以无法print
至于怎么调用,就要这么写:
stock_line = file_line_record('你的文件名')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-14 17:20:33 | 显示全部楼层
wuqramy 发表于 2020-5-14 16:55
return函数就运行结束喽
所以无法print
至于怎么调用,就要这么写:

我不是这个意思
在return那函数就结束了,这个print不能打印我知道

我的问题是我在后面的代码中(不是"print('一共有%d行'%count_line) print('stock_line库现存着%s'%stock_line)")
调用file_line_record(file_name)这个函数后
再调用stock_line,程序就报错说我没定义stock_line
按理来说我return:stock_line了那么调用file_line_record(file_name)这个函数后返回值就是stock_line,后面就可以用这个stock_line了
可是后面用stock_line时,程序说我没定义stock_line,我就想不通了

不过你说的stock_line = file_line_record('你的文件名')这么搞,调用完函数这个stock_line确实可以用了
但是我还是想知道为什么都return了stock_line,当我用到stock_line时程序却说我没定义

以下是完整的代码(有点多,怕理解浪费大家时间不想贴上来的),如果有必要可以看一下
def file_line_record(file_name):
    file1 = open(file_name,'r',encoding='utf-8')
    stock_line = []
    count_line = 0
    for each_line in file1:
        count_line += 1
        stock_line.append(each_line)
    return stock_line
    print('一共有%d行'%count_line)
    print('stock_line库现存着%s'%stock_line)

file = '文件1.txt'
stock_line = file_line_record(file)
#print(stock_line)
line_number = input('请输入行数:')#可以是 :3 or 3:6 or 6:
line_number_list = list(line_number)#把输入的:3变成[':','3']
print(line_number_list)
len_number = len(line_number_list)#统计列表里元素的个数[':','3']有两个元素
print('有%d个元素'%len_number)#统计列表里元素的个数[':','3']有两个元素
if len_number == 2:#像这种:3
    if line_number_list[0] == ':':#说明是打印前n行到指定数字的
        print('现在取冒号后面的%s'%line_number_list[1])
        temp_number = int(line_number_list[1])
        for each_line in range(0,temp_number):
            print(stock_line[each_line])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 17:21:38 | 显示全部楼层
未被驯化的甲鱼 发表于 2020-5-14 17:20
我不是这个意思
在return那函数就结束了,这个print不能打印我知道

你只是返回了这个值呀
并没有将它存起来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 17:27:23 | 显示全部楼层
楼上说得对,小甲鱼的教程有说过,函数内部运算完了就会全部清除,而且也不会影响外部的变量,所以你直接调用函数file_line_record(file_name)后肯定是找不到stock_line的,
def file_line_record(file_name):
    file1 = open(file_name,'r',encoding='utf-8')
    stock_line = []
    count_line = 0
    for each_line in file1:
        count_line += 1
        stock_line.append(each_line)
    print('一共有%d行'%count_line)
    print('stock_line库现存着%s'%stock_line)
    return stock_line

stock_line = file_line_record(file_name)
所以可以这么写 ,return出现函数返回就停止了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-14 17:44:41 From FishC Mobile | 显示全部楼层
你要是想在函数外直接访问stock_line列表,就要在函数外定义它,否则是访问不了的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表