global - in 87

حسین عبدالوند
15 شهريور ۱۴۰۲

از دستور گلوبال ، باید داخل فالنکشن استفاده کرد؟ 

چون بیرون تابع استفادهع میکنم ارور میده، (یعنی دقیقا باید قبل از استفاده از y بیاد؟

# global y    ---> show error
def test():
    x = 200
    def printxy():
        global y
        y= 100
        print('the first' , y)
        print('firt' , x)
    printxy()    
    print('its another', y)
    print ("anopther" , x)

# global y     ---> show error

test()
print(y)
198

3 پاسخ
  • دانیال آذرپناه16 شهريور ۱۴۰۲

    سلام و درود. بیرون از تابع که لازم نیست چون خودش گلوبال تعریف میشه دیگه میتونید تو هر اسکوپی استفاده کنید از متغیر

  • حسین عبدالوند26 شهريور ۱۴۰۲

    دوباره من توی گلوبال گیر کردم

     

    چرا اینجا باز ارور میده؟

    البته بدون گلوبال و در تابع rapper بصورت کامنت کد رو درست کردم، ولی اینکه چرا گلوبال newlist رو قابل شناسایی در rapper  نمیکنه برام عجیبه

     

     

     

    error:

    UnboundLocalError: local variable 'newlist' referenced before assignment

    def upper_decorator(func):
        # newlist = []   ----> error beacus cant read in next func
        # newlist = []   ----> must be after global
        global newlist
        newlist = []
        def rapper(*args,**kwargs):
            #newlist = []
            for i in args:
                newlist.append(i.upper())
            # args = args.upper()
            newlist = tuple(newlist)
            y= func(newlist)
            return y
    
        return rapper
    
    
    @upper_decorator
    def hello(name):
        return (f'hello {name}')
    
    x=input('whats your name? ')
    x = hello(x)
    print(x)
    
  • دانیال آذرپناه27 شهريور ۱۴۰۲

    سلام خسته نباشید.
    باید تو فانکشن rapper هم گلوبال تعریف کنید تا دسترسی داشته باشید به لیست