2017-08-05 1 views
1

so schreibe einige Module innerhalb eines Programms zu verwenden, aber Schwierigkeiten habe die Variable, die ich innerhalb des Moduls ab definieren:Wie kann auf eine Variable zugegriffen werden, die innerhalb eines Moduls definiert wird?

a.py

def func(): 
    #do something to set the variable var 
    var = randomValue 

b.py

from a import func 
func() 
#how do i get var 

Ich legte var auf global, aber immer noch var ist nicht definiert.

alle diese Antworten scheinen toll, aber keines der Themen funktioniert für mein Skript. so hier ist das Modul, vielleicht können Sie mir sagen, wie time_converted in ein anderes Skript zu erhalten:

from ib.opt import Connection, message 
import time 
import datetime 

list_time = [] 
global time_converted 
def reply_handler(msg): 
    if msg.typeName == "currentTime": 
     time = msg.time 
     list_time.append(time) 
     time_converted = (datetime.datetime.fromtimestamp(int("%s"% time 
                  )).strftime('%Y-%m-%d %H:%M:%S')) 
     return time_converted 



def GetTime(): 
    conn = Connection.create(port=7496, clientId=100) 
    conn.registerAll(reply_handler) 
    conn.connect() 
    conn.reqCurrentTime() 
    while True: 
     if len(list_time) == 0: 
      pass 
     elif len(list_time) == 1: 
      break 
      conn.disconnect() 
+3

Es sei denn, Sie definiert 'var' außerhalb von' func() 'oder zurückgeben, können Sie nicht –

+0

„alle diese Antworten scheinen großartig, aber keines der Themen funktioniert für mein Skript "Was genau läuft schief? Erhalten Sie eine Fehlermeldung? Haben Sie einen falschen Wert? Bitte erläutern. – Xukrao

+0

Ich bekomme einfach "none" anstelle von irgendeinen Wert – TB1

Antwort

2

a.py

from random import random 

def func(): 
    var = random() 
    return var 

x = func() 

b.py

from a import func,x 

print (func(), x) 

Output von der Ausführung b.py:

0.2927063452485641 0.8207727588707955 

bearbeiten, in Reaktion auf veränderte Frage

Wenn reply_handler selbst einen Rückruf empfängt, um eine Uhrzeit zu verarbeiten, verwendet es einen anderen Rückruf, um das Ergebnis an den Hauptcode zu melden.

eine Callback-Funktion verwenden ..

1.py

from main import receiver 

def GetTime(): 
    reply_handler('this is the time') 

def reply_handler(msg): 
    receiver(msg) 

GetTime() 

main.py

def receiver(message): 
    print (message) 

Ausgang:

this is the time 
+0

ich dachte, es würde für mich arbeiten, aber wenn ich es mit dem Skript versuchte ich nur es gab mir "keine, keine" – TB1

+0

Bitte siehe bearbeiten. –

+0

Sie könnten dies als eine Alternative betrachten. –

2

Sie definieren die Variable in einer Funktion. Um den Wert der Variablen außerhalb der Funktion verfügbar zu machen, müssen Sie eine return-Anweisung verwenden. Als Beispiel:

a.py

def func(): 
    # do something to set the variable `var` 
    var = 10 

    return var 

b.py

from a import func 

# to get var 
var = func() 
print('The value of var is:', var) 

Siehe here für weitere Erläuterungen zu den Funktionen und return Aussagen.

+0

Ok sagen wir in a.py var = "10" Wie drucke ich 10 innerhalb b.py. Wenn ich Var drucke, gibt es mir einfach keine. – TB1

+0

@TarikBlaoui Versuchen Sie, das gerade aktualisierte Codebeispiel auszuführen. – Xukrao

+0

Ok, ich werde es an mein Skript anpassen und sehen – TB1

0

So sollte ich es tun:

GetPrice.py

from ib.opt import Connection, message 
import datetime 

    list_time = [] 
    def reply_handler(msg): 
     if msg.typeName == "currentTime": 
      time = msg.time 
      list_time.append(time) 
      global time_converted 
      time_converted = (datetime.datetime.fromtimestamp(int("%s"% time 
                   )).strftime('%Y-%m-%d %H:%M:%S')) 


    def GetTime(): 
     conn = Connection.create(port=7496, clientId=100) 
     conn.registerAll(reply_handler) 
     conn.connect() 
     conn.reqCurrentTime() 
     while True: 
      if len(list_time) == 0: 
       pass 
      elif len(list_time) == 1: 
       break 
       conn.disconnect() 

     return time_converted 

Main.py

from GetRealtime import GetTime 

x = str(GetTime()) 
print (x) 

Vielen Dank für die Hilfe Jungs

Verwandte Themen