繁体   English   中英

功能之外的Python访问变量

[英]Python Access Variables Outside of Function

预先感谢您寻找@这个问题:

我正在尝试解析CSV文件,并返回某些字段的值。 当作为脚本内联时,代码可以完美运行,但是当我尝试创建一个可被我的应用程序中的其他模块访问的函数时,我遇到了从中提取的变量(键/值)问题csv文件。

解析CSV的代码(parseCsv.py):

groups =[]
enterprise = []
workinglist = []

def parse_csv(filename):
  quote_char = '"'
  delimiter = ','
  csv_to_parse = open(filename, 'rb')
  csv_reader = csv.DictReader(csv_to_parse, fieldnames=[], restkey='undefined-fieldnames', delimiter=delimiter, quotechar=quote_char)
  current_row = 0
  for row in csv_reader:
    current_row +=1
    if current_row == 1:
      csv_reader.fieldnames = row['undefined-fieldnames']
      continue
    groups.append(row['groupid'])
    enterprise.append(row['enterprise'])
    workinglist.append(row)

我已经尝试过将global参数用于组,企业和工作清单。 并尝试添加return groups, return workinglist, return enterprise

不管语法如何,我都无法在此函数之外访问组,企业或工作列表变量。 我需要在应用程序的其他部分中处理这些结果。 如果我在函数中添加print groups ,则它可以正常工作,但是从函数外部我以[].结尾[]. 我还尝试使parse_csv成为类的方法,添加了selfinit ,但没有成功。

作为参考,我正在使用parse_csv(csvfilename)从另一个文件调用此文件,它会导入文件并正确读取它。

我敢肯定,这是我非常想念的非常简单快捷的方法,但是凝视了这么久,我实在看不到,任何帮助将不胜感激!

您应该将列表作为参数传递给函数,以便可以对其进行修改。 运作方式如下:

foo = []

def f(arg):
  arg.append(1)
  arg.append(2)

f(foo)
print foo # output: [1, 2]

这是可行的,因为列表是可变的,您可以通过引用传递它们。

因此,您需要按以下方式实现您的功能:

def parse_csv(filename, gr, ent, work):
  ...
  gr.append(123)
  work.append(row)
  ...

那么您可以从每个文件中调用它,如下所示:

groups      = []
enterprise  = []
workinglist = []

parse_csv(filename, groups, enterprise, workinglist)

print groups # should contain the data read from CSV

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM