یک تابع بازگشتی به چه صورت هست ؟
یک تابع بازگشتی به چه صورت هست ؟
کمی از بحث اصلی دور شدیم. در بخش 21-3 قصـد داشـتیم تـابعی بنویسـیم کـه بـا گـرفتن آرگومانی بهعنوان بعد یک دنبالۀ تکبعدي، لیستی از صفرها را بازگرداند. حال اگر بخواهیم این تابع دو آرگومان بگیرد و یک دنبالۀ دو بعدي را بازگرداند باید چه عملی انجام دهیم؟
def sequence(a, b):
zeroList = lambda n : [0 for i in range(n)]
zl = zeroList(a)
for i in range(len(zl)):
zl[i] = zeroList(b)
return zl
در ابتداي تابع sequence ،تابع zeroList را تعریف میکنیم و براي عضو اول یک دنبالـۀ تکبعدي از 0ها میسازیم. حال این دنباله را پیمایش میکنیم و اعضاي آن را به لیستهاي تـکبعـدي از بعد دوم، b ،تغییر میدهیم. بنابراین هرگاه این تابع را فراخوانی کنیم، یک لیست دو بعدي از 0هـا را نتیجه میگیریم:
>> print sequence(2, 3)
[[0, 0, 0], [0, 0, 0]]
حتماً تا به حال وسوسه شدهاید، تابعی بنویسید که آرگومـانهـاي بیشـتري را بـهعنـوان ابعـاد دریافت کند. اگر بخواهیم تعداد آرگومانها اختیاري باشد، میتوانیم آنها را در قالـب یـک چنـدتایی بـه تابع بفرستیم و از آنها استفاده کنیم. براي ساختن دنبالۀ چندبعدي هم تنها کاري که باید انجام دهیم این است که به جاي اسـتفاده از تابع zeroList در انتساب به اعضاي لیست تکبعدي، تابع خودمان را فراخوانی کنیم. چرا که هـر عضو این لیست باید به یک دنبالۀ چندبعدي تبدیل شود.آرگومانهاي ارسالی، همـۀ اعضـاي چنـدتایی، به جز عنصر اول خواهند بود:
def sequence(d):
zeroList = lambda n:[0 for i in range(n)]
zl = zeroList(d[0])
if len(d) == 1:
return zl
else:
for i in range(len(zl)):
zl[i] = sequence(n[1:])
return zl
خروجی تابع براي ساخت یک دنبالۀ سهبعدي به این صورت خواهد بود:
>> print sequence((2,3,2))
[[[0, 0],[0, 0],[0, 0]],[[0, 0],[0, 0],[0, 0]]]
برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید