fb pixel

Տարբեր քանակի արգումենտներ

Մենք արդեն օգտագործել ենք ֆունկցիաներ, որոնք ընդունում են տարբեր քանակի արգումենտներ print()-ի և zip()-ի նման։ Բայց ինչպե՞ս կարող ենք ստեղծել այդպիսի ֆունկցիա ինքներս, որը կարողանա տարբեր քանակի արգումենտների հետ աշխատի։
print() օգտագործելիս մենք կանչում ենք այն փոխանցելով իրեն տարբեր արգումենտներ, որոնց արժեքները կցանկանայինք, որ այն տպեր ելքում.
print('Hi')                   # Hi
print('Hi', 'how', 'are', 1)  # Hi how are 1
print(1, 2, 3, 8)             # 1 2 3 8
Եթե նայենք, թե ինչպես է իրականացված print()-ը հենց Python-ի օֆիցիալ կայքից, ապա կտեսնենք, որ հենց առաջին արգումենտը ստանում է բոլոր փոխանցված արժեքները։ Նույնը կարելի է տեսնել zip-ի դեպքում.
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
zip(*iterables, strict=False)
Աղբյուրը՝ https://docs.python.org/3/library/functions.html
Մենք կարող ենք ունենալ մեր սեփական ֆունկցիաները, որոնք ընդունում են տարբեր քանակի արգումենտներ * նշանի միջոցով.
def income(*purchases):
	total = 0
	for purchase in purchases:
		total += purchase
	return total

print(income(1, 2, 3, 4, 10))  # 20
Այստեղ մենք կարող ենք purchases-ը դիտարկել, որպես թվերի զանգված։ Մենք կարող ենք ստանալ դրա երկարությունը len()-ի միջոցով, կարող ենք ցիկլով անցնել իր էլեմենտների վրայով և այլն։

Առաջադրանք

Իրականացրեք num_args() ֆունկցիան, որը կվերադարձնի իրեն փոխանցված արգումենտների քանակը։
Օրինակ՝
def num_args(*args):
	...

print(num_args(1, 2, 3))  # 3
print(num_args())         # 0
print(num_args('Anna'))   # 1
 
Pro tip 😎: Ցուցակը կարելի է վերածել *args-ի հետևյալ կերպ.
a = [1, 2, 3, 'hello']
print(*a)

# This is equivalent to
print(1, 2, 3, 'hello')
Այսպես կարող եք շատ հեշտ տպել բացատով առանձնացված զանգվածներ։
 
To check your solution you need to sign in
Sign in to continue