请问:方法里如何使用全局变量呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2023-06-25 11:09:56

同学,你好!线程中可以使用global 变量名  来定义一个全局变量,如:global g_num  定义一个全局变量g_num。使用按正常变量操作即可

from threading import Thread  # 导入线程
import time
 
 
def plus():
    print("-------子线程1开始---------")
    global g_num  # 定义全局变量
    g_num += 50  # 全局变量值加50
    print("g_num is %d" % g_num)
    print("-------子线程1结束---------")
 
 
def minus():
    time.sleep(2)
    print("-------子线程2开始---------")
    global g_num  # 定义全局变量
    g_num -= 50  # 全局变量值减50
    print("g_num is %d" % g_num)
    print("-------子线程2结束---------")
 
 
g_num = 100  # 定义一个全局变量
 
if __name__ == "__main__":
    print("----------主线程开始-------------")
    print("g_num is %d" % g_num)
    t1 = Thread(target=plus)  # 实例化线程t1
    t2 = Thread(target=minus)  # 实例化线程t2
    t1.start()  # 开启线程t1
    t2.start()  # 开启线程t2
    t1.join()  # 等待t1线程结束
    t2.join()  # 等待t2线程结束
    print("--------主线程结束-------------")

祝学习愉快~

  • 我还是没找到我写代码的问题:


    我定义了一个变量,peans_number = 30

    然后定义一个方法,方法里用while peans_number >0来判断。

    代码运行时报错:

    UnboundLocalError: cannot access local variable 'peans_number' where it is not associated with a value



    2023-06-25 11:24:11
  • #捡豆子游戏

    import threading

    import random

    import time


    #定义游戏中豆子的数量

    global peans_number

    peans_number = 30


    #存储比赛的名次

    ranking = []



    #捡豆子方法

    def pickup_peans():

        while peans_number > 0 :

            t = threading.current_thread()

            sleep_time = random.randint(1,3)

            time.sleep(sleep_time)

            peans_number = peans_number -1

        ranking.append(t.name)

        print("{}捡完了豆子".format(t.name))


    2023-06-25 11:39:55
  • 同学,你好!1、因同学提供代码不全,老师这边按照自己想法写的。可将全局变量peans_number 放到函数体内,作为全局变量。另外peans_number只是用于存放豆子的数量。要找个容器装豆子的,如列表。当捡到这个豆子,豆子应当从容器拿出去,避免下次被其他人捡到。

    https://img1.sycdn.imooc.com//climg/6497bcf509dbb19403910124.jpg

    https://img1.sycdn.imooc.com//climg/6497bd5409df721308310077.jpg

    完整参考代码如下:

    import threading
    
    import random
    
    import time
    #定义游戏中豆子的数量
    bens=list(range(1, 31))
    
    peans_number = 30
    
    #存储比赛的名
    ranking = []
    #捡豆子方法
    
    def pickup_peans():
        global peans_number
        while peans_number > 0 :
            t = threading.current_thread()
            sleep_time = random.randint(1,3)
            time.sleep(sleep_time)
            if len(bens)>0:
                choice = random.choice(bens )
                bens.remove(choice)
                print("{}捡起了一颗豆子, 豆子编号: {}".format(t.name, choice))
                peans_number = peans_number -1
                print("豆子剩余",peans_number)
        ranking.append(t.name)
        print("{}捡完了豆子".format(t.name))
    class XinXinThread(threading.Thread):
        def run(self):
            pickup_peans()
    
    # 明明线程类
    class MingMingThread(threading.Thread):
        def run(self):
            pickup_peans()
    xinxin_thread = XinXinThread(name="欣欣")
    mingming_thread = MingMingThread(name="明明")
    xinxin_thread.start()
    mingming_thread.start()
    
    
    xinxin_thread.join()
    mingming_thread.join()
    print("本次比赛的结果排名: {}".format(ranking))


    祝学习愉快~

    2023-06-25 12:11:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师