பைதான் – கன்ட்ரோல் ஃபிளோ (Control Flow)

4.கன்ட்ரோல்ஃபிளோ(Control Flow)

முன்பு கண்ட while மட்டுமின்றி, பைதானில், பிற மொழிகளில் இருப்பது போலவே. பல Control Flow கருவிகள் உள்ளன. அவை சற்றே மாறுபட்டு, புதிய தன்மைகளுடன் உள்ளன.

4.1 If statement:

If. இது மிகவும் பிரபலமான ஒரு Control Flow statement.

>>> x = int(raw_input(“Please enter an integer: “))

Please enter an integer: 42

>>> if x < 0:

… x = 0

… print ‘Negative changed to zero’

… elif x == 0:

… print ‘Zero’

… elif x == 1:

… print ‘Single’

… else:

… print ‘More’

More

elif பகுதிகள் எத்தனை வேண்டுமானாலும் இருக்கலாம். அல்லது இல்லாமலே கூட போகலாம். else கூட நமது விருப்ப தேர்வு தான். elif என்பது else if என்பதன் சுருக்க வடிவம்.

பிற மொழிகளில் உள்ளது போல switch case பைதானில் இல்லை. அதற்கு பதிலாக if…elif…elif எனும் தொடரே பயன்படுத்தப்படுகிறது.

4.2 For Statements:

C மொழியில் உள்ள for loop-ஐ விட பைதான் மொழியின் for loop சற்றே வித்தியாசமானது. C-ல் iteration மற்றும் halt condition ஐ நாமே தரவேண்டும். பைதானில் loop ஆனது தரப்பட்ட sequence ல் உள்ள எல்லா item களுக்கும் இயங்குகிறது. அது list ஆகவோ string கூட இருக்கலாம்.

>>> # Measure some strings:

… words = [‘cat’, ‘window’, ‘defenestrate’]

>>> for w in words:

… print w, len(w)

cat 3

window 6

defenestrate 12

இவ்வாறு தரப்படும் sequence-ன் மதிப்புகளை மாற்றக் கூடாது (list-ல் மட்டுமே இது சாத்தியம்). அப்படி மாற்ற வேண்டுமெனில், list ஐ ஒரு copy எடுத்துக் கொண்டு பின் மாற்ற வேண்டும்.

>>> for w in words[:]: # Loop over a slice copy of the entire list.

… if len(w) > 6:

… words.insert(0, w)

>>> words

[‘defenestrate’, ‘cat’, ‘window’, ‘defenestrate’]

4.3 range() என்றfunction:

தொடர்ச்சியான சில எண்களுக்கு இடையே loop செய்ய வேண்டுமானால், range() என்ற function உதவுகிறது. இது தொடர்ச்சியான எண்கள் கொண்ட ஒரு list-ஐத் தருகிறது.

>>> range(10)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

தரப்பட்ட எண் எப்போதும் விடையாக இருக்கும் list-ல் இடம் பெறாது. range(10) ஆனது 0 முதல் 9 வரையான எண்களைத் தருகிறது. இந்த range()-ல், தொடங்கும் எண், முடியும் எண், அதிகரிக்கும் மதிப்பு (incremental value) ஆகியவற்றை கூட தரலாம்.

>>> range(5, 10)

[5, 6, 7, 8, 9]

>>> range(0, 10, 3)

[0, 3, 6, 9]

>>> range(-10, -100, -30)

[-10, -40, -70]

ஒரு sequence-ன் index எண்களை iterate செய்ய வேண்டுமெனில் range() மற்றும் len() என்ற function-களை இணைத்துப் பயன்படுத்த வேண்டும்.

>>> a = [‘Mary’, ‘had’, ‘a’, ‘little’, ‘lamb’]

>>> for i in range(len(a)):

… print i, a[i]

0 Mary

1 had

2 a

3 little

4 lamb

4.4 break, continue மற்றும்else:

C மொழியைப் போலவே break ஆனது தனக்கு மேலே உள்ள for அல்லது while loop ஐ விட்டு வெளியே வரச் செய்கிறது.

continue ஆனது, அடுத்த loop-க்கு தாவச் செய்கிறது.

loop statement-களில் else-ஐக் கூட பயன்படுத்தலாம். For loop-ல் sequence முடிந்த பின்பும். while loop-ல் தரப்பட்ட condition ஆனது false ஆகும் போதும், else அழைக்கப் படுகிறது. ஆனால் break பயன்படுத்தினால் மட்டும் else பயன்படாது.

இதனை பகா எண்களை (prime number) தேடும் ஒரு program மூலம் விளக்கலாம்.

>>> for n in range(2, 10):

… for x in range(2, n):

… if n % x == 0:

… print n, ‘equals’, x, ‘*’, n/x

… break

… else:

… # loop fell through without finding a factor

… print n, ‘is a prime number’

2 is a prime number

3 is a prime number

4 equals 2 * 2

5 is a prime number

6 equals 2 * 3

7 is a prime number

8 equals 2 * 4

9 equals 3 * 3

‘continue’-க்கான உதாரணம்

>>> for num in range(2, 10):

… if num % 2 == 0:

… print(“Found an even number”, num)

… continue

… print(“Found a number”, num)

Found an even number 2

Found a number 3

Found an even number 4

Found a number 5

Found an even number 6

Found a number 7

Found an even number 8

Found a number 9

4.5 pass statement:

pass-ஆனது எதுவுமே செய்வதில்லை, நிஜமாகத்தான். இதை ஒரு syntax தேவைக்காக மட்டும் பயன்படுத்தலாம். Runtime மற்றும் syntax பிழைகளைத் தவிர்க்க இதைப் பயன்படுத்தலாம்.

உதாரணத்திற்கு:-

>>> while True:

… pass # Busy-wait for keyboard interrupt (Ctrl+C)

பொதுவாக இது minimal classes-ஐ உருவாக்கப் பயன்படுகிறது:

>>> class MyEmptyClass:

… pass

இன்னொரு விதமாக pass-ஐ, function அல்லது conditional body-க்கு placeholder-ஆக புதிதாக நிரல் எழுதும் போது பயன்படுத்தி, கருவிலிருந்து நம் கவனம் சிதறாமல் பார்த்துக் கொள்ளலாம். ‘pass’ அமைதியாக தவிர்க்கப்படுகிறது:

>>> def initlog(*args):

… pass # Remember to implement this!

4.6 function – அறிமுகம்:

முதலில் ஒரு function –ஐ எழுதிவிட்டு அதைப் பற்றி விரிவாக காண்போம். தரப்பட்ட எண்களுக்குள் இருக்கும் Fibonacci series-ஐ கொடுக்கும் ஒரு function இதோ.

>>> def fib(n): # write Fibonacci series up to n

… “””Print a Fibonacci series up to n.”””

… a, b = 0, 1

… while a < n:

… print a,

… a, b = b, a+b

>>> # Now call the function we just defined:

… fib(2000)

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

இதில் உள்ள def என்ற keyword-ஆனது ஒரு function-ஐ define செய்கிறது. def க்கு பிறகு அந்த function பெயரும் argument-களும் தரப்பட வேண்டும். ஒரு semi colan : மூலம் முதல் வரியை முடிக்க வேண்டும். அடுத்த வரியிலிருந்து body தொடங்குகிறது. இது கண்டிப்பாக indent செய்திருக்கப்பட வேண்டும். ஒரு function-ன் முதல் வரி வெறும் string ஆக கூட இருக்கலாம். “““ எனத் தொடங்கும் இந்த வரி documentation string அதாவது doc string எனப்படும். அந்த function-ஐ பற்றிய விளக்கத்தை இந்த வரியில் சொல்லலாம்.

இவ்வாறு function-களை விளக்கும் doc string-களை தானாகக் கண்டுபிடித்து. படிப்பதற்கு. எளிய வகையிலும், source code-ஐ browse செய்யும் வகையிலும் online documentation-ஐ தயார் செய்யும் பல மென்பொருட்கள் கிடைக்கின்றன. இவை புதிதாக மென்பொருளை கற்பவர்களுக்கு மிகவும் உதவியாக இருக்கும். எனவே எல்லா function களுக்கும் அவற்றின் செயலை விவரிக்கும் doc string-ஐத் தருவது நல்லது.

ஒரு function-க்குள் பயன்படுத்தப்படும் variable-கள் local variable-கள் எனப்படுகின்றன. அவை local symbol table-ல் சேமிக்கப் படுகின்றன. பைதான் மொழி ஒரு பெயரை தேடும் போது முதலில் local symbol table-லிலும், பிறகு global symbol table-லிலும் கடைசியாக build in table-லிலும் தேடுகிறது. எனவே ஒரு global variable ஐ ஒரு functionக்குள் நேரடியாக பயன்படுத்தக் கூடாது. (global என்ற அடைமொழியை பயன்படுத்தி ஒரு global variable-ஐ அப்படியே பயன்படுத்தலாம்)

ஒரு function-ஐ define செய்யும் போது. அதன் பெயர் பைதானின் symbol tableல் சேர்க்கப் படுகிறது. அதன் மதிப்பு ‘user defined function’ ஆக இருக்கும். இதை மற்றொரு பெயருக்கு assign செய்யலாம். அந்த பெயர் கூட அதே function போல செயல்படும்.

>>> fib

<function fib at 10042ed0>

>>> f = fib

>>> f(100)

0 1 1 2 3 5 8 13 21 34 55 89

fib என்ற function எந்த value-ஐயும் return செய்வதில்லை. ஆனால் NONE என்பதை return செய்வதால் அது மறைக்கப்படுகிறது. வேண்டுமானால் அதையும் பார்க்கலாம்.

>>> fib(0)

>>> print fib(0)

None

விடையை print செய்வதற்கு பதிலாக அவற்றை return கூட செய்யலாம். fibonacci எண்களை print செய்யாமல் return செய்யும் function இதோ.

>>> def fib2(n): # return Fibonacci series up to n

… “””Return a list containing the Fibonacci series up to n.”””

… result = []

… a, b = 0, 1

… while a < n:

… result.append(a) # see below

… a, b = b, a+b

… return result

>>> f100 = fib2(100) # call it

>>> f100 # write the result

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

மேற்கண்ட உதாரணத்தில்,

  • return என்ற statement ஆனது function உடைய மதிப்பை return செய்கிறது. மதிப்பு எதுவும் இல்லை எனில் NONE-ஐ return செய்கிறது.

  • result.append(b) என்பதை கவனிக்கவும். இதில் result என்பது ஒரு list object. append() என்பது list object-ஐச் சார்ந்த ஒரு method ஆகும். ஒரு method என்பது ஒரு object-ஐச் சார்ந்த ஒரு function ஆகும். object.method_name என்று இவை பயன்படுத்தப்படுகின்றன. Method ஆனது பல்வேறு object type க்கு ஏற்ப மாறுபடுகிறது. ஒரே method name ஆனது வெவ்வேறு object type களுக்கு வெவ்வேறு வகையில் பயன்படலாம் (நாமே கூட சொந்தமாக object type மற்றும் method-களை உருவாக்கலாம். இவற்றைப் பற்றி class-ல் விரிவாக காணலாம்). append() என்ற method, result என்ற list object-க்கு பயன்படுகிறது. list-ன் இறுதியில் ஒரு புதிய item-ஐச் சேர்க்கிறது. இது result = result + [b] என்பதற்கு சமமானது.

… தொடரும்

%d bloggers like this: