質問

私は初心者で、Python 2.7を使用しています。定義パラメーターを変更できるようにして、その場で一時停止と文字列出力を制御できるようにしたいと思います。これは可能ですか?私はいくつかのスレッドのものを読みましたが、それは同時に2つのタスクを実行することについてのことのようです。ランタイム中に2つのタスク間のコミュニケーションが必要です。

    def writeAndPause(stringToWrite,pauseSeconds)
        while True:
            print stringToWrite
            sleep(pauseSeconds)

ドキュメントへの解決策やリンクは非常に高く評価されています。御時間ありがとうございます! /カール

役に立ちましたか?

解決

スレッドは同時作業用です。コードを再設計するだけなら、あなたが望む効果があると思います。削除することを検討してください while あなたからの条項は機能し、それを外に置きます:

def writeAndPause(stringToWrite,pauseSeconds)
    print stringToWrite
    sleep(pauseSeconds)

そして、どこかでこの関数を呼び出します:

while True:
    stringToWrite, pauseSeconds = gatherSomeInformation()
    writeAndPause(stringToWrite, pauseSeconds)

他のヒント

@constantiniusは正しいです。答えは、ほぼ確実にコードを再設計することであるため、難解なことをする必要はありません。

純粋に楽しみのためにそれをする別の方法について説明します。関数の内側にループを維持している間、本当にそれを保持したい場合は、 収量式

例えば:

def writeAndPause():
    while True:
        stringToWrite, pauseSeconds = yield
        print stringToWrite
        sleep(pauseSeconds)

これは、次の方法で使用できます。

# create the generator
writer = writeAndPause()
# start the generator
writer.next()
# resume execution and send new values into generator
writer.send(('start string', 10))
'start string'
# resume execution and send another set of new values into generator
writer.send(('new string', 20))
'new string'

あなたがそれを見たので、それを忘れて、@constantiniusが言ったことをしてください。

これはあなたを助けますか?

デフォルトの引数定義の特性と、リストが変数ではなく、参照のコレクションであるという事実を利用します。

from time import sleep,time

stringToWrite = [None]
pauseSeconds = [0]

def writeAndPause(stw = stringToWrite, pz = pauseSeconds, keep = [time()]):
        if stw[0]:
            print stw[0]
        else:
            print 'START'
        print '  having waited ',time()-keep[0],'seconds,    must wait',pz[0],'seconds'
        keep[0] = time()
        sleep(pz[0])


writeAndPause()


for a,b in (('first',1),('second',2.05),('third',3.4),('fourth',0.88),
            ('BANANA',0.2),('APPLE',1.5),
            ('PEAR',0.77),('CHERRY',4),
            ('ORANGE',0.1),('NUT',6),
            ('APRICOT',0.56),('PLUM',2.5)):

    stringToWrite[0] = a
    pauseSeconds[0] = b
    writeAndPause()

結果

START
  having waited  0.0310001373291 seconds,    must wait 0 seconds
first
  having waited  0.0320000648499 seconds,    must wait 1 seconds
second
  having waited  1.01600003242 seconds,    must wait 2.05 seconds
third
  having waited  2.15600013733 seconds,    must wait 3.4 seconds
fourth
  having waited  3.42100000381 seconds,    must wait 0.88 seconds
BANANA
  having waited  0.905999898911 seconds,    must wait 0.2 seconds
APPLE
  having waited  0.266000032425 seconds,    must wait 1.5 seconds
PEAR
  having waited  1.51499986649 seconds,    must wait 0.77 seconds
CHERRY
  having waited  0.796999931335 seconds,    must wait 4 seconds
ORANGE
  having waited  4.03200006485 seconds,    must wait 0.1 seconds
NUT
  having waited  0.140000104904 seconds,    must wait 6 seconds
APRICOT
  having waited  6.03099989891 seconds,    must wait 0.56 seconds
PLUM
  having waited  0.765000104904 seconds,    must wait 2.5 seconds
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top