How to define a function
A function definition starts with the keyword def followed by the function name and then parameters. The code block for a function starts after the colon (:). If first line in the code block is a string then it is stored as part of the function and is called a docstring. The function may or may not return a value.>>> def addNumbers (parm1, parm2): "This function adds two numbers" result = parm1 + parm2 return result >>> print(addNumbers(2, 3)) 5
Global variable versus Local variable and parameter passing by reference
In python parameters are passed by reference so if you pass a parameter to a function and then change its value inside the function you can see the changes outside the function. But if you assign a value to a parameter inside a function then it creates a new variable which is local to the function and not the same variable that's defined outside the function so the value of that variable cannot change. So if you pass a string, since strings are immutable there is no way you can get the changes outside the function whereas if you pass a list and update then the original value is updated. Every function in python creates a namespace and variables defined within are scoped within that namespace. Here are a few examples to demonstrate the scoping and parameter passing by reference.>>> def myFunction(name): name = "John" print(name); return >>> name = "Jake" >>> myFunction(name) John >>> print(name) Jake
>>> def myFunction(names): names = ["John","Sam"] print(names); return >>> myList = ["Jake","Ed"] >>> myFunction(myList) ['John', 'Sam'] >>> myList ['Jake', 'Ed']
>>> def myFunction(names):
names.append("Just Added")
print(names);
return
>>> myList = ["Jake","Ed"]
>>> myFunction(myList)
['Jake', 'Ed', 'Just Added']
>>> myList
['Jake', 'Ed', 'Just Added']
Keyword parameters and default values
If you just send the name of the parameters when calling the function then you don't have to pass then in their respective positions.>>> def myHello(greeting, name):
print(greeting + " " + name)
return
>>> myHello("hello", "world!")
hello world!
>>> myHello(greeting="hello", name="world!")
hello world!
>>> myHello(name="world!", greeting="hello")
hello world!
If there is default value for a parameter then it becomes optional to send.
>>> def myHello(name, greeting="hello"):
print(greeting + " " + name)
return
>>> myHello("world!","hi")
hi world!
>>> myHello("world!")
hello world!
>>> myHello(name="world!")
hello world!
>>> myHello(name="world!",greeting="hi")
hi world!
Variable length parameter collection
If you specify an argument with a single asterisk(*) then they are all collect in a tuple and if you specify an argument with double asterisk(**) then it creates a dictionary with the name and value pairs.>>> def myFunction(arg1, arg2, *parms):
print(arg1)
print(arg2)
print(parms)
for x in parms:
print(x)
return
>>> myFunction("hello","hi","a","b","c")
hello
hi
('a', 'b', 'c')
a
b
c
>>> def myFunction(arg1, arg2, **parms):
print(arg1)
print(arg2)
print(parms)
for key,value in parms.items():
print(key + " --> " + value)
return
>>> myFunction("hello","hi",a="1",b="2",c="2")
hello
hi
{'a': '1', 'c': '2', 'b': '2'}
a --> 1
c --> 2
b --> 2
>>> def myFunction(arg1, arg2, *parms, **args):
print(arg1)
print(arg2)
print(parms)
for x in parms:
print(x)
print(args)
for key,value in args.items():
print(key + " --> " + value)
return
>>> myFunction("hello","hi",1,2,3,4,a="1",b="2",c="2")
hello
hi
(1, 2, 3, 4)
1
2
3
4
{'a': '1', 'c': '2', 'b': '2'}
a --> 1
c --> 2
b --> 2
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.