Փոփոխական սկզբնադիր արգումենտների շտկում
Python-ում փոփոխվող օբյեկտների կիրառումը (ինչպիսիք են ցուցակները) որպես ֆունկցիաների սկզբնադիր (default) արգումենտներ, կարող է հանգեցնել անակնկալ վարքագծի: Պատճառն այն է, որ ֆունկցիայի արգումենտի սկզբնադիր արժեքը սահմանվում է միայն մեկ անգամ՝ այն ժամանակ, երբ սահմանվում է ֆունկցիան: Հետևաբար, փոփոխական սկզբնադիր արգումենտն օգտագործվում է բոլոր ֆունկցիաների կանչերի դեպքում:
Սրանից խուսափելու համար ֆունկցիան պետք է փոփոխվի՝ օգտագործելով
None
-ը որպես ցուցակի արգումենտի սկզբնադիր արժեք, իսկ այնուհետև սահմանվի դատարկ ցուցակ ֆունկցիայի ներսում, եթե արգումենտը None
է:Ձեզանից պահանջվում է փոփոխել նախորդ վարժության մեջ սահմանված
mutable_default_argument
ֆունկցիան: Այս ֆունկցիան կունենա երկու պարամետր՝ n
ամբողջ թիվ և ցուցակ՝ lst
, որի սկզբնադիր սահմանումը None
է։Ֆունկցիան պետք է ստուգի, թե արդյոք
lst
-ը None
է, և եթե այո, ապա սահմանի այն որպես դատարկ ցուցակ: Այնուհետև այն պետք է ավելացնի n
ամբողջ թիվը lst
-ին և վերադարձնի lst
-ը:Մուտքի առաջին տողը պարունակում է մեկ ամբողջ թիվ՝
m
(թե քանի անգամ է ֆունկցիան կանչվելու): Հաջորդ m
տողերից յուրաքանչյուրը պարունակում է մեկ ամբողջ թիվ` n
, այն թիվը, որը պետք է ավելացվի ցուցակին:Ելքը պետք է պարունակի
m
տող: Յուրաքանչյուր տող պետք է լինի ցուցակ, որը ներկայացնում է lst
-ը յուրաքանչյուր ֆունկցիայի կանչից հետո:Մուտք | Ելք |
3
1
2
3 | [1]
[2]
[3] |
Նշում․ ուշադրություն դարձրեք, որ ի տարբերություն նախորդ վարժության՝ ցուցակը (
lst
) չի փոխանցվում ֆունկցիաների կանչերի միջև: Յուրաքանչյուր ֆունկցիայի կանչ ստեղծում է մեկ տարրից բաղկացած ցուցակ, որը համապատասխանում է տվյալ կանչին կցված թվին: Սա մեր ակնկալած արդյունքն է, որին մենք հասնում ենք՝ խուսափելով փոփոխական սկզբնադիր արգումենտների կիրառումից:Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB