Download A look at Python

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Python
Ben Hester
CSC 415
November 2012
A look at Python
What is Python?
Python is an interpreted object-oriented programming language. It incorporates such
features as dynamic typing and high level dynamic data types and classes. The language is
known for having a simple and easy to learn syntax but is also very powerful. Python has
extensive libraries on its own but can be extended even further using C or C++. Since
Python is able to be extended with C or C++ a developer could use C++ in their Python program
to speed up certain sections of code or have some portion of an algorithm closed off. Python is
also very portable and has been adapted to run on number of devices. Each of the major
operating systems (Windows, Mac OS, and Linux) is capable of running it as well as many
mobile devices such as Palm OS, iPhone, Android and much more.
Because of its versatility Python has become the preferred language for many developers
including famed programmer Eric S. Raymond who coined the phrase “open source”. It is seen
as a teaching language as well as a highly functional one. Although Python has picked up a
sizable following, it is still not as common as the big three languages C++, Java and C#. Still
Python is growing in popularity with major businesses such as Google and could rise up to
become one of the major languages used in the future.
History of Python
Python was created in 1989 by Guido Van Rossum and gets its name from the BBC show
Monty Python and the flying circus. Van Rossum started the language as a side project while
working at the National Research Institute for Mathematics and Computer Science in the
Netherlands. He was looking to build a successor to the ABC programming language. The idea
behind Python was to create a scripting language with all of ABC’s best features but
without any of its problems. In 1991 Python was published by the National Institute of
Mathematics and Computer Science as open source. In 2001 the Python Software Foundation
(PSF) was formed, which is a non-profit organization created specifically to own Python-related
intellectual property. Van Rossum is still the principle author of Python although other
programmers have contributed to the language. All of Pythons official updates are controlled by
PSF, but Python remains open source.
Python is still being improved by the programming community and by PSF. In 2000
Python 2.0 was released which added a new fundamental data type called UNICODE strings,
which was the largest feature added in this build. In 3.0, this changed when the data types were
split between text and binary data. Build 3.0 was also the first backwards compatible Python
build. As of this writing the newest version of Python is 3.3 which reworked the I/O exception
hierarchy.
As stated before, while Python is not the most widely used language, it is being
implemented by major companies such as Google for its infrastructure. Game developers such as
Fixaxis Games used Python in creating their popular game Civilization 4. The highly successful
data cloud service Dropbox was created in Python. There is an increasing amount of big name
companies and successful up and coming companies that are using Python for their products.
While Python has gained use in the private sector, it still is being used as a highly successful
education tool. In 1999 Van Russom summated a proposal called Computer Programming for
everyone or CP4E which was accepted and received a grant from DARPA. The proposal detailed
the use of Python in high schools and colleges to teach basic programming. While the official
program is still in limbo, colleges across the country have started to use Python as a teaching
language on their own due to Python’s simple syntax. Python users have helped the education
initiative by creating their own high quality educational material for Python. A free online ebook
called “a byte of Python” by Swaroop CH has been used as educational material by NASA and
by Harvard University. Python has no shortage of free quality educational material.
Details of Python
Names, Bindings, and Scopes
In Python names are case sensitive. Meaning the variable name “Count” is not the same
as “count”, they are considered to be two different variable names. Variable names in Python
don’t have a variable length limit so the variable names are only limited in size by how much
memory the machine that you are developing on has. Names must begin with a letter or an
underscore. After that names can consist of letters, numbers, or UNICODE characters such as
“<”.
In Java or C#, when a variable is declared, a type must be given to that variable. However
Python uses what is called “dynamic type binding”. This means that the type of variable is not
set when the variable is declared. The type is set after a value has been assigned to it. For
example the variable “count” could be a string, float, or an integer when it’s first declared but
would be considered an integer after “count” is assigned the value “4”. Dynamic type binding
does have some disadvantages. It increases the run time of a program since type checking has to
be done at execution. The interpreter must also keep a run-time descriptor for every variable in
memory to keep track of the variables type. The size of the storage for a variable must also be
dynamic since different types of data require different storage sizes. The way Python handles
memory is by putting each of the variables onto a heap which is controlled by Pythons memory
manager. Python’s memory manager controls the allocation and deallocation of variables in
memory.
Even though the variables are set dynamically, Python does make it easier for a developer
to identify the type of a variable before execution thanks to static scoping. Static scoping means
that before the execution of a program, a variable’s scope has already been determined. This
allows the type of a variable to be determined at compile time by a programmer or a compiler.
However, static scoping is handled a little different in Python than in C-based languages. Python
allows for nested subprograms. This allows a programmer to have a function that can only be
accessed by a parent function. A parent function is able to access any of its nested functions and
any of the variables contained within those nested functions. Python also allows global scoping.
This means that a function can access and change a variable that is declared outside of any
functions. However if a function needs to change a global variable then the variable must be
declared global within the function that it is called.
Data Types
As stated earlier, Python uses dynamic typing which means that variables don’t have a
type until a value is assigned to it. Each of the variables are put into a heap and handled by
Pythons memory manager. Some of the ways Python handles those variables is different from
most languages.
Python uses unlimited sized integers. When an exceptional long integer is assigned to a
variable the type becomes a “long integer” which is only limited in size by the address size in the
machine. Python also supports complex data types which are represented as ordered pairs of
floating point numbers. The imaginary part of a complex literal is specified by
following it with a “j” or “J”. Strings in Python are considered a primitive type but made up of
character arrays. The string length is static and is set when the string is created. Due to strings
being made up of character arrays, manipulating strings is easier to do using regular expression
commands, catenation and indexing specific characters. Python uses its built in “re” module for
regular expressions which give it powerful capabilities similar to PERL. Another feature
concerning variables is that there are no pointers in Python. Each of the variables are references
to either objects or values in memory.
In Python arrays are called lists which function as dynamic arrays. As with C-based
languages the elements within the arrays must be the same type, however in Python these
elements can reference objects or different data values. This means that arrays in Python are
heterogeneous and can consist of references to different data types within the same array. Python
supports many different tools for working with and structuring arrays. Arrays can be broken up
into slices which allow a developer to take only the sections out of array they need. An example
of a complex slice would be selecting only every other element in an array. Another tool is
support for associative arrays. This allows a developer to designate a key for each element within
an array. Python also allows for array catenation and decreasing array size during runtime but
both of these actions have to be carried out with methods.
In addition to arrays, Python supports tuples. Tuples are similar to records except the
elements are not named. Tuples in Python are immutable but they can be converted into arrays
and back to tuples again if a change needs to be made. The benefit of tuples is when a
programmer doesn’t want a set of data to be changed by a function. This allows a set of data to
be sent to a function as a parameter without worrying if the function will change the data.
Expressions and Assignment Statements
Python is fairly standard when it comes to expressions and assignment statements.
However there are a few details to note. First of all Python uses the same order of precedence
that most C-based languages use. Python also allows for operator overloading though special
named methods that begin and end with an underscore. Instances of the class containing these
methods would be called to carry out the operation. For logical operations, every one of them in
Python is short-circuited. This means that the results can be obtained from an expression without
evaluating all of the operators. As for assignment statements, since each data type is associated
with an object and not a variable there is no such thing as mixed-mode assignments in Python.
Statement-Level Control Structures
One of Python’s most noticeable features comes from the way it handles control
structures. Instead of parentheses and curly brackets, Python uses indention for its control
statements. This lends to Pythons easy to read syntax because it forces clear code and removes
the need of finding a missing parentheses or curly bracket. Another of Python’s control structure
features is the ability to use nested selectors. This allows a programmer to develop using nested
if statements. Unfortunately, Python doesn’t support multiple-selection statements. This means
tools such as switch statements are not supported in Python. Python further improves readability
by not including support for “goto” statements. While convenient to use these statements make it
much harder for other programmers to debug or rewrite code that features to many goto
statements. It is considered to be a bad practice to use them.
For-loops are handled a little differently in Python. Instead of the typical format found in
most languages (for int i= 0; i<count; i++), Python uses a “for..in” format. This type of for-loop
works similar to a for-each loop found in other languages. To do a simple counting loop the
range() function is needed. The programmer would define a range for the for-loop to count
through as each step is completed. Below is an example of a simple counting loop starting a 0
and going to 4.
For count in range(5):
Print count
This block of code produces [0,1,2,3,4]. A range can also be set to begin and end at certain
integers such as range(2,6) which would start the count at 2 and go to 5 because the range
function never reaches the last integer for a range.
Subprograms
Subprograms in Python are declared with the def header followed by the functions name
and then any parameters for the function. Every function in Python returns a value, even ones
that are not set to return a value. In those cases the value “none” is returned. This is usually
ignored by the interpreter but can be seen through a print statement.
One of the features that sets Python apart from most of the other common languages is
that subprograms are executable. Whenever a def statement is executed, the given name is
assigned to the given function body. Until the def statement is executed, the function cannot be
called. For example, you can have two different versions of the function fun nested in an if –
statement. Each one can be set up with completely different parameters and functionality. Based
upon which clause of the if-statement is executed, determines which version of the fun function
is used and which one can now be called. Python also allows the use of nested subprograms. This
means that a subprogram can have its own subprogram contained within it. The benefit from this
is that it provides a highly structured way of granting access to nonlocal variables in the enclosed
subprograms.
As with almost every other language Python uses positions to correspond between formal
parameters and actual parameters. In addition to position parameters Python allows keyword
parameters. With keyword parameters the order doesn’t matter and each of the parameters
passed are assigned to each of the formal parameters of the function. The benefit of keyword
parameters is when a programmer needs to use a function with a long parameter list. This insures
that a mistake with the position cannot occur since each of the parameters is directly assigned.
Python also allows default values in formal parameters. In the event that a value is not passed
into a parameter that has a default value, the function is executed with that default value.
Python has a fairly unique way of passing parameters. Unlike in most other languages,
Python doesn’t do type checking on the parameters being passed. This is because everything in
Python is an object. While objects have types, variables do not. The method Python uses is called
pass-by-assignment. Since all of the data values in Python are objects, every variable is a
reference to an object. The actual parameter value is assigned to the formal parameter. Pass-byassignment is basically the same as pass-by-reference because all of the actual parameters are
references.
Abstract Data Types and Encapsulation Constructs
Python doesn’t support encapsulation. Although you can declare a semi private function
by using an underscore before the function name. However this isn’t a private function in a
traditional sense and doesn’t stop the function from being accessed directly from a different
class. It only prevents other classes from accessing it indirectly.
Object-Oriented Programming
Python is a primarily an object-oriented language despite the lack of encapsulation.
Everything in Python is considered an object. This includes every class, function, and variable.
One of Python’s key object-orientation features is multiple inheritance. This allows a class to
inherit traits from multiple different classes. Another one of Pythons object-orientated features is
the way Python handles polymorphism. Instead of using traditional polymorphism, Python uses
what is called duck typing. The operator “is” tests an objects identity in order to figure out what
kind of object it is. Pythons method changes based on the type of object being given to it.
Concurrency
Since Python is an interpreted language the only type of concurrency that can be used is
logical concurrency. This means that a python program cannot directly take advantage of a
machine that has multiple processors. However, Python does allow a programmer to create
threads in Python. These threads can carry out tasks independently, adding concurrency to
Python programs.
Exception Handling and Event Handling
Just like what is found in many languages, Python also supports exception handling.
Instead of a Try..Catch block, in Python it is a Try..Except block but it works exactly the same.
In addition to the standard catch block Python provides additional tools for working with
exceptions. The raise statement allows a programmer to create an exception object in their
program that will either re-raise the last exception within the current scope or if no exception is
found in the current scope a runtime error is raised. This function is helpful for troubleshooting
problems within sections of code. Python also allows users to create their own exceptions
through class objects. However it is recommended that these new exceptions be derived from
Pythons built-in exception class.
Python really doesn’t have built in event handling options other than the raw_input
function. However Python does have a great deal of modules available for event handling. One
of these modules is called tKinter. This is a GUI module that also provides event handlers for a
Python programs GUI interface. It also seems to be the most popular.
Other Python Features
Python has two modes, programmer mode and interactive mode. In programmer mode the
finished .py files are run as normal in the Python interpreter. Interactive mode is a command line shell
that gives immediate feedback for each statement as it goes through memory. In this mode any code you
type is immediately run. This mode is useful for troubleshooting issues with a program.
Evaluation of Python
Readability
Readability is probably Pythons strongest feature. Python is well known as an easy to
understand language. This is why many teachers use it as a introduction language. Pythons
greatest strength is in its simplicity. Python forces a programmer to use indentions for their
control structures and the lack of a goto function ensures the code will be easier to read.
Writability
Python excels at writability as well, although this is diminished by the lack of built in
event handlers. Due to the lack of built in event handlers, a programmer will either have to learn
an existing module or create his own. Overall Python is easy to write with its simple syntax.
Python makes it easy for programs to add their own classes or packages to Python. Python can
also use C or C++ packages which makes it easier for programmers to implement code they find
in those languages.
Reliability
While Python has many features making it reliable, I found the language lacking in this
aspect. Python doesn’t do type checking when passing parameters, doesn’t support
encapsulation, and uses aliasing. While the readability/writability helps insure there are fewer
errors in the code, the lack of certain features lowers it reliability.
Cost
One of Pythons key features is portability which makes it very cost effective. Python is
open source and easy to learn. C or C++ programmers will already be able to make packages for
Python. However the cost is increased with the lack of encapsulation or native event handlers
increases cost. Python is a scripting language, which means the memory manager must always
keep track of the type for each of the variables which slows the code down and makes it not as
fast as C code. This is why many programmers use C packages for certain sections of their
program to speed up performance. Overall Python is very flexible and easy to work with but
without using C code packages, wouldn’t be the best language to use for real-time results or
heavy processing.
Works Cited
Beazley, David. "An Introduction to Python Concurrency." An Introduction to Python Concurrency.
USENIX Technical Conference, June 2009. Web. 20 Nov. 2012.
<http://www.slideshare.net/dabeaz/an-introduction-to-python-concurrency>.
"Learnpython.org." Learn Python. Learnpython.org, n.d. Web. 01 Oct. 2012.
<http://www.learnpython.org/>.
Lott, Steven. "Python - Raising Exceptions." Python - Raising Exceptions. Linuxtopia.org, 2002. Web.
20 Nov. 2012.
<http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch
17s03.html>.
"Python V3.3.0 Documentation." Overview. Python Software Foundation, n.d. Web. 01 Oct. 2012.
<http://docs.python.org/py3k/>.
Sebesta, Robert W. Concepts of Programming Languages. Boston: Pearson, 2012. Print.
Shaw, Zed A. "Learn Python The Hard Way, 2nd Edition." Learn Python The Hard Way, 2nd Edition
†” Learn Python The Hard Way, 2nd Edition. N.p., n.d. Web. 01 Oct. 2012.
<http://learnpythonthehardway.org/book/>.
Swaroop, CH. A Byte of Python. Vol. 1.9. N.p.: n.p., 2008. Print.
Vrajitoru, Dana. "C311 Name, Scope, Binding." C311 Name, Scope, Binding. IUSB, n.d. Web. 01 Oct.
2012. <http://www.cs.iusb.edu/~danav/teach/c311/c311_3_scope.html>.