未被驯化的甲鱼 发表于 2020-5-14 16:48:43

大佬们!def的函数return返回值不能是列表吗?

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

wuqramy 发表于 2020-5-14 16:55:16

本帖最后由 wuqramy 于 2020-5-14 16:58 编辑

return函数就运行结束喽
所以无法print
至于怎么调用,就要这么写:stock_line = file_line_record('你的文件名')

未被驯化的甲鱼 发表于 2020-5-14 17:20:33

wuqramy 发表于 2020-5-14 16:55
return函数就运行结束喽
所以无法print
至于怎么调用,就要这么写:

我不是这个意思{:10_282:}
在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 == ':':#说明是打印前n行到指定数字的
      print('现在取冒号后面的%s'%line_number_list)
      temp_number = int(line_number_list)
      for each_line in range(0,temp_number):
            print(stock_line)

wuqramy 发表于 2020-5-14 17:21:38

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



你只是返回了这个值呀
并没有将它存起来

沐羽尘 发表于 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出现函数返回就停止了

hrp 发表于 2020-5-14 17:44:41

你要是想在函数外直接访问stock_line列表,就要在函数外定义它,否则是访问不了的
页: [1]
查看完整版本: 大佬们!def的函数return返回值不能是列表吗?