25-Jun-15Advanced Programming Spring 2002 Python Henning Schulzrinne Department of Computer Science Columbia University (based on tutorial by Guido van.

Slides:



Advertisements
Similar presentations
Web编程技术 Web Programming Technology
Advertisements

Optional Static Typing Guido van Rossum (with Paul Prescod, Greg Stein, and the types-SIG)
Container Types in Python
Introduction to Python Week 15. Try It Out! Download Python from Any version will do for this class – By and large they are all mutually.
A Crash Course Python. Python? Isn’t that a snake? Yes, but it is also a...
I210 review Fall 2011, IUB. Python is High-level programming –High-level versus machine language Interpreted Language –Interpreted versus compiled 2.
An Introduction to Python and Its Use in Bioinformatics
What is a scripting language? What is Python?
George Blank University Lecturer. CS 602 Java and the Web Object Oriented Software Development Using Java Chapter 4.
VBA Modules, Functions, Variables, and Constants
ASP.NET Programming with C# and SQL Server First Edition
1 Outline 7.1 Introduction 7.2 Implementing a Time Abstract Data Type with a Class 7.3 Special Attributes 7.4Controlling Access to Attributes 7.4.1Get.
Introduction to Python. What is Python? Interpreted object oriented high level programming language – No compiling or linking neccesary Extensible: add.
The Python Programming Language Matt Campbell | Steve Losh.
1 Python Control of Flow and Defining Classes LING 5200 Computational Corpus Linguistics Martha Palmer.
7-Sep-15 Python structure  modules: Python source files or C extensions  import, top-level via from, reload  statements  control flow  create objects.
CIS 218 Python CIS 218 Oakton Community College. CIS 218 Python features no compiling or linkingrapid development cycle no type declarationssimpler, shorter,
And PyLNP for the RCX By: Eric Cranmer and Nick Blake.
Introduction to Python John Reiser May 5 th, 2010.
Lists in Python.
November 15, 2005ICP: Chapter 7: Files and Exceptions 1 Introduction to Computer Programming Chapter 7: Files and Exceptions Michael Scherger Department.
Introduction to Python Basics of the Language. Install Python Find the most recent distribution for your computer at:
Builtins, namespaces, functions. There are objects that are predefined in Python Python built-ins When you use something without defining it, it means.
Data Structures in Python By: Christopher Todd. Lists in Python A list is a group of comma-separated values between square brackets. A list is a group.
Python: Classes By Matt Wufsus. Scopes and Namespaces A namespace is a mapping from names to objects. ◦Examples: the set of built-in names, such as the.
Input, Output, and Processing
Python Lists and Such CS 4320, SPRING List Functions len(s) is the length of list s s + t is the concatenation of lists s and t s.append(x) adds.
>>> # Fibonacci series:... # the sum of two elements defines the next... a, b = 0, 1 >>> while b < 10:... print b... a, b = b, a+b WHILE.
An Introduction to Python Blake Brogdon. What is Python?  Python is an interpreted, interactive, object-oriented programming language. (from python.org)
Interpretation Environments and Evaluation. CS 354 Spring Translation Stages Lexical analysis (scanning) Parsing –Recognizing –Building parse tree.
Copyright © 2010 Certification Partners, LLC -- All Rights Reserved Perl Specialist.
Built-in Data Structures in Python An Introduction.
Getting Started with Python: Constructs and Pitfalls Sean Deitz Advanced Programming Seminar September 13, 2013.
Introducing Python CS 4320, SPRING Resources We will be following the Python tutorialPython tutorial These notes will cover the following sections.
C463 / B551 Artificial Intelligence Dana Vrajitoru Python.
Python Functions.
Cem Sahin CS  There are two distinguishable kinds of errors: Python's Errors Syntax ErrorsExceptions.
An Introduction. What is Python? Interpreted language Created by Guido Van Rossum – early 90s Named after Monty Python
Python I Some material adapted from Upenn cmpe391 slides and other sources.
Prof. Hilfinger CS164 Lecture 51 The Pyth Language Lecture 5.
Python Primer 1: Types and Operators © 2013 Goodrich, Tamassia, Goldwasser1Python Primer.
CS105 Computer Programming PYTHON (based on CS 11 Python track: lecture 1, CALTECH)
Copyright © 2003 ProsoftTraining. All rights reserved. Perl Fundamentals.
RUBY by Ryan Chase.
Jim Havrilla. Invoking Python Just type “python –m script.py [arg]” or “python –c command [arg]” To exit, quit() or Control-D is used To just use the.
PHP vs. Python. Similarities are interpreted, high level languages with dynamic typing are Open Source are supported by large developer communities are.
CSE 130 : Winter 2009 Programming Languages Lecture 11: What’s in a Name ?
Ada, Scheme, R Emory Wingard. Ada History Department of Defense in search of high level language around Requirements drafted for the language.
LECTURE 2 Python Basics. MODULES So, we just put together our first real Python program. Let’s say we store this program in a file called fib.py. We have.
Introduction to Python Sajal Desai. What is Python? Versitile, simple, high level language No linking and compilation “By the way, the language is named.
FILES AND EXCEPTIONS Topics Introduction to File Input and Output Using Loops to Process Files Processing Records Exceptions.
Rajkumar Jayachandran.  Classes for python are not much different than those of other languages  Not much new syntax or semantics  Python classes are.
Juancho Datu. What is a Module? File containing Python definitions and statements with the suffix ‘.py’ in the current directory For example file name:
27-Jan-1827-Jan-1827-Jan-1827-Jan-1827-Jan-1827-Jan-1827-Jan-1827-Jan-1827-Jan-18 Introduction.
Fundamentals of Programming I Overview of Programming
Lecture 2 Python Basics.
Introduction Python is an interpreted, object-oriented and high-level programming language, which is different from a compiled one like C/C++/Java. Its.
Python Classes By Craig Pennell.
Topics Introduction to File Input and Output
Introduction To Python
Python’s Errors and Exceptions
Lecture 15 (Notes by P. N. Hilfinger and R. Bodik)
Python Tutorial for C Programmer Boontee Kruatrachue Kritawan Siriboon
Python I Some material adapted from Upenn cmpe391 slides and other sources.
Python Primer 1: Types and Operators
By Ryan Christen Errors and Exceptions.
Lecture 7: Python’s Built-in Types and Basic Statements
Topics Introduction to File Input and Output
Python Basics. Topics Features How does Python work Basic Features I/O in Python Operators Control Statements Function/Scope of variables OOP Concepts.
Learning Python 5th Edition
Presentation transcript:

25-Jun-15Advanced Programming Spring 2002 Python Henning Schulzrinne Department of Computer Science Columbia University (based on tutorial by Guido van Rossum)tutorial

25-Jun-15Advanced Programming Spring 2002 Introduction  Most recent popular (scripting/extension) language  although origin ~1991  heritage: teaching language (ABC)  Tcl: shell  perl: string (regex) processing  object-oriented  rather than add-on (OOTcl)

25-Jun-15Advanced Programming Spring 2002 Python philosophy  Coherence  not hard to read, write and maintain  power  scope  rapid development + large systems  objects  integration  hybrid systems

25-Jun-15Advanced Programming Spring 2002 Python features no compiling or linkingrapid development cycle no type declarationssimpler, shorter, more flexible automatic memory managementgarbage collection high-level data types and operations fast development object-oriented programmingcode structuring and reuse, C++ embedding and extending in Cmixed language systems classes, modules, exceptions"programming-in-the-large" support dynamic loading of C modulessimplified extensions, smaller binaries dynamic reloading of C modulesprograms can be modified without stopping Lutz, Programming Python

25-Jun-15Advanced Programming Spring 2002 Python features universal "first-class" object modelfewer restrictions and rules run-time program constructionhandles unforeseen needs, end- user coding interactive, dynamic natureincremental development and testing access to interpreter informationmetaprogramming, introspective objects wide portabilitycross-platform programming without ports compilation to portable byte-codeexecution speed, protecting source code built-in interfaces to external services system tools, GUIs, persistence, databases, etc. Lutz, Programming Python

25-Jun-15Advanced Programming Spring 2002 Python  elements from C++, Modula-3 (modules), ABC, Icon (slicing)  same family as Perl, Tcl, Scheme, REXX, BASIC dialects

25-Jun-15Advanced Programming Spring 2002 Uses of Python  shell tools  system admin tools, command line programs  extension-language work  rapid prototyping and development  language-based modules  instead of special-purpose parsers  graphical user interfaces  database access  distributed programming  Internet scripting

25-Jun-15Advanced Programming Spring 2002 What not to use Python (and kin) for  most scripting languages share these  not as efficient as C  but sometimes better built-in algorithms (e.g., hashing and sorting)  delayed error notification  lack of profiling tools

25-Jun-15Advanced Programming Spring 2002 Using python  /usr/local/bin/python  #! /usr/bin/env python  interactive use Python 1.6 (#1, Sep , 20:40:45) [GCC (release)] on sunos5 Copyright (c) Corporation for National Research Initiatives. All Rights Reserved. Copyright (c) Stichting Mathematisch Centrum, Amsterdam. All Rights Reserved. >>>  python –c command [arg]...  python –i script  read script first, then interactive

25-Jun-15Advanced Programming Spring 2002 Python structure  modules: Python source files or C extensions  import, top-level via from, reload  statements  control flow  create objects  indentation matters – instead of {}  objects  everything is an object  automatically reclaimed when no longer needed

25-Jun-15Advanced Programming Spring 2002 First example #!/usr/local/bin/python # import systems module import sys marker = '::::::' for name in sys.argv[1:]: input = open(name, 'r') print marker + name print input.read()

25-Jun-15Advanced Programming Spring 2002 Basic operations  Assignment:  size = 40  a = b = c = 3  Numbers  integer, float  complex numbers: 1j+3, abs(z)  Strings  'hello world', 'it\'s hot'  "bye world"  continuation via \ or use """ long text """"

25-Jun-15Advanced Programming Spring 2002 String operations  concatenate with + or neighbors  word = 'Help' + x  word = 'Help' 'a'  subscripting of strings  'Hello'[2]  'l'  slice: 'Hello'[1:2]  'el'  word[-1]  last character  len(word)  5  immutable: cannot assign to subscript

25-Jun-15Advanced Programming Spring 2002 Lists  lists can be heterogeneous  a = ['spam', 'eggs', 100, 1234, 2*2]  Lists can be indexed and sliced:  a[0]  spam  a[:2]  ['spam', 'eggs']  Lists can be manipulated  a[2] = a[2] + 23  a[0:2] = [1,12]  a[0:0] = []  len(a)  5

25-Jun-15Advanced Programming Spring 2002 Basic programming a,b = 0, 1 # non-zero = true while b < 10: # formatted output, without \n print b, # multiple assignment a,b = b, a+b

25-Jun-15Advanced Programming Spring 2002 Control flow: if x = int(raw_input("Please enter #:")) if x < 0: x = 0 print 'Negative changed to zero' elif x == 0: print 'Zero' elif x == 1: print 'Single' else: print 'More'  no case statement

25-Jun-15Advanced Programming Spring 2002 Control flow: for a = ['cat', 'window', 'defenestrate'] for x in a: print x, len(x)  no arithmetic progression, but  range(10)  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  for i in range(len(a)): print i, a[i]  do not modify the sequence being iterated over

25-Jun-15Advanced Programming Spring 2002 Loops: break, continue, else  break and continue like C  else after loop exhaustion 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 prime'

25-Jun-15Advanced Programming Spring 2002 Do nothing  pass does nothing  syntactic filler while 1: pass

25-Jun-15Advanced Programming Spring 2002 Defining functions def fib(n): """Print a Fibonacci series up to n.""" a, b = 0, 1 while b < n: print b, a, b = b, a+b >>> fib(2000)  First line is docstring  first look for variables in local, then global  need global to assign global variables

25-Jun-15Advanced Programming Spring 2002 Functions: default argument values def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while 1: ok = raw_input(prompt) if ok in ('y', 'ye', 'yes'): return 1 if ok in ('n', 'no'): return 0 retries = retries - 1 if retries < 0: raise IOError, 'refusenik error' print complaint >>> ask_ok('Really?')

25-Jun-15Advanced Programming Spring 2002 Keyword arguments  last arguments can be given as keywords def parrot(voltage, state='a stiff', action='voom', type='Norwegian blue'): print "-- This parrot wouldn't", action, print "if you put", voltage, "Volts through it." print "Lovely plumage, the ", type print "-- It's", state, "!" parrot(1000) parrot(action='VOOOM', voltage=100000)

25-Jun-15Advanced Programming Spring 2002 Lambda forms  anonymous functions  may not work in older versions def make_incrementor(n): return lambda x: x + n f = make_incrementor(42) f(0) f(1)

25-Jun-15Advanced Programming Spring 2002 List methods  append(x)  extend(L)  append all items in list (like Tcl lappend)  insert(i,x)  remove(x)  pop([i]), pop()  create stack (FIFO), or queue (LIFO)  pop(0)  index(x)  return the index for value x

25-Jun-15Advanced Programming Spring 2002 List methods  count(x)  how many times x appears in list  sort()  sort items in place  reverse()  reverse list

25-Jun-15Advanced Programming Spring 2002 Functional programming tools  filter(function, sequence) def f(x): return x%2 != 0 and x%3 0 filter(f, range(2,25))  map(function, sequence)  call function for each item  return list of return values  reduce(function, sequence)  return a single value  call binary function on the first two items  then on the result and next item  iterate

25-Jun-15Advanced Programming Spring 2002 List comprehensions (2.0)  Create lists without map(), filter(), lambda  = expression followed by for clause + zero or more for or of clauses >>> vec = [2,4,6] >>> [3*x for x in vec] [6, 12, 18] >>> [{x: x**2} for x in vec} [{2: 4}, {4: 16}, {6: 36}]

25-Jun-15Advanced Programming Spring 2002 List comprehensions  cross products: >>> vec1 = [2,4,6] >>> vec2 = [4,3,-9] >>> [x*y for x in vec1 for y in vec2] [8,6,-18, 16,12,-36, 24,18,-54] >>> [x+y for x in vec1 and y in vec2] [6,5,-7,8,7,-5,10,9,-3] >>> [vec1[i]*vec2[i] for i in range(len(vec1))] [8,12,-54]

25-Jun-15Advanced Programming Spring 2002 List comprehensions  can also use if : >>> [3*x for x in vec if x > 3] [12, 18] >>> [3*x for x in vec if x < 2] []

25-Jun-15Advanced Programming Spring 2002 del – removing list items  remove by index, not value  remove slices from list (rather than by assigning an empty list) >>> a = [-1,1,66.6,333,333,1234.5] >>> del a[0] >>> a [1,66.6,333,333,1234.5] >>> del a[2:4] >>> a [1,66.6,1234.5]

25-Jun-15Advanced Programming Spring 2002 Tuples and sequences  lists, strings, tuples: examples of sequence type  tuple = values separated by commas >>> t = 123, 543, 'bar' >>> t[0] 123 >>> t (123, 543, 'bar')

25-Jun-15Advanced Programming Spring 2002 Tuples  Tuples may be nested >>> u = t, (1,2) >>> u ((123, 542, 'bar'), (1,2))  kind of like structs, but no element names:  (x,y) coordinates  database records  like strings, immutable  can't assign to individual items

25-Jun-15Advanced Programming Spring 2002 Tuples  Empty tuples: () >>> empty = () >>> len(empty) 0  one item  trailing comma >>> singleton = 'foo',

25-Jun-15Advanced Programming Spring 2002 Tuples  sequence unpacking  distribute elements across variables >>> t = 123, 543, 'bar' >>> x, y, z = t >>> x 123  packing always creates tuple  unpacking works for any sequence

25-Jun-15Advanced Programming Spring 2002 Dictionaries  like Tcl or awk associative arrays  indexed by keys  keys are any immutable type: e.g., tuples  but not lists (mutable!)  uses 'key: value' notation >>> tel = {'hgs' : 7042, 'lennox': 7018} >>> tel['cs'] = 7000 >>> tel

25-Jun-15Advanced Programming Spring 2002 Dictionaries  no particular order  delete elements with del >>> del tel['foo']  keys() method  unsorted list of keys >>> tel.keys() ['cs', 'lennox', 'hgs']  use has_key() to check for existence >>> tel.has_key('foo') 0

25-Jun-15Advanced Programming Spring 2002 Conditions  can check for sequence membership with is and is not : >>> if (4 in vec):... print '4 is'  chained comparisons: a less than b AND b equals c: a < b == c  and and or are short-circuit operators:  evaluated from left to right  stop evaluation as soon as outcome clear

25-Jun-15Advanced Programming Spring 2002 Conditions  Can assign comparison to variable: >>> s1,s2,s3='', 'foo', 'bar' >>> non_null = s1 or s2 or s3 >>> non_null foo  Unlike C, no assignment within expression

25-Jun-15Advanced Programming Spring 2002 Comparing sequences  unlike C, can compare sequences (lists, tuples,...)  lexicographical comparison:  compare first; if different  outcome  continue recursively  subsequences are smaller  strings use ASCII comparison  can compare objects of different type, but by type name (list < string < tuple)

25-Jun-15Advanced Programming Spring 2002 Comparing sequences (1,2,3) < (1,2,4) [1,2,3] < [1,2,4] 'ABC' < 'C' < 'Pascal' < 'Python' (1,2,3) == (1.0,2.0,3.0) (1,2) < (1,2,-1)

25-Jun-15Advanced Programming Spring 2002 Modules  collection of functions and variables, typically in scripts  definitions can be imported  file name is module name +.py  e.g., create module fibo.py def fib(n): # write Fib. series up to n... def fib2(n): # return Fib. series up to n

25-Jun-15Advanced Programming Spring 2002 Modules  import module: import fibo  Use modules via "name space": >>> fibo.fib(1000) >>> fibo.__name__ 'fibo'  can give it a local name: >>> fib = fibo.fib >>> fib(500)

25-Jun-15Advanced Programming Spring 2002 Modules  function definition + executable statements  executed only when module is imported  modules have private symbol tables  avoids name clash for global variables  accessible as module.globalname  can import into name space: >>> from fibo import fib, fib2 >>> fib(500)  can import all names defined by module: >>> from fibo import *

25-Jun-15Advanced Programming Spring 2002 Module search path  current directory  list of directories specified in PYTHONPATH environment variable  uses installation-default if not defined, e.g.,.:/usr/local/lib/python  uses sys.path >>> import sys >>> sys.path ['', 'C:\\PROGRA~1\\Python2.2', 'C:\\Program Files\\Python2.2\\DLLs', 'C:\\Program Files\\Python2.2\\lib', 'C:\\Program Files\\Python2.2\\lib\\lib-tk', 'C:\\Program Files\\Python2.2', 'C:\\Program Files\\Python2.2\\lib\\site- packages']

25-Jun-15Advanced Programming Spring 2002 Compiled Python files  include byte-compiled version of module if there exists fibo.pyc in same directory as fibo.py  only if creation time of fibo.pyc matches fibo.py  automatically write compiled file, if possible  platform independent  doesn't run any faster, but loads faster  can have only.pyc file  hide source

25-Jun-15Advanced Programming Spring 2002 Standard modules  system-dependent list  always sys module >>> import sys >>> sys.p1 '>>> ' >>> sys.p2 '... ' >>> sys.path.append('/some/directory')

25-Jun-15Advanced Programming Spring 2002 Module listing  use dir() for each module >>> dir(fibo) ['___name___', 'fib', 'fib2'] >>> dir(sys) ['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__st din__', '__stdout__', '_getframe', 'argv', 'builtin_module_names', 'byteorder', 'copyright', 'displayhook', 'dllhandle', 'exc_info', 'exc_type', 'excepthook', ' exec_prefix', 'executable', 'exit', 'getdefaultencoding', 'getrecursionlimit', ' getrefcount', 'hexversion', 'last_type', 'last_value', 'maxint', 'maxunicode', ' modules', 'path', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setpr ofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'version', 'version_info', 'warnoptions', 'winver']

25-Jun-15Advanced Programming Spring 2002 Classes  mixture of C++ and Modula-3  multiple base classes  derived class can override any methods of its base class(es)  method can call the method of a base class with the same name  objects have private data  C++ terms:  all class members are public  all member functions are virtual  no constructors or destructors (not needed)

25-Jun-15Advanced Programming Spring 2002 Classes  classes (and data types) are objects  built-in types cannot be used as base classes by user  arithmetic operators, subscripting can be redefined for class instances (like C++, unlike Java)

25-Jun-15Advanced Programming Spring 2002 Class definitions Class ClassName:...  must be executed  can be executed conditionally (see Tcl)  creates new namespace

25-Jun-15Advanced Programming Spring 2002 Namespaces  mapping from name to object:  built-in names ( abs() )  global names in module  local names in function invocation  attributes = any following a dot  z.real, z.imag  attributes read-only or writable  module attributes are writeable

25-Jun-15Advanced Programming Spring 2002 Namespaces  scope = textual region of Python program where a namespace is directly accessible (without dot)  innermost scope (first) = local names  middle scope = current module's global names  outermost scope (last) = built-in names  assignments always affect innermost scope  don't copy, just create name bindings to objects  global indicates name is in global scope

25-Jun-15Advanced Programming Spring 2002 Class objects  obj.name references (plus module!): class MyClass: "A simple example class" i = 123 def f(self): return 'hello world' >>> MyClass.i 123  MyClass.f is method object

25-Jun-15Advanced Programming Spring 2002 Class objects  class instantiation: >>> x = MyClass() >>> x.f() 'hello world'  creates new instance of class  note x = MyClass vs. x = MyClass()  ___init__() special method for initialization of object def __init__(self,realpart,imagpart): self.r = realpart self.i = imagpart

25-Jun-15Advanced Programming Spring 2002 Instance objects  attribute references  data attributes (C++/Java data members)  created dynamically x.counter = 1 while x.counter < 10: x.counter = x.counter * 2 print x.counter del x.counter

25-Jun-15Advanced Programming Spring 2002 Method objects  Called immediately: x.f()  can be referenced: xf = x.f while 1: print xf()  object is passed as first argument of function  'self'  x.f() is equivalent to MyClass.f(x)

25-Jun-15Advanced Programming Spring 2002 Notes on classes  Data attributes override method attributes with the same name  no real hiding  not usable to implement pure abstract data types  clients (users) of an object can add data attributes  first argument of method usually called self  ' self ' has no special meaning (cf. Java)

25-Jun-15Advanced Programming Spring 2002 Another example  bag.py class Bag: def __init__(self): self.data = [] def add(self, x): self.data.append(x) def addtwice(self,x): self.add(x)

25-Jun-15Advanced Programming Spring 2002 Another example, cont'd.  invoke: >>> from bag import * >>> l = Bag() >>> l.add('first') >>> l.add('second') >>> l.data ['first', 'second']

25-Jun-15Advanced Programming Spring 2002 Inheritance class DerivedClassName(BaseClassName)...  search class attribute, descending chain of base classes  may override methods in the base class  call directly via BaseClassName.method

25-Jun-15Advanced Programming Spring 2002 Multiple inheritance class DerivedClass(Base1,Base2,Base3):  depth-first, left-to-right  problem: class derived from two classes with a common base class

25-Jun-15Advanced Programming Spring 2002 Private variables  No real support, but textual replacement (name mangling)  __var is replaced by _classname_var  prevents only accidental modification, not true protection

25-Jun-15Advanced Programming Spring 2002 ~ C structs  Empty class definition: class Employee: pass john = Employee() john.name = 'John Doe' john.dept = 'CS' john.salary = 1000

25-Jun-15Advanced Programming Spring 2002 Exceptions  syntax (parsing) errors while 1 print 'Hello World' File " ", line 1 while 1 print 'Hello World' ^ SyntaxError : invalid syntax  exceptions  run-time errors  e.g., ZeroDivisionError, NameError, TypeError

25-Jun-15Advanced Programming Spring 2002 Handling exceptions while 1: try: x = int(raw_input("Please enter a number: ")) break except ValueError: print "Not a valid number"  First, execute try clause  if no exception, skip except clause  if exception, skip rest of try clause and use except clause  if no matching exception, attempt outer try statement

25-Jun-15Advanced Programming Spring 2002 Handling exceptions  try.py import sys for arg in sys.argv[1:]: try: f = open(arg, 'r') except IOError: print 'cannot open', arg else: print arg, 'lines:', len(f.readlines()) f.close  e.g., as python try.py *.py

25-Jun-15Advanced Programming Spring 2002 Language comparison TclPerlPythonJavaScriptVisual Basic Speeddevelopment regexp breadthextensible embeddable easy GUI (Tk) net/web enterprisecross-platform I18N thread-safe database access