Python en:Basics

27

Single Quotes

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

You can specify strings using single quotes such as 'Quote me on this'. All white space i.e. spaces and tabs are preserved as-is.

Double Quotes

Strings in double quotes work exactly the same way as strings in single quotes. An example is "What's your name?"

Triple Quotes

You can specify multi-line strings using triple quotes - (""" or '''). You can use single quotes and double quotes freely within the triple quotes. An example is:

'''This is a multi-line string. This is the first line.

This is the second line.

"What's your name?," I asked.

He said "Bond, James Bond."

'''

Escape Sequences

Suppose, you want to have a string which contains a single quote ('), how will you specify this string? For example, the string is What's your name?. You cannot specify 'What's

your name?' because Python will be confused as to where the string starts and ends. So, you will have to specify that this single quote does not indicate the end of the string. This can be done with the help of what is called an escape sequence. You specify the single quote as \' - notice the backslash. Now, you can specify the string as 'What\'s your

name?'.

Another way of specifying this specific string would be "What's your name?" i.e. using double quotes. Similarly, you have to use an escape sequence for using a double quote itself in a double quoted string. Also, you have to indicate the backslash itself using the escape sequence \\.

What if you wanted to specify a two-line string? One way is to use a triple-quoted string as shown previously or you can use an escape sequence for the newline character - \n to

indicate the start of a new line. An example is This is the first line\nThis is the

second line. Another useful escape sequence to know is the tab - \t. There are many more escape sequences but I have mentioned only the most useful ones here.

One thing to note is that in a string, a single backslash at the end of the line indicates that the string is continued in the next line, but no newline is added. For example:

"This is the first sentence.\

This is the second sentence."

is equivalent to "This is the first sentence. This is the second sentence.".

Python en:Basics

28

Raw Strings

If you need to specify some strings where no special processing such as escape sequences are handled, then what you need is to specify a raw string by prefixing r or R to the string.

An example is r"Newlines are indicated by \n".

Strings Are Immutable

This means that once you have created a string, you cannot change it. Although this might seem like a bad thing, it really isn't. We will see why this is not a limitation in the various programs that we see later on.

String Literal Concatenation

If you place two string literals side by side, they are automatically concatenated by Python.

For example, 'What\'s ' 'your name?' is automatically converted in to "What's your name?".

Note for C/C++ Programmers

There is no separate char data type in Python. There is no real need for it and I am

sure you won't miss it.

Note for Perl/PHP Programmers

Remember that single-quoted strings and double-quoted strings are the same - they do

not differ in any way.

Note for Regular Expression Users

Always use raw strings when dealing with regular expressions. Otherwise, a lot of

backwhacking may be required. For example, backreferences can be referred to as

'\\1' or r'\1'.

The format Method

Sometimes we may want to construct strings from other information. This is where the

format() method is useful.

#!/usr/bin/python

# Filename: str_format.py

age = 25

name = 'Swaroop'

print('{0} is {1} years old'.format(name, age))

print('Why is {0} playing with that python?'.format(name))

Output:

$ python str_format.py

Swaroop is 25 years old

Why is Swaroop playing with that python?

How It Works:

A string can use certain specifications and subsequently, the format method can be called to substitute those specifications with corresponding arguments to the format method.

Python en:Basics

29

Observe the first usage where we use {0} and this corresponds to the variable name which is the first argument to the format method. Similarly, the second specification is {1}

corresponding to age which is the second argument to the format method.

Notice that we could achieved the same using string concatenation: name + ' is ' +

str(age) + ' years old' but notice how much uglier and error-prone this is. Second, the conversion to string would be done automatically by the format method instead of the

explicit conversion here. Third, when using the format method, we can change the

message without having to deal with the variables used and vice-versa.

What Python does in the format method is that it substitutes each argument value into the place of the specification. There can be more detailed specifications such as:

>>> '{0:.3}'.format(1/3) # decimal (.) precision of 3 for float

'0.333'

>>> '{0:_^11}'.format('hello') # fill with underscores (_) with the text

centered (^) to 11 width

'___hello___'

>>> '{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python')

# keyword-based

'Swaroop wrote A Byte of Python'

Details of this formatting specification is explained in the Python Enhancement Proposal No. 3101 (http://www.python.org/dev/peps/pep-3101/).

Variables

Using just literal constants can soon become boring - we need some way of storing any

information and manipulate them as well. This is where variables come into the picture.

Variables are exactly what the name implies - their value can vary, i.e., you can store anything using a variable. Variables are just parts of your computer's memory where you store some information. Unlike literal constants, you need some method of accessing these variables and hence you give them names.

Identifier Naming

Variables are examples of identifiers. Identifiers are names given to identify something.

There are some rules you have to follow for naming identifiers:

• The first character of the identifier must be a letter of the alphabet (uppercase ASCII or lowercase ASCII or Unicode character) or an underscore ('_').

• The rest of the identifier name can consist of letters (uppercase ASCII or lowercase ASCII or Unicode character), underscores ('_') or digits (0-9).

• Identifier names are case-sensitive. For example, myname and myName are not the same.

Note the lowercase n in the former and the uppercase N in the latter.

• Examples of valid identifier names are i, __my_name, name_23, a1b2_c3 and

resumé_count.

• Examples of invalid identifier names are 2things, this is spaced out, my-name, and

"this_is_in_quotes".

Python en:Basics

30

Data Types

Variables can hold values of different types called data types. The basic types are numbers and strings, which we have already discussed. In later chapters, we will see how to create our own types using classes.

Objects

Remember, Python refers to anything used in a program as an object. This is meant in the generic sense. Instead of saying 'the something', we say 'the object'.

Note for Object Oriented Programming users

Python is strongly object-oriented in the sense that everything is an object including numbers, strings and functions.

We will now see how to use variables along with literal constants. Save the following

example and run the program.

How to write Python programs

Henceforth, the standard procedure to save and run a Python program is as follows:

1. Open your favorite editor.

1. Enter the program code given in the example.

1. Save it as a file with the filename mentioned in the comment. I follow the convention of having all Python programs saved with the extension .py.

1. Run the interpreter with the command python program.py or use IDLE to run the

programs. You can also use the executable method as explained earlier.

Example: Using Variables And Literal Constants

# Filename : var.py

i = 5

print(i)

i = i + 1

print(i)

s = '''This is a multi-line string.

This is the second line.'''

print(s)

Output:

$ python var.py

5

6

This is a multi-line string.

This is the second line.

How It Works:

Here's how this program works. First, we assign the literal constant value 5 to the variable i using the assignment operator (=). This line is called a statement because it states that Python en:Basics

31

something should be done and in this case, we connect the variable name i to the value 5.

Next, we print the value of i using the print statement which, unsurprisingly, just prints the value of the variable to the screen.

Then we add 1 to the value stored in i and store it back. We then print it and expectedly, we get the value 6.

Similarly, we assign the literal string to the variable s and then print it.

Note for static language programmers

Variables are used by just assigning them a value. No declaration or data type

definition is needed/used.

Logical And Physical Lines

A physical line is what you see when you write the program. A logical line is what Python sees as a single statement. Python implicitly assumes that each physical line corresponds to a logical line.

An example of a logical line is a statement like print('Hello World') - if this was on a line by itself (as you see it in an editor), then this also corresponds to a physical line.

Implicitly, Python encourages the use of a single statement per line which makes code more readable.

If you want to specify more than one logical line on a single physical line, then you have to explicitly specify this using a semicolon (;) which indicates the end of a logical

line/statement. For example,

i = 5

print(i)

is effectively same as

i = 5;

print(i);

and the same can be written as

i = 5; print(i);

or even

i = 5; print(i)

However, I strongly recommend that you stick to writing a single logical line in a single physical line only. Use more than one physical line for a single logical line only if the logical line is really long. The idea is to avoid the semicolon as much as possible since it leads to more readable code. In fact, I have never used or even seen a semicolon in a Python program.

An example of writing a logical line spanning many physical lines follows. This is referred to as explicit line joining.

s = 'This is a string. \

This continues the string.'

print(s)

Python en:Basics

32

This gives the output:

This is a string. This continues the string.

Similarly,

print\

(i)

is the same as

print(i)

Sometimes, there is an implicit assumption where you don't need to use a backslash. This is the case where the logical line uses parentheses, square brackets or curly braces. This is is called implicit line joining. You can see this in action when we write programs using lists in later chapters.

Indentation

Whitespace is important in Python. Actually, whitespace at the beginning of the line is important. This is called indentation. Leading whitespace (spaces and tabs) at the beginning of the logical line is used to determine the indentation level of the logical line, which in turn is used to determine the grouping of statements.

This means that statements which go together must have the same indentation. Each such set of statements is called a block. We will see examples of how blocks are important in later chapters.

One thing you should remember is that wrong indentation can give rise to errors. For

example:

i = 5

print('Value is ', i) # Error! Notice a single space at the start of

the line

print('I repeat, the value is ', i)

When you run this, you get the following error:

File "whitespace.py", line 4

print('Value is ', i) # Error! Notice a single space at the

start of the line

^

IndentationError: unexpected indent

Notice that there is a single space at the beginning of the second line. The error indicated by Python tells us that the syntax of the program is invalid i.e. the program was not

properly written. What this means to you is that you cannot arbitrarily start new blocks of statements (except for the default main block which you have been using all along, of course). Cases where you can use new blocks will be detailed in later chapters such as the control flow chapter.

How to indent

Do not use a mixture of tabs and spaces for the indentation as it does not work across different platforms properly. I strongly recommend that you use a single tab or four Python en:Basics

33

spaces for each indentation level.

Choose either of these two indentation styles. More importantly, choose one and use it consistently i.e. use that indentation style only.

Note to static language programmers

Python will always use indentation for blocks and will never use braces. Run from

__future__ import braces to learn more.

Summary

Now that we have gone through many nitty-gritty details, we can move on to more

interesting stuff such as control flow statements. Be sure to become comfortable with what you have read in this chapter.

Previous Next

Source: http://www.swaroopch.com/mediawiki/index.php?oldid=2376

Contributors: Swaroop, Vages, 10 anonymous edits

Python en:Operators and Expressions

Introduction

Most statements (logical lines) that you write will contain expressions. A simple example of an expression is 2 + 3. An expression can be broken down into operators and operands.

Operators are functionality that do something and can be represented by symbols such as +

or by special keywords. Operators require some data to operate on and such data is called operands. In this case, 2 and 3 are the operands.

Operators

We will briefly take a look at the operators and their usage:

Note that you can evaluate the expressions given in the examples using the interpreter interactively. For example, to test the expression 2 + 3, use the interactive Python

interpreter prompt:

>>> 2 + 3

5

>>> 3 * 5

15

>>>

Operator

Name

Explanation

Examples

+

Plus

Adds the two objects

3 + 5 gives 8. 'a' + 'b' gives 'ab'.

-

Minus

Either gives a negative

-5.2 gives a negative number. 50 - 24 gives 26.

number or gives the

subtraction of one number

from the other

Python en:Operators and Expressions

34

*

Multiply

Gives the multiplication of the

2 * 3 gives 6. 'la' * 3 gives 'lalala'.

two numbers or returns the

string repeated that many

times.

**

Power

Returns x to the power of y

3 ** 4 gives 81 (i.e. 3 * 3 * 3 * 3)

/

Divide

Divide x by y

4 / 3 gives 1.3333333333333333.

//

Floor Division Returns the floor of the

4 // 3 gives 1.

quotient

%

Modulo

Returns the remainder of the

8 % 3 gives 2. -25.5 % 2.25 gives 1.5.

division

<<

Left Shift

Shifts the bits of the number

2 << 2 gives 8. 2 is represented by 10 in bits. Left

to the left by the number of

shifting by 2 bits gives 1000 which represents the

bits specified. (Each number is decimal 8.

represented in memory by bits

or binary digits i.e. 0 and 1)

>>

Right Shift

Shifts the bits of the number

11 >> 1 gives 5. 11 is represented in bits by 1011

to the right by the number of

which when right shifted by 1 bit gives 101 which is

bits specified.

the decimal 5.

&

Bitwise AND

Bitwise AND of the numbers

5 & 3 gives 1.

|

Bit-wise OR

Bitwise OR of the numbers

5 | 3 gives 7

^

Bit-wise XOR Bitwise XOR of the numbers

5 ^ 3 gives 6

~

Bit-wise

The bit-wise inversion of x is

~5 gives -6.

invert

-(x+1)

<

Less Than

Returns whether x is less than

5 < 3 gives False and 3 < 5 gives True.

y. All comparison operators

Comparisons can be chained arbitrarily: 3 < 5 < 7

return True or False. Note

gives True.

the capitalization of these

names.

>

Greater Than Returns whether x is greater

5 > 3 returns True. If both operands are numbers,

than y

they are first converted to a common type.

Otherwise, it always returns False.

<=

Less Than or

Returns whether x is less than

x = 3; y = 6; x <= y returns True.

Equal To

or equal to y

>=

Greater Than

Returns whether x is greater

x = 4; y = 3; x >= 3 returns True.

or Equal To

than or equal to y

==

Equal To

Compares if the objects are

x = 2; y = 2; x == y returns True.

equal

x = 'str'; y = 'stR'; x == y returns False.

x = 'str'; y = 'str'; x == y returns True.

!=

Not Equal To Compares if the objects are

x = 2; y = 3; x != y returns True.

not equal

not

Boolean NOT If x is True, it returns False. If x = True; not x returns False.

x is False, it returns True.

and

Boolean AND x and y returns False if x is

x = False; y = True; x and y returns False

False, else it returns

since x is False. In this case, Python will not evaluate

evaluation of y

y since it knows that the left hand side of the 'and'

expression is False which implies that the whole

expression will be False irrespective of the other

values. This is called short-circuit evaluation.

Python en:Operators and Expressions

35

or

Boolean OR

If x is True, it returns True,

x = True; y = False; x or y returns True.

else it returns evaluation of y

Short-circuit evaluation applies here as well.

Shortcut for math operation and assignment

It is common to run a math operation on a variable and then assign the result of the

operation back to the variable, hence there is a shortcut for such expressions:

You can write:

a = 2; a = a * 3

as:

a = 2; a *= 3

Notice that var = var operation expression becomes var operation= expression.

Evaluation Order

If you had an expression such as 2 + 3 * 4, is the addition done first or the multiplication?

Our high school maths tells us that the multiplication should be done first. This means that the multiplication operator has higher precedence than the addition operator.

The following table gives the precedence table for Python, from the lowest precedence

(least binding) to the highest precedence (most binding). This means that in a given

expression, Python will first evaluate the operators and expressions lower in the table before the ones listed higher in the table.

The following table, taken from the Python reference manual (http:/ / docs. python. org/

dev/ 3. 0/ reference/ expressions. html#evaluation-order), is provided for the sake of

completeness. It is far better to use parentheses to group operators and operands

appropriately in order to explicitly specify the precedence. This makes the program more readable. See Changing the Order of Evaluation below for details.

Operator

Description

lambda

Lambda Expression

or

Boolean OR

and

Boolean AND

not x

Boolean NOT

in, not in

Membership tests

is, is not

Identity tests

<, <=, >, >=, !=, ==

Comparisons

|

Bitwise OR

^

Bitwise XOR

&

Bitwise AND

<<, >>

Shifts

+, -

Addition and subtraction

*, /, //, %

Multiplication, Division, Floor Division and Remainder

+x, -x

Positive, Negative

Python en:Operators and Expressions

36

~x

Bitwise NOT

**

Exponentiation

x.attribute

Attribute reference

x[index]

Subscription

x[index1:index2]

Slicing

f(arguments ...)

Function call

(expressions, ...)

Binding or tuple display

[expressions, ...]

List display

{key:datum, ...}

Dictionary display

The operators which we have not already come across will be explained in later chapters.

Operators with the same precedence are listed in the same row in the above table. For example, + and - have the same precedence.

Changing the Order Of Evaluation

To make the expressions more readable, we can use parentheses. For example, 2 + (3 *

4) is definitely easier to understand than 2 + 3 * 4 which requires knowledge of the

operator precedences. As with everything else, the parentheses should be used reasonably (do not overdo it) and should not be redundant (as in 2 + (3 + 4)).

There is an additional advantage to using parentheses - it helps us to change the order of evaluation. For example, if you want addition to be evaluated before multiplication in an expression, then you can write something like (2 + 3) * 4.

Associativity

Operators are usually associated from left to right i.e. operators with same precedence are evaluated in a left to right manner. For example, 2 + 3 + 4 is evaluated as (2 + 3) + 4.

Some operators like assignment operators have right to left associativity i.e. a = b = c is treated as a = (b = c).

Expressions

Example:

#!/usr/bin/python

# Filename: expression.py

length = 5

breadth = 2

area = length * breadth

print('Area is', area)

print('Perimeter is', 2 * (length + breadth))

Output:

Python en:Operators and Expressions

37

$ python expression.py

Area is 10

Perimeter is 14

How It Works:

The length and breadth of the rectangle are stored in variables by the same name. We use these to calculate the area and perimeter of the rectangle with the help of expressions. We store the result of the expression length * breadth in the variable area and then print it using the print function. In the second case, we directly use the value of the expression 2

* (length + breadth) in the print function.

Also, notice how Python 'pretty-prints' the output. Even though we have not specified a space between 'Area is' and the variable area, Python puts it for us so that we get a

clean nice output and the program is much more readable this way (since we don't need to worry about spacing in the strings we use for output). This is an example of how Python makes life easy for the programmer.

Summary

We have seen how to use operators, operands and expressions - these are the basic building blocks of any program. Next, we will see how to make use of these in our programs using statements.

Previous Next

Source: http://www.swaroopch.com/mediawiki/index.php?oldid=1579

Contributors: Swaroop, 4 anonymous edits

Python en:Control Flow

38

Python en:Control Flow

Introduction

In the programs we have seen till now, there has always been a series of statements and Python faithfully executes them in the same order. What if you wanted to change the flow of how it works? For example, you want the program to take some decisions and do different things depending on different situations such as printing 'Good Morning' or 'Good Evening'

depending on the time of the day?

As you might have guessed, this is achieved using control flow statements. There are three control flow statements in Python - if, for and while.

The if statement

The if statement is used to check a condition and if the condition is true, we run a block of statements (called the if-block), else we process another block of statements (called the else-block). The else clause is optional.

Example:

#!/usr/bin/python

# Filename: if.py

number = 23

guess = int(input('Enter an integer : '))

if guess == number:

print('Congratulations, you guessed it.') # New block starts here

print('(but you do not win any prizes!)') # New block ends here

elif guess < number:

print('No, it is a little higher than that') # Another block

# You can do whatever you want in a block ...

else:

print('No, it is a little lower than that')

# you must have guess > number to reach here

print('Done')

# This last statement is always executed, after the if statement is

executed

Output:

$ python if.py

Enter an integer : 50

No, it is a little lower than that

Done

$ python if.py

Enter an integer : 22

Python en:Control Flow

39

No, it is a little higher than that

Done

$ python if.py

Enter an integer : 23

Congratulations, you guessed it.

(but you do not win any prizes!)

Done

How It Works:

In this program, we take guesses from the user and check if it is the number that we have.

We set the variable number to any integer we want, say 23. Then, we take the user's guess using the input() function. Functions are just reusable pieces of programs. We'll read more about them in the next chapter.

We supply a string to the built-in input function which prints it to the screen and waits for input from the user. Once we enter something and press enter key, the input() function returns what we entered, as a string. We then convert this string to an integer using int and then store it in the variable guess. Actually, the int is a class but all you need to know right now is that you can use it to convert a string to an integer (assuming the string contains a valid integer in the text).

Next, we compare the guess of the user with the number we have chosen. If they are equal, we print a success message. Notice that we use indentation levels to tell Python which statements belong to which block. This is why indentation is so important in Python. I hope you are sticking to the "consistent indentation" rule. Are you?

Notice how the if statement contains a colon at the end - we are indicating to Python that a block of statements follows.

Then, we check if the guess is less than the number, and if so, we inform the user to guess a little higher than that. What we have used here is the elif clause which actually

combines two related if else-if else statements into one combined if-elif-else

statement. This makes the program easier and reduces the amount of indentation required.

The elif and else statements must also have a colon at the end of the logical line

followed by their corresponding block of statements (with proper indentation, of course) You can have another if statement inside the if-block of an if statement and so on - this is called a nested if statement.

Remember that the elif and else parts are optional. A minimal valid if statement is:

if True:

print('Yes, it is true')

After Python has finished executing the complete if statement along with the associated elif and else clauses, it moves on to the next statement in the block containing the if statement. In this case, it is the main block where execution of the program starts and the next statement is the print('Done') statement. After this, Python sees the ends of the program and simply finishes up.

Although this is a very simple program, I have been pointing out a lot of things that you should notice even in this simple program. All these are pretty straightforward (and

surprisingly simple for those of you from C/C++ backgrounds) and requires you to become Python en:Control Flow

40

aware of all these initially, but after that, you will become comfortable with it and it'll feel

'natural' to you.

Note for C/C++ Programmers

There is no switch statement in Python. You can use an if..elif..else statement to

do the same thing (and in some cases, use a dictionary to do it quickly)

The while Statement

The while statement allows you to repeatedly execute a block of statements as long as a condition is true. A while statement is an example of what is called a looping statement. A while statement can have an optional else clause.

Example:

#!/usr/bin/python

# Filename: while.py

number = 23

running = True

while running:

guess = int(input('Enter an integer : '))

if guess == number:

print('Congratulations, you guessed it.')

running = False # this causes the while loop to stop

elif guess < number:

print('No, it is a little higher than that.')

else:

print('No, it is a little lower than that.')

else:

print('The while loop is over.')

# Do anything else you want to do here

print('Done')

Output:

$ python while.py

Enter an integer : 50

No, it is a little lower than that.

Enter an integer : 22

No, it is a little higher than that.

Enter an integer : 23

Congratulations, you guessed it.

The while loop is over.

Done

How It Works:

Python en:Control Flow

41

In this program, we are still playing the guessing game, but the advantage is that the user is allowed to keep guessing until he guesses correctly - there is no need to repeatedly run the program for each guess, as we have done in the previous section. This aptly

demonstrates the use of the while statement.

We move the input and if statements to inside the while loop and set the variable

running to True before the while loop. First, we check if the variable running is True and then proceed to execute the corresponding while-block. After this block is executed, the condition is again checked which in this case is the running variable. If it is true, we execute the while-block again, else we continue to execute the optional else-block and then continue to the next statement.

The else block is executed when the while loop condition becomes False - this may even be the first time that the condition is checked. If there is an else clause for a while loop, it is always executed unless you break out of the loop with a break statement.

The True and False are called Boolean types and you can consider them to be equivalent to the value 1 and 0 respectively.

Note for C/C++ Programmers

Remember that you can have an else clause for the while loop.

The for loop

The for..in statement is another looping statement which iterates over a sequence of objects i.e. go through each item in a sequence. We will see more about sequences in detail in later chapters. What you need to know right now is that a sequence is just an ordered collection of items.

Example:

#!/usr/bin/python

# Filename: for.py

for i in range(1, 5):

print(i)

else:

print('The for loop is over')

Output:

$ python for.py

1

2

3

4

The for loop is over

How It Works:

In this program, we are printing a sequence of numbers. We generate this sequence of numbers using the built-in range function.

What we do here is supply it two numbers and range returns a sequence of numbers

starting from the first number and up to the second number. For example, range(1,5)

Python en:Control Flow

42

gives the sequence [1, 2, 3, 4]. By default, range takes a step count of 1. If we supply a third number to range, then that becomes the step count. For example, range(1,5,2)

gives [1,3]. Remember that the range extends up to the second number i.e. it does not include the second number.

The for loop then iterates over this range - for i in range(1,5) is equivalent to for i in [1, 2, 3, 4] which is like assigning each number (or object) in the sequence to i, one at a time, and then executing the block of statements for each value of i. In this case, we just print the value in the block of statements.

Remember that the else part is optional. When included, it is always executed once after the for loop is over unless a break statement is encountered.

Remember that the for..in loop works for any sequence. Here, we have a list of numbers generated by the built-in range function, but in general we can use any kind of sequence of any kind of objects! We will explore this idea in detail in later chapters.

Note for C/C++/Java/C# Programmers

The Python for loop is radically different from the C/C++ for loop. C# programmers

will note that the for loop in Python is similar to the foreach loop in C#. Java

programmers will note that the same is similar to for (int i : IntArray) in Java

1.5 .

In C/C++, if you want to write for (int i = 0; i < 5; i++), then in Python you

write just for i in range(0,5). As you can see, the for loop is simpler, more

expressive and less error prone in Python.

The break Statement

The break statement is used to break out of a loop statement i.e. stop the execution of a looping statement, even if the loop condition has not become False or the sequence of

items has been completely iterated over.

An important note is that if you break out of a for or while loop, any corresponding loop else block is not executed.

Example:

#!/usr/bin/python

# Filename: break.py

while True:

s = (input('Enter something : '))

if s == 'quit':

break

print('Length of the string is', len(s))

print('Done')

Output:

$ python break.py

Enter something : Programming is fun

Length of the string is 18

Enter something : When the work is done

Length of the string is 21

Python en:Control Flow

43

Enter something : if you wanna make your work also fun:

Length of the string is 37

Enter something : use Python!

Length of the string is 12

Enter something : quit

Done

How It Works:

In this program, we repeatedly take the user's input and print the length of each input each time. We are providing a special condition to stop the program by checking if the user input is 'quit'. We stop the program by breaking out of the loop and reach the end of the program.

The length of the input string can be found out using the built-in len function.

Remember that the break statement can be used with the for loop as well.

Swaroop's Poetic Python

The input I have used here is a mini poem I have written called Swaroop's Poetic Python: Programming is fun

When the work is done

if you wanna make your work also fun:

use Python!

The continue Statement

The continue statement is used to tell Python to skip the rest of the statements in the current loop block and to continue to the next iteration of the loop.

Example:

#!/usr/bin/python

# Filename: continue.py

while True:

s = input('Enter something : ')

if s == 'quit':

break

if len(s) < 3:

print('Too small')

continue

print('Input is of sufficient length')

# Do other kinds of processing here...

Output:

$ python test.py

Enter something : a

Too small

Enter something : 12

Too small

Python en:Control Flow

44

Enter something : abc

Input is of sufficient length

Enter something : quit

How It Works:

In this program, we accept input from the user, but we process them only if they are at least 3 characters long. So, we use the built-in len function to get the length and if the length is less than 3, we skip the rest of the statements in the block by using the continue statement. Otherwise, the rest of the statements in the loop are executed and we can do any kind of processing we want to do here.

Note that the continue statement works with the for loop as well.

Summary

We have seen how to use the three control flow statements - if, while and for along with their associated break and continue statements. These are some of the most often used

parts of Python and hence, becoming comfortable with them is essential.

Next, we will see how to create and use functions.

Previous Next

Source: http://www.swaroopch.com/mediawiki/index.php?oldid=1664

Contributors: Swaroop, 8 anonymous edits

Python en:Functions

Introduction

Functions are reusable pieces of programs. They allow you to give a name to a block of statements and you can run that block using that name anywhere in your program and any number of times. This is known as calling the function. We have already used many built-in functions such as the len and range.

The function concept is probably the most important building block of any non-trivial software (in any programming language), so we will explore various aspects of functions in this chapter.

Functions are defined using the def keyword. This is followed by an identifier name for the function followed by a pair of parentheses which may enclose some names of variables and the line ends with a colon. Next follows the block of statements that are part of this function. An example will show that this is actually very simple:

Example:

#!/usr/bin/python

# Filename: function1.py

def sayHello():

print('Hello World!') # block belonging to the function

# End of function

Python en:Functions

45

sayHello() # call the function

sayHello() # call the function again

Output:

$ python function1.py

Hello World!

Hello World!

How It Works:

We define a function called sayHello using the syntax as explained above. This function takes no parameters and hence there are no variables declared in the parentheses.

Parameters to functions are just input to the function so that we can pass in different values to it and get back corresponding results.

Notice that we can call the same function twice which means we do not have to write the same code again.

Function Parameters

A function can take parameters, which are values you supply to the function so that the function can do something utilising those values. These parameters are just like variables except that the values of these variables are defined when we call the function and are already assigned values when the function runs.

Parameters are specified within the pair of parentheses in the function definition, separated by commas. When we call the function, we supply the values in the same way. Note the

terminology used - the names given in the function definition are called parameters whereas the values you supply in the function call are called arguments.

Example:

#!/usr/bin/python

# Filename: func_param.py

def printMax(a, b):

if a > b:

print(a, 'is maximum')

elif a == b:

print(a, 'is equal to', b)

else:

print(b, 'is maximum')

printMax(3, 4) # directly give literal values

x = 5

y = 7

printMax(x, y) # give variables as arguments

Output:

Python en:Functions

46

$ python func_param.py

4 is maximum

7 is maximum

How It Works:

Here, we define a function called printMax where we take two parameters called a and b.

We find out the greater number using a simple if..else statement and then print the

bigger number.

In the first usage of printMax, we directly supply the numbers i.e. arguments. In the second usage, we call the function using variables. printMax(x, y) causes value of argument x to be assigned to parameter a and the value of argument y assigned to parameter b. The

printMax function works the same in both the cases.

Local Variables

When you declare variables inside a function definition, they are not related in any way to other variables with the same names used outside the function i.e. variable names are local to the function. This is called the scope of the variable. All variables have the scope of the block they are declared in starting from the point of definition of the name.

Example:

#!/usr/bin/python

# Filename: func_local.py

x = 50

def func(x):

print('x is', x)

x = 2

print('Changed local x to', x)

func(x)

print('x is still', x)

Output:

$ python func_local.py

x is 50

Changed local x to 2

x is still 50

How It Works:

In the function, the first time that we use the value of the name x, Python uses the value of the parameter declared in the function.

Next, we assign the value 2 to x. The name x is local to our function. So, when we change the value of x in the function, the x defined in the main block remains unaffected.

In the last print function call, we display the value of x in the main block and confirm that it is actually unaffected.

Python en:Functions

47

Using The global Statement

If you want to assign a value to a name defined at the top level of the program (i.e. not inside any kind of scope such as functions or classes), then you have to tell Python that the name is not local, but it is global. We do this using the global statement. It is impossible to assign a value to a variable defined outside a function without the global statement.

You can use the values of such variables defined outside the function (assuming there is no variable with the same name within the function). However, this is not encouraged and

should be avoided since it becomes unclear to the reader of the program as to where that variable's definition is. Using the global statement makes it amply clear that the variable is defined in an outermost block.

Example:

#!/usr/bin/python

# Filename: func_global.py

x = 50

def func():

global x

print('x is', x)

x = 2

print('Changed global x to', x)

func()

print('Value of x is', x)

Output:

$ python func_global.py

x is 50

Changed global x to 2

Value of x is 2

How It Works:

The global statement is used to declare that x is a global variable - hence, when we assign a value to x inside the function, that change is reflected when we use the value of x in the main block.

You can specify more than one global variable using the same global statement. For

example, global x, y, z.

Python en:Functions

48

Using nonlocal statement

We have seen how to access variables in the local and global scope above. There is another kind of scope called "nonlocal" scope which is in-between these two types of scopes.

Nonlocal scopes are observed when you define functions inside functions.

Since everything in Python is just executable code, you can define functions anywhere.

Let's take an example:

#!/usr/bin/python

# Filename: func_nonlocal.py

def func_outer():

x = 2

print('x is', x)

def func_inner():

nonlocal x

x = 5

func_inner()

print('Changed local x to', x)

func_outer()

Output:

$ python func_nonlocal.py

x is 2

Changed local x to 5

How It Works:

When we are inside func_inner, the 'x' defined in the first line of func_outer is relatively neither in local scope nor in global scope. We declare that we are using this x by nonlocal x and hence we get access to that variable.

Try changing the nonlocal x to global x and also by removing the statement itself and

observe the difference in behavior in these two cases.

Default Argument Values

For some functions, you may want to make some of its parameters as optional and use default values if the user does not want to provide values for such parameters. This is done with the help of default argument values. You can specify default argument values for

parameters by following the parameter name in the function definition with the assignment operator (=) followed by the default value.

Note that the default argument value should be a constant. More precisely, the default argument value should be immutable - this is explained in detail in later chapters. For now, just remember this.

Example:

Python en:Functions

49

#!/usr/bin/python

# Filename: func_default.py

def say(message, times = 1):

print(message * times)

say('Hello')

say('World', 5)

Output:

$ python func_default.py

Hello

WorldWorldWorldWorldWorld

How It Works:

The function named say is used to print a string as many times as specified. If we don't supply a value, then by default, the string is printed just once. We achieve this by specifying a default argument value of 1 to the parameter times.

In the first usage of say, we supply only the string and it prints the string once. In the second usage of say, we supply both the string and an argument 5 stating that we want to say the string message 5 times.

Important

Only those parameters which are at the end of the parameter list can be given default

argument values i.e. you cannot have a parameter with a default argument value

before a parameter without a default argument value in the order of parameters

declared in the function parameter list.

This is because the values are assigned to the parameters by position. For example,

def func(a, b=5) is valid, but def func(a=5, b) is not valid.

Keyword Arguments

If you have some functions with many parameters and you want to specify only some of

them, then you can give values for such parameters by naming them - this is called keyword arguments - we use the name (keyword) instead of the position (which we have been using all along) to specify the arguments to the function.

There are two advantages - one, using the function is easier since we do not need to worry about the order of the arguments. Two, we can give values to only those parameters which we want, provided that the other parameters have default argument values.

Example:

#!/usr/bin/python

# Filename: func_key.py

def func(a, b=5, c=10):

print('a is', a, 'and b is', b, 'and c is', c)

func(3, 7)

Python en:Functions

50

func(25, c=24)

func(c=50, a=100)

Output:

$ python func_key.py

a is 3 and b is 7 and c is 10

a is 25 and b is 5 and c is 24

a is 100 and b is 5 and c is 50

How It Works:

The function named func has one parameter without default argument values, followed by two parameters with default argument values.

In the first usage, func(3, 7), the parameter a gets the value 3, the parameter b gets the value 7 and c gets the default value of 10.

In the second usage func(25, c=24), the variable a gets the value of 25 due to the position of the argument. Then, the parameter c gets the value of 24 due to naming i.e. keyword arguments. The variable b gets the default value of 5.

In the third usage func(c=50, a=100), we use keyword arguments completely to specify

the values. Notice, that we are specifying value for parameter c before that for a even though a is defined before c in the function definition.

VarArgs parameters

TODO

Should I write about this in a later chapter since we haven't talked about lists and

dictionaries yet?

Sometimes you might want to define a function that can take any number of parameters, this can be achieved by using the stars:

#!/usr/bin/python

# Filename: total.py

def total(initial=5, *numbers, **keywords):

count = initial

for number in numbers:

count += number

for key in keywords:

count += keywords[key]

return count

print(total(10, 1, 2, 3, vegetables=50, fruits=100))

Output:

$ python total.py

166

How It Works:

Python en:Functions

51

When we declare a starred parameter such as *param, then all the positional arguments

from that point till the end are collected as a list called 'param'.

Similarly, when we declare a double-starred parameter such as **param, then all the

keyword arguments from that point till the end are collected as a dictionary called 'param'.

We will explore lists and dictionaries in a later chapter.

Keyword-only Parameters

If we want to specify certain keyword parameters to be available as keyword-only and not as positional arguments, they can be declared after a starred parameter:

#!/usr/bin/python

# Filename: keyword_only.py

def total(initial=5, *numbers, vegetables):

count = initial

for number in numbers:

count += number

count += vegetables

return count

print(total(10, 1, 2, 3, vegetables=50))

print(total(10, 1, 2, 3))

# Raises error because we have not supplied a default argument value

for 'vegetables'

Output:

$ python keyword_only.py

66

Traceback (most recent call last):

File "test.py", line 12, in <module>

print(total(10, 1, 2, 3))

TypeError: total() needs keyword-only argument vegetables

How It Works:

Declaring parameters after a starred parameter results in keyword-only arguments. If these arguments are not supplied a default value, then calls to the function will raise an error if the keyword argument is not supplied, as seen above.

If you want to have keyword-only arguments but have no need for a starred parameter, then simply use an empty star without using any name such as def total(initial=5, *,

vegetables).

Python en:Functions

52

The return Statement

The return statement is used to return from a function i.e. break out of the function. We can optionally return a value from the function as well.

Example:

#!/usr/bin/python

# Filename: func_return.py

def maximum(x, y):

if x > y:

return x

else:

return y

print(maximum(2, 3))

Output:

$ python func_return.py

3

How It Works:

The maximum function returns the maximum of the parameters, in this case the numbers

supplied to the function. It uses a simple if..else statement to find the greater value and then returns that value.

Note that a return statement without a value is equivalent to return None. None is a

special type in Python that represents nothingness. For example, it is used to indicate that a variable has no value if it has a value of None.

Every function implicitly contains a return None statement at the end unless you have

written your own return statement. You can see this by running print(someFunction())

where the function someFunction does not use the return statement such as:

def someFunction():

pass

The pass statement is used in Python to indicate an empty block of statements.

Note

There is a built-in function called max that already implements the 'find maximum'

functionality, so use this built-in function whenever possible.

Python en:Functions

53

DocStrings

Python has a nifty feature called documentation strings, usually referred to by its shorter name docstrings. DocStrings are an important tool that you should make use of since it helps to document the program better and makes it easier to understand. Amazingly, we

can even get the docstring back from, say a function, when the program is actually running!

Example:

#!/usr/bin/python

# Filename: func_doc.py

def printMax(x, y):

'''Prints the maximum of two numbers.

The two values must be integers.'''

x = int(x) # convert to integers, if possible

y = int(y)

if x > y:

print(x, 'is maximum')

else:

print(y, 'is maximum')

printMax(3, 5)

print(printMax.__doc__)

Output:

$ python func_doc.py

5 is maximum

Prints the maximum of two numbers.

The two values must be integers.

How It Works:

A string on the first logical line of a function is the docstring for that function. Note that DocStrings also apply to modules and classes which we will learn about in the respective chapters.

The convention followed for a docstring is a multi-line string where the first line starts with a capital letter and ends with a dot. Then the second line is blank followed by any detailed explanation starting from the third line. You are strongly advised to follow this convention for all your docstrings for all your non-trivial functions.

We can access the docstring of the printMax function using the __doc__ (notice the

double underscores) attribute (name belonging to) of the function. Just remember that Python treats everything as an object and this includes functions. We'll learn more about objects in the chapter on classes.

If you have used help() in Python, then you have already seen the usage of docstrings!

What it does is just fetch the __doc__ attribute of that function and displays it in a neat manner for you. You can try it out on the function above - just include help(printMax) in Python en:Functions

54

your program. Remember to press the q key to exit help.

Automated tools can retrieve the documentation from your program in this manner.

Therefore, I strongly recommend that you use docstrings for any non-trivial function that you write. The pydoc command that comes with your Python distribution works similarly to help() using docstrings.

Annotations

Functions have another advanced feature called annotations which are a nifty way of

attaching additional information for each of the parameters as well as the return value.

Since the Python language itself does not interpret these annotations in any way (that functionality is left to third-party libraries to interpret in any way they want), we will skip this feature in our discussion. If you are interested to read about annotations, please see the Python Enhancement Proposal No. 3107 (http:/ / www. python. org/ dev/ peps/

pep-3107/).

Summary

We have seen so many aspects of functions but note that we still haven't covered all aspects of it. However, we have already covered most of what you'll use regarding Python functions on an everyday basis.

Next, we will see how to use as well as create Python modules.

Previous Next

Source: http://www.swaroopch.com/mediawiki/index.php?oldid=2379

Contributors: Swaroop, Vages, 7 anonymous edits

Python en:Modules

55

Python en:Modules

Introduction

You have seen how you can reuse code in your program by defining functions once. What if you wanted to reuse a number of functions in other programs that you write? As you might have guessed, the answer is modules.

There are various methods of writing modules, but the simplest way is to create a file with a

.py extension that contains functions and variables.

Another method is to write the modules in the native language in which the Python

interpreter itself was written. For example, you can write modules in the C programming language (http://docs.python.org/extending/) and when compiled, they can be used from

your Python code when using the standard Python interpreter.

A module can be imported by another program to make use of its functionality. This is how we can use the Python standard library as well. First, we will see how to use the standard library modules.

Example:

#!/usr/bin/python

# Filename: using_sys.py

import sys

print('The command line arguments are:')

for i in sys.argv:

print(i)

print(' \n\nThe PYTHONPATH is', sys.path, ' \n')

Output:

$ python using_sys.py we are arguments

The command line arguments are:

using_sys.py

we

are

arguments

The PYTHONPATH is ['', 'C:\\Windows\\system32\\python30.zip',

'C:\\Python30\\DLLs', 'C:\\Python30\\lib',

'C:\\Python30\\lib\\plat-win', 'C:\\Python30',

'C:\\Python30\\lib\\site-packages']

How It Works:

First, we import the sys module using the import statement. Basically, this translates to us telling Python that we want to use this module. The sys module contains functionality related to the Python interpreter and its environment i.e. the sys tem.

Python en:Modules

56

When Python executes the import sys statement, it looks for the sys module. In this case, it is one of the built-in modules, and hence Python knows where to find it.

If it was not a compiled module i.e. a module written in Python, then the Python interpreter will search for it in the directories listed in its sys.path variable. If the module is found, then the statements in the body of that module is run and then the module is made

available for you to use. Note that the initialization is done only the first time that we import a module.

The argv variable in the sys module is accessed using the dotted notation i.e. sys.argv. It clearly indicates that this name is part of the sys module. Another advantage of this

approach is that the name does not clash with any argv variable used in your program.

The sys.argv variable is a list of strings (lists are explained in detail in a later chapter.

Specifically, the sys.argv contains the list of command line arguments i.e. the arguments passed to your program using the command line.

If you are using an IDE to write and run these programs, look for a way to specify command line arguments to the program in the menus.

Here, when we execute python using_sys.py we are arguments, we run the module

using_sys.py with the python command and the other things that follow are arguments

passed to the program. Python stores the command line arguments in the sys.argv

variable for us to use.

Remember, the name of the script running is always the first argument in the sys.argv

list. So, in this case we will have 'using_sys.py' as sys.argv[0], 'we' as sys.argv[1],

'are' as sys.argv[2] and 'arguments' as sys.argv[3]. Notice that Python starts

counting from 0 and not 1.

The sys.path contains the list of directory names where modules are imported from.

Observe that the first string in sys.path is empty - this empty string indicates that the current directory is also part of the sys.path which is same as the PYTHONPATH

environment variable. This means that you can directly import modules located in the

current directory. Otherwise, you will have to place your module in one of the directories listed in sys.path.

Note that the current directory is the directory from which the program is launched. Run import os; print(os.getcwd()) to find out the current directory of your program.

Byte-compiled .pyc files

Importing a module is a relatively costly affair, so Python does some tricks to make it faster.

One way is to create byte-compiled files with the extension .pyc which is an intermediate form that Python transforms the program into (remember the introduction section on how Python works?). This .pyc file is useful when you import the module the next time from a different program - it will be much faster since a portion of the processing required in importing a module is already done. Also, these byte-compiled files are

platform-independent.

Note

These .pyc files are usually created in the same directory as the corresponding .py

files. If Python does not have permission to write to files in that directory, then the

.pyc files will not be created.

Python en:Modules

57

The from ...import ...statement

If you want to directly import the argv variable into your program (to avoid typing the sys. everytime for it), then you can use the from sys import argv statement. If you want to import all the names used in the sys module, then you can use the from sys import *

statement. This works for any module.

In general, you should avoid using this statement and use the import statement instead since your program will avoid name clashes and will be more readable.

A module's __name__

Every module has a name and statements in a module can find out the name of its module.

This is handy in the particular situation of figuring out if the module is being run standalone or being imported. As mentioned previously, when a module is imported for the first time, the code in that module is executed. We can use this concept to alter the behavior of the module if the program was used by itself and not when it was imported from another

module. This can be achieved using the __name__ attribute of the module.

Example:

#!/usr/bin/python

# Filename: using_name.py

if __name__ == '__main__':

print('This program is being run by itself')

else:

print('I am being imported from another module')

Output:

$ python using_name.py

This program is being run by itself

$ python

>>> import using_name

I am being imported from another module

>>>

How It Works:

Every Python module has it's __name__ defined and if this is '__main__', it implies that the module is being run standalone by the user and we can take appropriate actions.

Python en:Modules

58

Making Your Own Modules

Creating your own modules is easy, you've been doing it all along! This is because every Python program is also a module. You just have to make sure it has a .py extension. The following example should make it clear.

Example:

#!/usr/bin/python

# Filename: mymodule.py

def sayhi():

print('Hi, this is mymodule speaking.')

__version__ = '0.1'

# End of mymodule.py

The above was a sample module. As you can see, there is nothing particularly special about compared to our usual Python program. We will next see how to use this module in our

other Python programs.

Remember that the module should be placed in the same directory as the program that we import it in, or the module should be in one of the directories listed in sys.path.

#!/usr/bin/python

# Filename: mymodule_demo.py

import mymodule

mymodule.sayhi()

print ('Version', mymodule.__version__)

Output:

$ python mymodule_demo.py

Hi, this is mymodule speaking.

Version 0.1

How It Works:

Notice that we use the same dotted notation to access members of the module. Python

makes good reuse of the same notation to give the distinctive 'Pythonic' feel to it so that we don't have to keep learning new ways to do things.

Here is a version utilising the from..import syntax:

#!/usr/bin/python

# Filename: mymodule_demo2.py

from mymodule import sayhi, __version__

sayhi()

print('Version', __version__)

Python en:Modules

59

The output of mymodule_demo2.py is same as the output of mymodule_demo.py.

Notice that if there was already a __version__ name declared in the module that imports mymodule, there would be a clash. This is also likely because it is common practice for each module to declare it's version number using this name. Hence, it is always recommended to prefer the import statement even though it might make your program a little longer.

You could also use:

from mymodule import *

This will import all public names such as sayhi but would not import __version__

because it starts with double underscores.

Zen of Python

One of Python's guiding principles is that "Explicit is better than Implicit". Run import this to learn more and see this discussion (http:/ / stackoverflow. com/ questions/

228181/zen-of-python) which lists examples for each of the principles.

The dir function

You can use the built-in dir function to list the identifiers that an object defines. For example, for a module, the identifiers include the functions, classes and variables defined in that module.

When you supply a module name to the dir() function, it returns the list of the names

defined in that module. When no argument is applied to it, it returns the list of names defined in the current module.

Example:

$ python

>>> import sys # get list of attributes, in this case, for the sys module

>>> dir(sys)

['__displayhook__', '__doc__', '__excepthook__', '__name__',

'__package__', '__s

tderr__', '__stdin__', '__stdout__', '_clear_type_cache',

'_compact_freelists',

'_current_frames', '_getframe', 'api_version', 'argv',

'builtin_module_names', '

byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook',

'dllhandle'

, 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix',

'executable',

'exit', 'flags', 'float_info', 'getcheckinterval',

'getdefaultencoding', 'getfil

esystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount',

'getsizeof',

'gettrace', 'getwindowsversion', 'hexversion', 'intern', 'maxsize',

'maxunicode

', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache',

Python en:Modules

60

'platfor

m', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setprofile',

'setrecursionlimit

', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version',

'version_in

fo', 'warnoptions', 'winver']

>>> dir() # get list of attributes for current module

['__builtins__', '__doc__', '__name__', '__package__', 'sys']

>>> a = 5 # create a new variable 'a'

>>> dir()

['__builtins__', '__doc__', '__name__', '__package__', 'a', 'sys']

>>> del a # delete/remove a name

>>> dir()

['__builtins__', '__doc__', '__name__', '__package__', 'sys']

>>>

How It Works:

First, we see the usage of dir on the imported sys module. We can see the huge list of attributes that it contains.

Next, we use the dir function without passing parameters to it. By default, it returns the list of attributes for the current module. Notice that the list of imported modules is also part of this list.

In order to observe the dir in action, we define a new variable a and assign it a value and then check dir and we observe that there is an additional value in the list of the same name. We remove the variable/attribute of the current module using the del statement and the change is reflected again in the output of the dir function.

A note on del - this statement is used to delete a variable/name and after the statement has run, in this case del a, you can no longer access the variable a - it is as if it never existed before at all.

Note that the dir() function works on any object. For example, run dir(print) to learn about the attributes of the print function, or dir(str) for the attributes of the str class.

Python en:Modules

61

Packages

By now, you must have started observing the hierarchy of organizing your programs.

Variables usually go inside functions. Functions and global variables usually go inside modules. What if you wanted to organize modules? That's where packages come into the

picture.

Packages are just folders of modules with a special __init__.py file that indicates to Python that this folder is special because it contains Python modules.

Let's say you want to create a package called 'world' with subpackages 'asia', 'africa', etc.

and these subpackages in turn contain modules like 'india', 'madagascar', etc.

This is how you would structure the folders:

- <some folder present in the sys.path>/

- world/

- __init__.py

- asia/

- __init__.py

- india/

- __init__.py

- foo.py

- africa/

- __init__.py

- madagascar/

- __init__.py

- bar.py

Packages are just a convenience to hierarchically organize modules. You will see many

instances of this in the standard library.

Summary

Just like functions are reusable parts of programs, modules are reusable programs.

Packages are another hierarchy to organize modules. The standard library that comes with Python is an example of such a set of packages and modules.

We have seen how to use these modules and create our own modules.

Next, we will learn about some interesting concepts called data structures.

Previous Next

Source: http://www.swaroopch.com/mediawiki/index.php?oldid=2371

Contributors: Swaroop, 7 anonymous edits

Python en:Data Structures

62

Python en:Data Structures

Introduction

Data structures are basically just that - they are structures which can hold some data together. In other words, they are used to store a collection of related data.

There are four built-in data structures in Python - list, tuple, dictionary and set. We will see how to use each of them and how they make life easier for us.

List

A list is a data structure that holds an ordered collection of items i.e. you can store a sequence of items in a list. This is easy to imagine if you can think of a shopping list where you have a list of items to buy, except that you probably have each item on a separate line in your shopping list whereas in Python you put commas in between them.

The list of items should be enclosed in square brackets so that Python understands that you are specifying a list. Once you have created a list, you can add, remove or search for items in the list. Since we can add and remove items, we say that a list is a mutable data type i.e.

this type can be altered.

Quick Introduction To Objects And Classes

Although I've been generally delaying the discussion of objects and classes till now, a little explanation is needed right now so that you can understand lists better. We will explore this topic in detail later in its own chapter.

A list is an example of usage of objects and classes. When we use a variable i and assign a value to it, say integer 5 to it, you can think of it as creating an object (i.e. instance) i of class (i.e. type) int. In fact, you can read help(int) to understand this better.

A class can also have methods i.e. functions defined for use with respect to that class only.

You can use these pieces of functionality only when you have an object of that class. For example, Python provides an append method for the list class which allows you to add an item to the end of the list. For example, mylist.append('an item') will add that string to the list mylist. Note the use of dotted notation for accessing methods of the objects.

A class can also have fields which are nothing but variables defined for use with respect to that class only. You can use these variables/names only when you have an object of that class. Fields are also accessed by the dotted notation, for example, mylist.field.

Example:

#!/usr/bin/python

# Filename: using_list.py

# This is my shopping list

shoplist = ['apple', 'mango', 'carrot', 'banana']

print('I have', len(shoplist), 'items to purchase.')

print('These items are:', end=' ')

Python en:Data Structures

63

for item in shoplist:

print(item, end=' ')

print(' \nI also have to buy rice.')

shoplist.append('rice')

print('My shopping list is now', shoplist)

print('I will sort my list now')

shoplist.sort()

print('Sorted shopping list is', shoplist)

print('The first item I will buy is', shoplist[0])

olditem = shoplist[0]

del shoplist[0]

print('I bought the', olditem)

print('My shopping list is now', shoplist)

Output:

$ python using_list.py

I have 4 items to purchase.

These items are: apple mango carrot banana

I also have to buy rice.

My shopping list is now ['apple', 'mango', 'carrot', 'banana',

'rice']

I will sort my list now

Sorted shopping list is ['apple', 'banana', 'carrot', 'mango',

'rice']

The first item I will buy is apple

I bought the apple

My shopping list is now ['banana', 'carrot', 'mango', 'rice']

How It Works:

The variable shoplist is a shopping list for someone who is going to the market. In

shoplist, we only store strings of the names of the items to buy but you can add any kind of object to a list including numbers and even other lists.

We have also used the for..in loop to iterate through the items of the list. By now, you must have realised that a list is also a sequence. The speciality of sequences will be discussed in a later section.

Notice the use of the end keyword argument to the print function to indicate that we

want to end the output with a space instead of the usual line break.

Next, we add an item to the list using the append method of the list object, as already discussed before. Then, we check that the item has been indeed added to the list by

printing the contents of the list by simply passing the list to the print statement which prints it neatly.

Then, we sort the list by using the sort method of the list. It is important to understand that this method affects the list itself and does not return a modified list - this is different from the way strings work. This is what we mean by saying that lists are mutable and that Python en:Data Structures