如何将字典传递给函数?

时间:2016-09-07 17:22:55

标签: python dictionary

我想将字典传递给用户定义的函数,我需要根据字典值进行一些计算。它对我的功能不起作用,但在不使用功能的情况下工作正常。我不确定,代码有什么问题。有什么帮助吗?没有错误消息。

输入:

  

“13-07-2016 12:55:46”,user,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
  “13-07-2016 12:57:50”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
  “13-07-2016 13:00:43”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
  “13-07-2016 13:01:45”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
  “13-07-2016 13:02:57”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
  “13-07-2016 13:04:59”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
  “13-07-2016 13:06:51”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
  “13-07-2016 13:07:56”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”

代码:

.myDiv > table tr:first-child td {
  font-weight: bold;
  text-align: center;
}

2 个答案:

答案 0 :(得分:2)

A:您应该考虑在脚本末尾调用您的函数:

dico = setdict()
display(dico)

没有它,它们被声明,但没有被使用。

B:您还应该考虑更好的方法来打开文件:

with open(file_name, "rb") as f:
  lines = f.readlines()
  for line in lines:
    # Do stuff with your line

这是在python中打开文件并逐行读取的最佳方法。

C:您正在使用:

   line = fo.readline()
   # ^ That line is never use after, you will loose all it's datas
   for line in fo:
     #do stuff on line

我添加了一条评论,向您显示您从第一行丢失了数据。

D:您正在使用全局变量(在fo内使用setdict(),更好的方法是通过参数传递它:

fo = open(file_name, "rb")

def setdict(fo):
   dico,i={},0
   line = fo.readline()
   ...

setdict(fo)

最后,您可以通过以下方式重写脚本:

def setdict(filename):
   dico,i={},0
   with open(filename, 'r') as f:
   for line in f.readlines():
     date, user, proxy_ip, client_ip, access_method, con, sites = line.split(",")
     sites = sites.rstrip('\n')
     dico[i]= date, user, proxy_ip, client_ip, access_method, con, sites
   return dico

def display(dico):
   for k,v in dico.items():
      print k,v

file_name = sys.argv[1]
dico = setdict(filename)
display(dico)

答案 1 :(得分:1)

使用def关键字在Python中编写函数时,该函数不会自动执行。您永远不会调用setdictdisplay函数,只是定义它们以便稍后调用它们。

将此行添加到脚本末尾以实际调用您定义的函数:

display(setdict())

或更详细

dico = setdict()
display(dico)