Skip to content

Commit ebf871e

Browse files
committed
Adds examples of function calling conventions.
1 parent 8f3675f commit ebf871e

8 files changed

+250
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/usr/bin/env python
2+
"""Examples of Python functions.
3+
4+
Created on Aug 25, 2011
5+
6+
@author: paulross
7+
"""
8+
9+
###################
10+
# Simple functions.
11+
###################
12+
def noArgs():
13+
"""Function that takes no arguments."""
14+
print ' noArgs(): No arguments'
15+
16+
def twoArgs(a, b):
17+
"""Function that takes two arguments."""
18+
print ' twoArgs(): a=%s, b=%s' % (a, b)
19+
20+
def main():
21+
print 'callSimple():'
22+
noArgs()
23+
twoArgs(12, 34)
24+
twoArgs(b='b_given', a='a_given')
25+
26+
if __name__ == '__main__':
27+
main()
28+
########################
29+
# END: Simple functions.
30+
########################
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#!/usr/bin/env python
2+
"""Does...
3+
4+
Created on Aug 25, 2011
5+
6+
@author: paulross
7+
"""
8+
9+
__author__ = 'Paul Ross'
10+
__date__ = '2011-08-03'
11+
__version__ = '0.1.0'
12+
__rights__ = 'Copyright (c) 2011 Paul Ross.'
13+
14+
15+
##################################
16+
# Simple functions, with defaults.
17+
##################################
18+
def twoArgsOneDefault(a, b='default_value'):
19+
print ' a=%s, b=%s' % (a, b)
20+
21+
def main():
22+
print 'callTwoArgsOneDefault():'
23+
twoArgsOneDefault('a_only')
24+
twoArgsOneDefault('a_value', b='b_given')
25+
26+
if __name__ == '__main__':
27+
main()
28+
29+
## Having positional arguments after a default is a syntax error
30+
#def twoArgsOneDefaultWrong(a='something', b):
31+
# print 'a=%s, b=%s' % (a, b)
32+
33+
#######################################
34+
# END: Simple functions, with defaults.
35+
#######################################
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/usr/bin/env python
2+
"""Does...
3+
4+
Created on Aug 25, 2011
5+
6+
@author: paulross
7+
"""
8+
9+
__author__ = 'Paul Ross'
10+
__date__ = '2011-08-03'
11+
__version__ = '0.1.0'
12+
__rights__ = 'Copyright (c) 2011 Paul Ross.'
13+
14+
################################
15+
# Problem with mutable defaults.
16+
################################
17+
def defaultMutableCatch(a=[1,]):
18+
a.append('Ooops')
19+
return a
20+
21+
x = [1,]
22+
23+
def defaultMutableFix(a=x):
24+
if a is None:
25+
a = []
26+
a.append('Ooops')
27+
return a
28+
29+
def main():
30+
# defaultMutableCatch()
31+
print 'defaultMutableCatch():', defaultMutableCatch()
32+
print 'defaultMutableCatch():', defaultMutableCatch([])
33+
print 'defaultMutableCatch():', defaultMutableCatch()
34+
# defaultMutableFix()
35+
print 'defaultMutableFix():', defaultMutableFix()
36+
print 'defaultMutableFix():', defaultMutableFix()
37+
print 'defaultMutableFix():', defaultMutableFix()
38+
39+
if __name__ == '__main__':
40+
main()
41+
#####################################
42+
# END: Problem with mutable defaults.
43+
#####################################
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/usr/bin/env python
2+
"""Does...
3+
4+
Created on Aug 25, 2011
5+
6+
@author: paulross
7+
"""
8+
9+
__author__ = 'Paul Ross'
10+
__date__ = '2011-08-03'
11+
__version__ = '0.1.0'
12+
__rights__ = 'Copyright (c) 2011 Paul Ross.'
13+
14+
###################################
15+
# The many ways of calling parrot()
16+
###################################
17+
def parrot(voltage,
18+
state='a stiff',
19+
action='voom',
20+
type='Norwegian Blue'):
21+
print "-- This parrot wouldn't", action,
22+
print "if you put", voltage, "volts through it."
23+
print "-- Lovely plumage, the", type
24+
print "-- It's", state, "!"
25+
26+
def main():
27+
parrot(1000)
28+
print
29+
parrot(action='VOOOOOM', voltage=1000000)
30+
print
31+
parrot('a thousand', state='pushing up the daisies')
32+
print
33+
parrot('a million', 'bereft of life', 'jump')
34+
print
35+
# These will raise a SyntaxError
36+
# parrot() # required argument missing
37+
# parrot(voltage=5.0, 'dead') # non-keyword argument following keyword
38+
parrot(110, 'a', 'b', voltage=220) # duplicate value for argument
39+
# parrot(actor='John Cleese') # unknown keyword
40+
41+
if __name__ == '__main__':
42+
main()
43+
44+
########################################
45+
# END: The many ways of calling parrot()
46+
########################################
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env python
2+
"""Does...
3+
4+
Created on Aug 25, 2011
5+
6+
@author: paulross
7+
"""
8+
9+
__author__ = 'Paul Ross'
10+
__date__ = '2011-08-03'
11+
__version__ = '0.1.0'
12+
__rights__ = 'Copyright (c) 2011 Paul Ross.'
13+
14+
import pprint
15+
16+
#########################
17+
# With keyword arguments.
18+
#########################
19+
def cheeseshop(kind, *args, **kwargs):
20+
print "-- Do you have any", kind, "?"
21+
print " *args ".center(40, '-')
22+
pprint.pprint(args)
23+
print " *args ".center(40, '-')
24+
print " *kwargs ".center(40, '-')
25+
pprint.pprint(kwargs)
26+
print " *kwargs ".center(40, '-')
27+
28+
def main():
29+
cheeseshop(
30+
"Limburger",
31+
# "It's very runny, sir.",
32+
# "It's really very, VERY runny, sir.",
33+
shopkeeper='Michael Palin',
34+
client="John Cleese",
35+
sketch="Cheese Shop Sketch")
36+
37+
if __name__ == '__main__':
38+
main()
39+
#########################
40+
# With keyword arguments.
41+
#########################
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/usr/bin/env python
2+
"""Illustrates Python function arguments packing and unpacking.
3+
4+
Created on Aug 25, 2011
5+
6+
@author: paulross
7+
"""
8+
9+
def unpackArgs(*args):
10+
for arg in args:
11+
print type(arg), arg
12+
print
13+
14+
def main():
15+
print 'callUnpackArgs():'
16+
print 'Specific arguments:'
17+
unpackArgs(0,1,2,3)
18+
l = ['a', 'b', 'c', 'd']
19+
print 'Single list argument:'
20+
unpackArgs(l)
21+
print 'Unpacked list argument:'
22+
unpackArgs(*l)
23+
print 'Single value unpacked'
24+
unpackArgs(*'hello')
25+
26+
if __name__ == '__main__':
27+
main()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#!/usr/bin/env python
2+
"""Illustrates Python function keyword arguments packing and unpacking.
3+
4+
Created on Aug 25, 2011
5+
6+
@author: paulross
7+
"""
8+
9+
def unpackKwargs(**kwargs):
10+
keys = kwargs.keys()
11+
keys.sort()
12+
for kw in keys:
13+
print kw, ":", kwargs[kw]
14+
15+
def main():
16+
print 'callUnpackKwargs():'
17+
print 'Specific arguments:'
18+
unpackKwargs(name='python', version=2.6)
19+
d = {
20+
'name' : 'python',
21+
'version' : 2.6,
22+
}
23+
print
24+
print 'Unpacked arguments:'
25+
unpackKwargs(**d)
26+
27+
if __name__ == '__main__':
28+
main()

Beginers/ExampleFunctions/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)