Skip to content
Snippets Groups Projects
FunctionsAndLists.ipynb 2.75 KiB
Newer Older
cprutean's avatar
cprutean committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have seen in that functions basically *do what you expect*, and in\n",
    "particular the variables *inside* the function are seperate from those\n",
    "in the program. This is true for the basic build-in types (, , and ),\n",
    "but you have to be *very careful* when you pass s into functions.\n",
    "\n",
    "Consider what happend in the following code where the function sets a\n",
    "given with random numbers.\n",
    "\n",
    "def set_random_list(lst): \"\"\" Function to set a list full of random\n",
    "numbers. \"\"\" for i in range(0,len(lst)): lst\\[i\\] = random.random()\n",
    "\n",
    "def main(): xdata = \\[0.0\\]\\*100 set_random_list(xdata)\n",
    "\n",
    "main()\n",
    "\n",
    "Now consider what happens,\n",
    "\n",
    "-   in the program we create a list of 100 s, all set to zero,\n",
    "\n",
    "-   then this is passed to the function the is sent to the function,\n",
    "\n",
    "-   inside the function the data *held* in the is the same as the data\n",
    "    in the , so if you change the values of the elements of the list\n",
    "    inside then they *will* change in .\n",
    "\n",
    "-   in , after the call to the *elements* of the list will be set to\n",
    "    random numbers.\n",
    "\n",
    "This operation of functions *is* typically what you want to happen, but\n",
    "you have to be very careful that you really intend to modify the\n",
    "contents of a list inside the function.\n",
    "\n",
    "The way that numbers operate need a bit of through on how they work, if\n",
    "you have a function as below that a ,\n",
    "\n",
    "def complex_value_compare( a , b): if a.real \\> b.real and a.imag \\>\n",
    "b.imag: return a + b else: return a - b\n",
    "\n",
    "then this will work exactly as you expect and you can *read* the real\n",
    "and imaginary parts of the arguments with the and syntax. *BUT* beacuse\n",
    "of the way the number is passed you are not able to write to the real\n",
    "and imaginary parts by this route, this means that althought a complex\n",
    "number looks like a of two numbers, it cannot be changed inside a\n",
    "function.\n",
    "\n",
    "webonly\n",
    "\n",
    "The There is a variant on the list called a which holds multiple\n",
    "elements just like a , is indexed by the same syntax for read *but*\n",
    "cannot be wrtten to, so its values are *fixed*. This is not frequently\n",
    "used in normal *user* programs, but is used inside complex libraries to\n",
    "implement constants.\n",
    "\n",
    "You have now completed sufficient to attempt which is the last\n",
    "checkpoint of the course."
   ]
  }
 ],
 "nbformat": 4,
 "nbformat_minor": 5,
 "metadata": {}
}