משתנים גלובלים בPython

זויברג

New member
משתנים גלובלים בPython

מישהו יודע איך אני מקבל גישה מתוך פונקציית thread בPython אל משתנה שמחוץ לאותו thread? יש לי תוכנית עם לולאת While מרכזית עם משתנה בוליאני bRunning שכל עוד ערכו חיובי, הלולאה רצה והתוכנית ממשיכה לעבוד. לפני הכניסה ללולאה, התוכנית מפעילה כמה פונקציות בthreadים נפררדים, ואני רוצה שהפונקציות האלו יהיו מסוגלות לשנות את הערך של bRunning, אבל אם אני מציב ערך לbRunning בתוך הthreadים, התוכניות יוצרת משתנה חדש, וזה לא משפיעה על הלולאה הראשית, ואם אני בודק את הערך של bRunning, אני מקבל שגיאה שאני מנסה לקרוא למשתנה שעדיין לא אותחל. ניסיתי להעביר את bRunning בתור פרמטר לפונקציות של הthreadים, בגלל שבPython משתנים הם מצביעים, אבל התוכנית מעבירה את המשתנה byVal ויוצרת משתנה חדש שלא משפיעה גם כן. מישהו יודע איך יוצרים משתנים גלובליים, כאלו שאפשר יהיה לשנות גם דרך פונקציות בthreadים שונים??
 

zagzagzag

New member
גישה למשתנים גלובליים

נכון לכל פונקציה ולא רק ל-threads:
bRunning = True def func(): global bRunning bRunning = False​
אבל אני מציע לחשוב אם אתה באמת צריך את צורת המימוש הזו. במודול threading יש כלים לסנכרון שאתה יכול להשתמש בהם (למשל Event, שנראה מתאים לפי התיאור שלך).
 

זויברג

New member
תודה,

כן, זה מה שעשיתי בסוף, יצרתי class שיורש מthreading.Thread. תודה רבה.
 

זויברג

New member
נצל"ש - מיקום סמן בpython

נגיד ואני רוצה למשל ליצור timer שיציג את הזמן בכל רגע נתון. אם אני משתמש בפקודה print, כל שניה מופיעה לי בשורה חדשה, ואני רוצה שכולן יופיעו באותה שורה... יש דרך לעשות את זה? משהו בסגנון setxy בC++?
 

zagzagzag

New member
sys.stdout

זה אובייקט קובץ שכתיבה אליו תופיע בפלט הסטנדרטי (ברירת המחדל היא המסך), ואתה יכול לשלוט על צורת הפלט. לגבי setxy, זו פעולה מיוחדת של ה-console ולכן היא לא תעבוד בכל מערכת. אתה יכול לחפש מודול שמתאים לטיפול ב-console במערכת שאתה משתמש בה.
 
למעלה