Sobes.tech
Senior

Ի՞նչ կարտահանի յուրաքանչյուր print մուտքային ֆունկցիայում մուտքային փոփոխականային արգումենտով։

sobes.tech AI

Պատասխան AI-ից

Որ լեզուներում ֆունկցիաները կարող են ունենալ մուտքային (mutable) նախնական արգումենտներ, օրինակ Python-ում, նախնական արժեքները միանգամից սահմանվում են ֆունկցիայի սահմանման ժամանակ, ոչ թե յուրաքանչյուր կանչի ժամանակ։ Սա հանգեցնում է նրան, որ եթե նախնական արգումենտը փոփոխական օբյեկտ է (օրինակ, ցանկ կամ բառարան), ապա այդ օբյեկտի փոփոխությունները պահպանվում են կանչերի միջև։

Python-ում օրինակ՝


def func(a, lst=[]):
    lst.append(a)
    print(lst)

func(1)  # Տպում է՝ [1]
func(2)  # Տպում է՝ [1, 2]
func(3, ['x'])  # Տպում է՝ ['x', 3]
func(4)  # Տպում է՝ [1, 2, 4]

Նախաբանություն՝

  • Առաջին կանչում func(1) օգտագործվում է նախնական ցանկը [], որի մեջ ավելացվում է 1։
  • Երկրորդ կանչում func(2) նույն ցանկն է օգտագործվում, այժմ [1], և ավելացվում է 2։
  • func(3, ['x']) կանչում է նոր ցանկ ['x'], հետևաբար փոփոխությունները չեն ազդում նախնական ցանկի վրա։
  • Վերջին կանչում func(4) կրկին օգտագործվում է նախնական ցանկը, որը այժմ պարունակում է [1, 2], և ավելացվում է 4։

Այսպիսով, յուրաքանչյուր print ցույց կտա փոփոխական նախնական արգումենտի ընթացիկ վիճակը, որը պահպանում է փոփոխությունները կանչերի միջև։