我是python的新手,在工作中深陷困境。Python:將變量發送到另一個腳本
如果我有具有創建一個列表,如下面的腳本:
test = 'string'
l = []
for i in test:
l.append(i)
print l
如何將我送這到另一個python腳本?
我是python的新手,在工作中深陷困境。Python:將變量發送到另一個腳本
如果我有具有創建一個列表,如下面的腳本:
test = 'string'
l = []
for i in test:
l.append(i)
print l
如何將我送這到另一個python腳本?
我假設你想使用一個名爲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
在第二個文件中被定義爲一個功能你導入並使用它。
您可以在模塊中運行任意代碼並聲明變量,但如果將它們放置在函數(或類)中,則會更好,如上所示。
我希望這是你所需要的。
這取決於你是否是說發送的計算結果到另一個,單獨運行的Python程序,或者乾脆共享與多文件項目的另一個組成部分造成的。
在前一種情況下,您需要使用某種進程間通信 - 一些示例將結果寫入文件並從另一個進程讀取結果,在兩個進程之間建立套接字或使用一個信號量。
在後一種情況下,使用Python的概念modules與項目中的另一個腳本共享此計算的結果。
我建議看看Shelve和Pickle模塊。它們允許您以可在啓動之間存儲或在腳本之間共享的方式序列化數據。
您不清楚您的第一個腳本本身是否正在運行第二個腳本,或者是否是通過某種外部方式一個接一個地調用它們。在任何一種情況下,將列表傳遞給第二個進程的簡單方法是通過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
$貓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是集緩存了 。
這是什麼意思? – OscarRyz 2010-06-17 22:28:05
'this'是什麼意思:變量l或它的打印表示? – ChristopheD 2010-06-17 22:29:06
請注意,整個代碼可以用更簡短的'l = list(test)'代替。 – EOL 2010-06-18 10:11:09