怎样从函数返回多个值

怎样从函数返回多个值

l  怎样从函数返回多个值(利用极坐标到直角坐标的转换做例子)

n  1.传入多个指针指向不同的地址,让函数填入需要返回的值

u  clip_image002

n  2.让函数返回包含需要值的结构

u  clip_image003

n  结合指针和结构,让函数接收结构指针,然后再填入需要的数据

u  clip_image004

n  不得已的时候,可以使用全局变量,但是这个方法不推荐,GOD晓得有没有可能在多线程的其他程序中会修改全局变量,所以这是迫不得已时采用的方法。

functioin

函数

作用域规则

       Python定义了3个命名空间,分别是局部local、全局global和内建built-in命名空间。程序视图访问标识符的值时,python会按照特定顺序搜索命名空间(即局部、全局和内建命名空间),检查是否存在标识符,以及它的具体位置。

递归与重复

l  递归和重复都建立在一个控制结构的基础上。

l  重复使用的是重复结构,比如forwhile

l  递归使用选择结构,比如ifif/else

l  无论重复还是递归,实际都牵涉到重复性操作。区别在于:

n  重复是显式使用一个重复结构;

n  递归则是进行重复的函数调用;

l  两者都要进行终止测试:

n  重复会在循环继续条件为false时终止;

n  递归在识别出基本条件时终止;

l  由计数器控制的重复和递归都是逐渐终止:

n  重复会不断修改一个计数器,直到计数器的值使循环继续条件编程false

n  递归则不断对原始问题进行简化,直到抵达基本条件;

l  重复和递归都可能无休止地进行。

 

l  递归有很多缺点:它采用重复调用机制,不断产生函数调用开销,这不仅浪费处理器处理时间,还会占用大量内存。每次递归调用都会导致创建另一个函数拷贝(事实只是函数的变量),这会占用大量内存;

 

l  重复通常在函数内部发生,所以能忽略重复函数调用和额外内存分配的开销。

 

PS:一个由多个函数构成的程序与没有任何函数的一体式程序相比,会产生大量的函数调用,这些调用会占用大量的处理器时间和内存。但另一方面,一体式程序的编程、测试、调试和维护都比较复杂。

默认参数

       定义函数时,可以将一个或多个参数指定为默认参数,并可为其指定一个默认值。默认参数主要是为了提供方便,调用函数时,可以指定较少的参数数量。但是要注意,默认参数必须位于任何非默认参数的右边。调用有两个或更多默认参数的函数时,如果省略的参数不在参数列表最右边,那就必须省略它之后的所有参数。

比如:

       def box(length = 1, width = 1, height = 1):

              return length * width * height

关键字参数

       程序员可要求函数接收一个或多个关键字参数。函数定义为每个关键字指派一个默认值。函数即可使用关键字的默认值,也可在函数调用中为关键字指派一个新值(格式为keyword=value)。使用关键字参数时,参数在函数调用中的位置不必与它的函数定义中的位置一一对应。

 

functioin

函数

作用域规则

       Python定义了3个命名空间,分别是局部local、全局global和内建built-in命名空间。程序视图访问标识符的值时,python会按照特定顺序搜索命名空间(即局部、全局和内建命名空间),检查是否存在标识符,以及它的具体位置。

递归与重复

l  递归和重复都建立在一个控制结构的基础上。

l  重复使用的是重复结构,比如forwhile

l  递归使用选择结构,比如ifif/else

l  无论重复还是递归,实际都牵涉到重复性操作。区别在于:

n  重复是显式使用一个重复结构;

n  递归则是进行重复的函数调用;

l  两者都要进行终止测试:

n  重复会在循环继续条件为false时终止;

n  递归在识别出基本条件时终止;

l  由计数器控制的重复和递归都是逐渐终止:

n  重复会不断修改一个计数器,直到计数器的值使循环继续条件编程false

n  递归则不断对原始问题进行简化,直到抵达基本条件;

l  重复和递归都可能无休止地进行。

 

l  递归有很多缺点:它采用重复调用机制,不断产生函数调用开销,这不仅浪费处理器处理时间,还会占用大量内存。每次递归调用都会导致创建另一个函数拷贝(事实只是函数的变量),这会占用大量内存;

 

l  重复通常在函数内部发生,所以能忽略重复函数调用和额外内存分配的开销。

 

PS:一个由多个函数构成的程序与没有任何函数的一体式程序相比,会产生大量的函数调用,这些调用会占用大量的处理器时间和内存。但另一方面,一体式程序的编程、测试、调试和维护都比较复杂。

默认参数

       定义函数时,可以将一个或多个参数指定为默认参数,并可为其指定一个默认值。默认参数主要是为了提供方便,调用函数时,可以指定较少的参数数量。但是要注意,默认参数必须位于任何非默认参数的右边。调用有两个或更多默认参数的函数时,如果省略的参数不在参数列表最右边,那就必须省略它之后的所有参数。

比如:

       def box(length = 1, width = 1, height = 1):

              return length * width * height

关键字参数

       程序员可要求函数接收一个或多个关键字参数。函数定义为每个关键字指派一个默认值。函数即可使用关键字的默认值,也可在函数调用中为关键字指派一个新值(格式为keyword=value)。使用关键字参数时,参数在函数调用中的位置不必与它的函数定义中的位置一一对应。

 

the unexpected problem of macro

宏带来的意外

clip_image001

C程序员相对于函数而言更喜欢用宏,因为宏可以让程序员编写出和函数调用一样可读但效率更高的代码,不过,要警惕一些意外情况:

l  虽然宏可能比函数调用执行得快,但是它展开后的代码可能会比函数调用的多几倍,如果你的程序在很多地方扩展宏,这个程序可能大得让你无法想象;

l  宏可能会展开为一个子表达式,但它不像函数调用那样捆绑得那么紧凑;

l  宏展开后,某些参数可能执行了不止一次,或者根本就不执行。一个具有副作用的宏参数会导致意外的发生。

 

脚本和函数的区别

脚本和函数的区别

MATLAB中有一种文件叫M文件,他就是一系列代码组成的一个扩展名为.m的文件,M文件可分为脚本文件MATLAB scripts)和函数文件MATLAB functions)。脚本文件是包含多条MATLAB命令的文件函数文件可以包含输入变量,并把结果传送给输出变量,两者的简要区别如下:
脚本文件
1.多条命令的综合体

2.没有输入、输出变量

3.使用MATLAB基本工作空间

4.没有函数声明行

函数文件

1.常用于扩充MATLAB函数库

2.可以包含输入、输出变量

3.运算中生成的所有变量都存放在函数工作空间

4.包含函数声明行

脚本文件可以理解为简单的M文件,脚本文件中的变量都是全局变量。函数文件是在脚本文件的基础之上多添加了一行函数定义行,其代码组织结构和调用方式与对应的脚本文件截然不同。

函数文件是以函数声明行“function…”作为开始的,其实质就是用户往MATLAB函数库里边添加了子函数,函数文件中的变量都是局部变量,除非使用了特别声明。函数运行完毕之后,其定义的变量将从工作区间中清除。而脚本文件只是将一系列相关的代码结合封装,没有输入参数和 输出参数,即不自带参数,也不一定要返回结果。而多数函数文件一般都有输入和输出变量,并见有返回结果。