Номҳои локалӣ
Номи дар дохили функсия сохташуда, параметр ё ҳар номе, ки функсия ба он қимат мебахшад, локалӣ аст. Он танҳо ҳангоми иҷрои он даъват зинда аст ва ҳеҷ функсияи дигар онро намебинад. Ду функсия метавонанд ҳар кадом n ё i-и худро дошта бошанд, бе ягон баҳс: инҳо номҳои гуногунанд, ки якхела навишта мешаванд. Берун аз функсия номи локалӣ вуҷуд надорад:
Сатри аввал баромади воқеии даъват аст. print-и дуюм барномаро бо NameError: name 'message' is not defined қатъ мекунад.
Номи локалӣ умри кӯтоҳ ҳам дорад. Он вақте сохта мешавад, ки даъват оғоз мешавад ва вақте нест мешавад, ки даъват тамом мешавад. Даъвати навбатӣ аз сифр оғоз мешавад. Барои ҳамин функсия даъватҳои худро бо номи локалӣ шумурда наметавонад: ҳар дафъа calls = 0-и нав аст. Номи глобалӣ инро карда метавонад. Чӣ тавр, дар қисми навбатӣ мебинед.
count_local ҳар дафъа 1 медиҳад. count_global мешуморад: 1, баъд 2.
Номҳои глобалӣ ва хатое, ки ҳамаро дар ҳайрат мемонад
total-и боло глобалӣ аст: он дар сатҳи болои парванда, берун аз ҳамаи функсияҳо сохта шудааст. Ҳар функсия метавонад номи глобалиро бихонад. Қимат бахшидан ба он чизи дигар аст. Вақте функсия ба ном дар ҷое аз тани худ бо total = ... ё total += 1 қимат мебахшад, Python ҳукм мекунад, ки он ном дар тамоми функсия локалӣ аст. Бе сатри global total дастури total += 1 мекӯшад total-и локалиро бихонад, ки ҳанӯз қимат надорад:
Барнома бо UnboundLocalError: cannot access local variable 'count' where it is not associated with a value қатъ мешавад. Сатри global count дар болои функсия мегӯяд: «count глобалӣ аст» ва он гоҳ функсия ба он қимат бахшида метавонад.
Барои тағйир додани рӯйхати глобалӣ global умуман лозим нест. Ин тағйир додани объект аст, на ба ном объекти нав додан:
Чаро аз global дурӣ ҷӯем. Номи глобалиро аз ҳар функсия тағйир додан мумкин аст. Вақте ҷавоб нодуруст аст, бояд ҳамаи онҳоро бинед. Равшантар аст, ки ба функсия маълумотро ҳамчун параметр диҳем ва ҷавобашро бо return гирем: он гоҳ ҳар функсия мегӯяд, ки ба чӣ ниёз дорад ва чӣ медиҳад. global-ро кам истифода баред, барои маълумоте, ки воқеан ба тамоми барнома тааллуқ дорад. Агар дар як вуруд чанд тест бошад, дар хотир доред, ки номи глобалӣ қимати тести пештараро нигоҳ медорад: онро дар аввали ҳар кадом аз нав гузоред.
Барнома дар дохили main()
Шумо аксар вақт ҳалли томро дар функсия печонидашуда мебинед. Барнома дар дохили аст ва сатри охирин мебошад: