CSM2170 Chapter 5 Functions PDF
Document Details
Uploaded by PleasurableNewton3147
College of Southern Maryland
Reham Hamdy Abou-Zaid
Tags
Summary
This document is a chapter on Python functions, covering topics such as void functions, value-returning functions, and how to use them effectively in a program.
Full Transcript
Starting out with Python Fourth Edition Chapter 5 Functions Reham Hamdy Abou-Zaid, 2024 Topics (1 of 2) Introduction to Functions Defining and Calling a Void Function Designing a Program to Use Functions Local Variables Passing Argumen...
Starting out with Python Fourth Edition Chapter 5 Functions Reham Hamdy Abou-Zaid, 2024 Topics (1 of 2) Introduction to Functions Defining and Calling a Void Function Designing a Program to Use Functions Local Variables Passing Arguments to Functions Global Variables and Global Constants Turtle Graphics: Modularizing Code with Functions Topics (2 of 2) Introduction to Value-Returning Functions: Generating Random Numbers Writing Your Own Value-Returning Functions The math Module Storing Functions in Modules Introduction to Functions (1 of 2) Function: group of statements within a program that perform as specific task Usually one task of a large program Functions can be executed in order to perform overall program task Known as divide and conquer approach Modularized program: program wherein each task within the program is in its own function Introduction to Functions (2 of 2) Using functions to divide and conquer a large task Benefits of Modularizing a Program with Functions The benefits of using functions include: Simpler code Code reuse write the code once and call it multiple times Better testing and debugging Can test and debug each function individually Faster development Easier facilitation of teamwork Different team members can write different functions Void Functions and Value-Returning Functions A void function: Simply executes the statements it contains and then terminates. A value-returning function: Executes the statements it contains, and then it returns a value back to the statement that called it. The input, int, and float functions are examples of value-returning functions. Defining and Calling a Void Function (1 of 5) Functions are given names Function naming rules: Cannot use keywords as a function name Cannot contain spaces First character must be a letter or underscore All other characters must be a letter, number or underscore Uppercase and lowercase characters are distinct Defining and Calling a Void Function (2 of 5) Function name should be descriptive of the task carried out by the function Often includes a verb For example, a function that calculates gross pay might be named calculate_gross_pay Function definition: specifies what function does def function_name(): statement statement Defining and Calling a Void Function (3 of 5) Function header: first line of function – Includes keyword def and function name, followed by parentheses and colon Block: set of statements that belong together as a group – Example: the statements included in a function Defining and Calling a Void Function (4 of 5) A function definition specifies what a function does, but it does not cause the function to execute. To execute a function, you must call it. Call a function to execute it When a function is called: Interpreter jumps to the function and executes statements in the block Interpreter jumps back to part of program that called the function and the program resumes execution at that point. Known as function return Example of Defining and Calling a Function This causes a function named message to be created in memory, containing the block of statements in lines 4 and 5. This causes the message function to execute, which prints the two lines of output Defining and Calling a Void Function (5 of 5) main function: called when the program starts Calls other functions when they are needed Defines the mainline logic of the program Indentation in Python Each block must be indented Lines in block must begin with the same number of spaces Use tabs or spaces to indent lines in a block, but not both as this can confuse the Python interpreter IDLE and PyCharm automatically indent the lines in a block Blank lines that appear in a block are ignored Designing a Program to Use Functions (1 of 3) In a flowchart, function call shown as rectangle with vertical bars at each side Function name written in the symbol Typically draw separate flow chart for each function in the program End terminal symbol usually reads Return Top-down design: technique for breaking algorithm into functions Separate flow chart for each function Designing a Program to Use Functions (2 of 3) Flowcharts are good tools for graphically depicting the flow of logic inside a function, but they do not give a visual representation of the relationships between functions. Hierarchy chart: depicts relationship between functions AKA structure chart Box for each function in the program, Lines connecting boxes illustrate the functions called by each function Does not show steps taken inside a function Use input function to have program wait for user to press enter Designing a Program to Use Functions (3 of 3) Example of Designing a Program to Use Functions Example of Designing a Program to Use Functions Example of Designing a Program to Use Functions (p.221) Using the pass Keyword You can use the pass keyword to create empty functions The pass keyword is ignored by the Python interpreter This can be helpful when designing a program def step1(): pass def step2(): pass Local Variables (1 of 4) Local variable: variable that is assigned a value inside a function Belongs to the function in which it was created Only statements inside that function can access it, error will occur if another function tries to access the variable Local Variables (2 of 4) This program has two functions: main and get_name. In line 8, the name variable is assigned a value that is entered by the user. This statement is inside the get_name function, so the name variable is local to that function. This means that the name variable cannot be accessed by statements outside the get_name function. The main function calls the get_name function in line 3. Then, the statement in line 4 tries to access the name variable. This results in an error because the name variable is local to the get_name function, and statements in the main function cannot access it. Local Variables (3 of 4) Scope: the part of a program in which a variable may be accessed For local variable: function in which created Local variable cannot be accessed by statements inside its function which precede its creation Different functions may have local variables with the same name Each function does not see the other function’s local variables, so no confusion Local Variables (4 of 4) Passing Arguments to Functions (1 of 4) Argument: is any piece of data that is passed into a function when the function is called. A parameter: is a variable that receives an argument that is passed into a function. Function can use argument in calculations When calling the function, the argument is placed in parentheses following the function name Passing Arguments to Functions (2 of 4) Passing Arguments to Functions (3 of 4) Parameter variable: variable that is assigned the value of an argument when the function is called The parameter and the argument reference the same value General format: def function_name(parameter): Scope of a parameter: the function in which the parameter is used Example: Passing Arguments to Functions Passing Arguments to Functions (4 of 4) Example Passing Arguments to Functions Example Passing Arguments to Functions Example Passing Arguments to Functions Passing Multiple Arguments (1 of 2) Python allows writing a function that accepts multiple arguments Parameter list replaces single parameter Parameter list items separated by comma Arguments are passed by position to corresponding parameters First parameter receives value of first argument, second parameter receives value of second argument, etc. Example: Passing Multiple Arguments Passing Multiple Arguments (2 of 2) Making Changes to Parameters (1 of 3) Changes made to a parameter value within the function do not affect the argument Known as pass by value Provides a way for unidirectional communication between one function and another function Calling function can communicate with called function Making Changes to Parameters (1 of 3) Making Changes to Parameters (2 of 3) The value variable is passed to the change_me function Making Changes to Parameters (3 of 3) The value variable passed to the change_me function cannot be changed by it Keyword Arguments Keyword argument: argument that specifies which parameter the value should be passed to Position when calling function is irrelevant General Format: function_name(parameter=value) Possible to mix keyword and positional arguments when calling a function Positional arguments must appear first Example: Keyword Arguments Notice in line 7 the order of the keyword arguments does not match the order of the parameters in the function header in line 13. Because a keyword argument specifies which parameter the argument should be passed into, its position in the function call does not matter. Example: Keyword Arguments Mixing Keyword Arguments with Positional Arguments It is possible to mix positional arguments and keyword arguments in a function call, but the positional arguments must appear first, followed by the keyword arguments. Otherwise, an error will occur. Here is an example of how we might call the show_interest function of Program 5-10 using both positional and keyword arguments: In this statement, the first argument, 10000.0, is passed by its position to the principal parameter. The second and third arguments are passed as keyword arguments. The following function call will cause an error, however, because a non-keyword argument follows a keyword argument: Global Variables (1 of 2) Global variable: created by assignment statement written outside all the functions Can be accessed by any statement in the program file, including from within a function If a function needs to assign a value to the global variable, the global variable must be redeclared within the function General format: global variable_name Example: Create a Global Variables Example: Create a Global Variables If a variable is assigned a value anywhere within the function's body, it's assumed to be a local unless explicitly declared as global. Example: Guess the output! Global Variables (2 of 2) Reasons to avoid using global variables: Global variables making debugging difficult Many locations in the code could be causing a wrong variable value Functions that use global variables are usually dependent on those variables Makes function hard to transfer to another program Global variables make a program hard to understand Global Constants Global constant: global name that references a value that cannot be changed Permissible to use global constants in a program To simulate global constant in Python, create global variable and do not re-declare it within functions Example: Global Constants Introduction to Value-Returning Functions: Generating Random Numbers Void function: group of statements within a program for performing a specific task Call function when you need to perform the task Value-returning function: similar to void function, returns a value Value returned to part of program that called the function when function finishes executing Standard Library Functions and the import Statement (1 of 3) Standard library: library of pre-written functions that comes with Python Library functions perform tasks that programmers commonly need Example: print, input, range Viewed by programmers as a “black box” Some library functions built into Python interpreter To use, just call the function Standard Library Functions and the import Statement (2 of 3) Modules: files that stores functions of the standard library Help organize library functions not built into the interpreter Copied to computer when you install Python To call a function stored in a module, need to write an import statement Written at the top of the program Format: import module_name Standard Library Functions and the import Statement (3 of 3) Generating Random Numbers (1 of 5) Random number are useful in a lot of programming tasks random module: includes library functions for working with random numbers Dot notation: notation for calling a function belonging to a module Format: module_name.function_name() Generating Random Numbers (2 of 5) randint function: generates a random number in the range provided by the arguments Returns the random number to part of program that called the function Returned integer can be used anywhere that an integer would be used You can experiment with the function in interactive mode Generating Random Numbers (3 of 5) Generating Random Numbers (4 of 5) The random function returns a value Displaying a random number Generating Random Numbers (4 of 5) Generating Random Numbers (5 of 5) randrange function: similar to range function, but returns randomly selected integer from the resulting sequence Same arguments as for the range function random function: returns a random float in the range of 0.0 and 1.0 Does not receive arguments uniform function: returns a random float but allows user to specify range Random Number Seeds Random number created by functions in random module are actually pseudo-random numbers Seed value: initializes the formula that generates random numbers Need to use different seeds in order to get different series of random numbers By default uses system time for seed Can use random.seed() function to specify desired seed value Random Number Seeds Writing Your Own Value-Returning Functions (1 of 2) To write a value-returning function, you write a simple function and add one or more return statements Format: return expression The value for expression will be returned to the part of the program that called the function The expression in the return statement can be a complex expression, such as a sum of two variables or the result of another value-returning function Writing Your Own Value-Returning Functions (2 of 2) Example: How to Use the return value of a Function How to Use Value-Returning Functions Value-returning function can be useful in specific situations Example: have function prompt user for input and return the user’s input Simplify mathematical expressions Complex calculations that need to be repeated throughout the program Use the returned value Assign it to a variable or use as an argument in another function Example: How to Use Value-Returning Functions The function get_regular_price prompts the user to enter the regular price and return the result and assign it to the variable price. The function discount accepts an item’s price as an argument and returns the amount of the discount Using IPO Charts (1 of 2) IPO chart: describes the input, processing, and output of a function Tool for designing and documenting functions Typically laid out in columns Usually provide brief descriptions of input, processing, and output, without going into details Often includes enough information to be used instead of a flowchart Using IPO Charts (2 of 2) Returning Strings You can write functions that return strings For example: def get_name(): # Get the user’s name. name = input(‘Enter your name:’) # Return the name. return name Returning Boolean Values Boolean function: returns either True or False Use to test a condition such as for decision and repetition structures Common calculations, such as whether a number is even, can be easily repeated by calling a function Use to simplify complex input validation code Example: Returning Boolean Values Returning Multiple Values In Python, a function can return multiple values Specified after the return statement separated by commas Format: return expression1, expression2, etc. When you call such a function in an assignment statement, you need a separate variable on the left side of the = operator to receive each returned value Example 1: Returning Multiple Values The following definition for a function named get_name prompts the user to enter his or her first and last names. These names are stored in two local variables: first and last. The return statement returns both of the variables. When you call this function in an assignment statement, you need to use two variables on the left side of the = operator to capture the two names returned by the function Example 2: Returning Multiple Values When you call first_and_last function in an assignment statement, you need to use two variables on the left side of the = operator to capture the two values returned by the function. Output: Example 3: Returning Multiple Values The get_coordinates function returns two values representing the x and y coordinates of a point. These are assigned to x_coord and y_coord upon the function call Output: Returning None From a Function The special value None means “no value” Sometimes it is useful to return None from a function to indicate that an error has occurred def divide(num1, num2): if num2 == 0: result = None else: result = num1 / num2 return result The math Module (1 of 3) math module: part of standard library that contains functions that are useful for performing mathematical calculations Typically accept one or more values as arguments, perform mathematical operation, and return the result Use of module requires an import math statement The math Module (2 of 3) math Module Function Description acos(x) Returns the arc cosine of x, in radians. asin(x) Returns the arc sine of x, in radians. atan(x) Returns the arc tangent of x, in radians. ceil(x) Returns the smallest integer that is greater than or equal to x. cos(x) Returns the cosine of x in radians. degrees(x) Assuming x is an angle in radians, the function returns the angle converted to degrees. exp(x) Returns ex floor(x) Returns the largest integer that is less than or equal to x. hypot(x, y) Returns the length of a hypotenuse that extends from (0, 0) to (x, y). log(x) Returns the natural logarithm of x. log10(x) Returns the base-10 logarithm of x. radians(x) Assuming x is an angle in degrees, the function returns the angle converted to radians. sin(x) Returns the sine of x in radians. sqrt(x) Returns the square root of x. tan(x) Returns the tangent of x in radians. Example: The math Module - math.sqrt() The math Module (3 of 3) The math module defines variables pi and e, which are assigned the mathematical values for pi and e Can be used in equations that require these values, to get more accurate results Variables must also be called using the dot notation Example: circle_area = math.pi * radius**2 Storing Functions in Modules (1 of 2) In large, complex programs, it is important to keep code organized Modularization: grouping related functions in modules Makes program easier to understand, test, and maintain Make it easier to reuse code for multiple different programs Import the module containing the required function to each program that needs it Storing Functions in Modules (2 of 2) Module is a file that contains Python code Contains function definition but does not contain calls to the functions Importing programs will call the functions Rules for module names: File name should end in.py Cannot be the same as a Python keyword Import module using import statement Menu Driven Programs Menu-driven program: displays a list of operations on the screen, allowing user to select the desired operation List of operations displayed on the screen is called a menu Program uses a decision structure to determine the selected menu option and required operation Typically repeats until the user quits Example: Menu Driven Programs Conditionally Executing the main Function (1 of 3) It is possible to create a module that can be run as a standalone program or imported into another program Suppose Program A defines several functions that you want to use in Program B So, you import Program A into Program B However, you do not want Program A to execute its main function when you import it Conditionally Executing the main Function (2 of 3) In the aforementioned scenario, you write each module so it executes its main function only when the module is being run as the main program When a source code file is loaded into the Python interpreter, a special variable called __name__ is created If the source code file has been imported as a module, the __name__ variable will be set to the name of the module. If the source code file is being executed as the main program, the __name__ variable will be set to the value '__main__'. Conditionally Executing the main Function (3 of 3) To prevent the main function from being executed when the file is imported as a module, you can conditionally execute main def main(): statement statement def my_function(): statement statement if __name__ == '__main__': main() Example: Conditionally Executing the main Function If you run this file directly using python first_module.py, the main() function will be executed, and you'll see: Example: Conditionally Executing the main Function (cont.) import first_module: This imports the functions from first_module.py. main(): A main function for second_module.py that calls first_module.greet(). if __name__ == "__main__":: This ensures that the main() function in second_module.py only runs if this script is executed directly, not when it’s imported elsewhere. Output: Example: Conditionally Executing the main Function (cont.) 1.first_module.py: Contains a greet() function and a main() function. The main() function only runs when this script is executed directly. 2.second_module.py: Imports first_module. Has its own main() that only runs when second_module.py is executed directly. Final Clarification: In second_module.py, add if __name__ == "__main__": if you want to prevent its code from running when it's imported. If you don’t include this, the entire file would execute when imported into other programs, which is usually not what you want. Turtle Graphics: Modularizing Code with Functions (1 of 6) Commonly needed turtle graphics operations can be stored in functions and then called whenever needed. For example, the following function draws a square. The parameters specify the location, width, and color. def square(x, y, width, color): turtle.penup() # Raise the pen turtle.goto(x, y) # Move to (X,Y) turtle.fillcolor(color) # Set the fill color turtle.pendown() # Lower the pen turtle.begin_fill() # Start filling for count in range(4): # Draw a square turtle.forward(width) turtle.left(90) turtle.end_fill() # End filling Turtle Graphics: Modularizing Code with Functions (2 of 6) The following code calls the previously shown square function to draw three squares: square(100, 0, 50, 'red') square(-150, -100, 200, 'blue') square(-200, 150, 75, 'green') Turtle Graphics: Modularizing Code with Functions (3 of 6) The following function draws a circle. The parameters specify the location, radius, and color. def circle(x, y, radius, color): turtle.penup() # Raise the pen turtle.goto(x, y - radius) # Position the turtle turtle.fillcolor(color) # Set the fill color turtle.pendown() # Lower the pen turtle.begin_fill() # Start filling turtle.circle(radius) # Draw a circle turtle.end_fill() # End filling Turtle Graphics: Modularizing Code with Functions (4 of 6) The following code calls the previously shown circle function to draw three circles: circle(0, 0, 100, 'red') circle(-150, -75, 50, 'blue') circle(-200, 150, 75, 'green') Turtle Graphics: Modularizing Code with Functions (5 of 6) The following function draws a line. The parameters specify the starting and ending locations, and color. def line(startX, startY, endX, endY, color): turtle.penup() # Raise the pen turtle.goto(startX, startY) # Move to the starting point turtle.pendown() # Lower the pen turtle.pencolor(color) # Set the pen color turtle.goto(endX, endY) # Draw a square Turtle Graphics: Modularizing Code with Functions (6 of 6) The following code calls the previously shown line function to draw a triangle: TOP_X = 0 TOP_Y = 100 BASE_LEFT_X = -100 BASE_LEFT_Y = -100 BASE_RIGHT_X = 100 BASE_RIGHT_Y = -100 line(TOP_X, TOP_Y, BASE_LEFT_X, BASE_LEFT_Y, 'red') line(TOP_X, TOP_Y, BASE_RIGHT_X, BASE_RIGHT_Y, 'blue') line(BASE_LEFT_X, BASE_LEFT_Y, BASE_RIGHT_X, BASE_RIGHT_Y, 'green') Summary (1 of 2) This chapter covered: The advantages of using functions The syntax for defining and calling a function Methods for designing a program to use functions Use of local variables and their scope Syntax and limitations of passing arguments to functions Global variables, global constants, and their advantages and disadvantages Summary (2 of 2) Value-returning functions, including: Writing value-returning functions Using value-returning functions Functions returning multiple values Using library functions and the import statement Modules, including: The random and math modules Grouping your own functions in modules Modularizing Turtle Graphics Code