2010-06-17 90 views
3

我是python的新手,在工作中深陷困境。Python:将变量发送到另一个脚本

如果我有具有创建一个列表,如下面的脚本:

test = 'string' 

l = [] 

for i in test: 
    l.append(i) 

print l 

如何将我送这到另一个python脚本?

+0

这是什么意思? – OscarRyz 2010-06-17 22:28:05

+0

'this'是什么意思:变量l或它的打印表示? – ChristopheD 2010-06-17 22:29:06

+0

请注意,整个代码可以用更简短的'l = list(test)'代替。 – EOL 2010-06-18 10:11:09

回答

3

我假设你想使用一个名为first.py脚本定义为所谓的second.py

所以第二个脚本变量some_list这将是:

$ cat first.py second.py 
#first.py 
def demo(): 
    some_list = [] 
    for i in 'string': 
     some_list.append(i) 
    return some_list 

#second.py 
from first import demo 

some_list = demo() 
print some_list 

$python second.py 
['s', 't', 'r', 'i', 'n', 'g'] 

在文件中的代码声明作为代码模块。要使用它,你必须使用:

from模块import事情

因此,在这种情况下,功能demo模块first

在第二个文件中被定义为一个功能你导入并使用它。

您可以在模块中运行任意代码并声明变量,但如果将它们放置在函数(或类)中,则会更好,如上所示。

我希望这是你所需要的。

+0

请不要使用小写字母L作为变量名,它看起来像数字之一,并且不必要的混淆。 – taleinat 2010-06-17 22:42:30

+0

@taleinat:Yeap我同意,我更改为*“list”* – OscarRyz 2010-06-17 22:47:49

+1

不幸的是,调用一个变量'list'会隐藏列表类型的内置'list',所以这在Python中也是一个糟糕的名字选择,IMO。为简明起见,请尝试使用“chars”或“char_list”或“lst”。 – taleinat 2010-06-17 22:53:53

1

这取决于你是否是说发送的计算结果到另一个,单独运行的Python程序,或者干脆共享与多文件项目的另一个组成部分造成的。

在前一种情况下,您需要使用某种进程间通信 - 一些示例将结果写入文件并从另一个进程读取结果,在两个进程之间建立套接字或使用一个信号量。

在后一种情况下,使用Python的概念modules与项目中的另一个脚本共享此计算的结果。

0

我建议看看Shelve和Pickle模块。它们允许您以可在启动之间存储或在脚本之间共享的方式序列化数据。

2

您不清楚您的第一个脚本本身是否正在运行第二个脚本,或者是否是通过某种外部方式一个接一个地调用它们。在任何一种情况下,将列表传递给第二个进程的简单方法是通过stdin,其中数据本身是列表的pickle

例如:

script1.py:

import sys 
import pickle 
list = [item for item in test] 
pickle.dump(list, sys.stdout) 

SCRIPT2。潘岳:

import sys 
import pickle 
list = pickle.load(sys.stdin) 
for item in list: 
    print item 

运行:script1.py | script2.py

0

$猫one.py

from functools import lru_cache 
@lru_cache(maxsize=2048) 
class One(object): 
    def __init__(self): 
     self.a = None 

    def set_a(self,val): 
     self.a = val 

    def get_a(self): 
     return self.a 


class One_nocache(object): 
    def __init__(self): 
     self.a = None 

    def set_a(self,val): 
     self.a = val 

    def get_a(self): 
     return self.a 

$猫two.py

import one 
import three 

# Cache 
second=one.One() 
second.set_a(4) 
three.print_cache() 

# No cache 
second=one.One_nocache() 
second.set_a(4) 
three.print_nocache() 

$猫three.py

import one 
def print_cache(): 
    three=one.One() 
    print(three.get_a()) 

def print_nocache(): 
    three=one.One_nocache() 
    print(three.get_a()) 

$ PY two.py

4 
None 

4 - 当上课的时候不被调用同一个类的实例 - 在one.py 无调用缓存的类的实例在three.py是集缓存了 。

相关问题