2010-06-17 113 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是集緩存了 。

相關問題