函数

作者: 流光汐舞 | 来源:发表于2017-10-06 11:02 被阅读0次

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
包括:内置函数 和 自定义函数。

定义:
def  函数名([参数]):
    代码块
    [return 表达式]
调用
函数名([参数])

根据是否有参数和是否有返回值,函数分为4种类型:
1、无参,无返回值
2、有参,无返回值
3、无参,有返回值
4、有参,有返回值

而参数可以分为以下五种:

1、可变和不可变参数
①不可变类型:
类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
②可变类型:
类似 c++ 的引用传递,如 列表,字典。如 fun(ls),则是将ls 真正的传过去,修改后fun外部的ls也会受影响。

2、必选参数
必选参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

3、默认参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

4、可变参数
①在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。参数组装成一个tutple。
②变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

5、关键字参数
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。
注意:如果要限制关键字参数的名字,就可以用命名关键字参数。

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。
但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数。

变量作用域

一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域有:全局变量 和 局部变量。

1、局部变量
①局部变量,就是在函数内部定义的变量。
②不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响。
③局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用。
④如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量。

2、全局变量
①如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量。
②如果要再函数中修改全局变量,使用global声明。

小结:
在函数外边定义的变量叫做全局变量。
全局变量能够在所以的函数中进行访问。
如果在函数中修改全局变量,那么就需要使用global进行声明。
如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的。

递归函数

如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
满足递归的条件:
1、有循环的内容
2、有跳出的条件
3、递归默认是有递归深度要求的。

>>> import sys
>>> sys.getrecursionlimit()
1000

当递归深度超过这个值的时候,就会引发这样的一个异常。
解决的方式是手工设置递归调用深度,方式为
 
import sys   
sys.setrecursionlimit(1000000) #例如这里设置为一百万

例子:
斐波那契数列 迭代求法
1 1 2 3 5 8 13 21 34 55

def fun(n):
    n1=1
    n2=1
    n3=1
    if n<1:
        print('输入错误!')
        return -1
    while (n-2)>0:
        n3=n1+n2
        n1=n2
        n2=n3
        n-=1
    return n3
num=int(input('请输入第几个数'))
a=fun(num)
print('第%d个数字为:%d'%(num,a))

总结:
使用递归要注意的有两点:
1、递归就是在过程或函数里面调用自身。
2、在使用递归时,必须有一个明确的递归结束条件,称为递归出口。
递归分为两个阶段:
1、递推:把复杂的问题的求解推到比原问题简单一些的问题的求解
2、回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.

迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B。

递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出,使用的时候要慎重。

匿名函数

用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
一般,执行一次,或者作为参数传递。省的定义再调用。直接定义加调用。
lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

注意:
Lambda函数能接收任何数量的参数但只能返回一个表达式的值。

相关文章

  • Excel(三)

    AND函数 OR函数 NOT函数 IF函数 频率分析函数FREQUENCY

  • if、else if、for、while、repeat函数

    ①if函数 ②else if函数 ③for函数 ④while函数 ⑤repeat函数

  • strsplit、mapply、paste、match函数

    strsplit函数 mapply函数 strsplit函数 mapply函数 paste函数 match函数 第...

  • Oracle中常用函数(SQL)

    Oracle函授有以下几个分类:数字函数、字符函数、日期函数、转换函数、集合函数、分析函数 数字函数: 字符函数:...

  • MySQL函数

    字符函数 数字运算函数 比较运算符和函数 日期时间函数 信息函数 聚合函数 加密函数 流程函数

  • BI-SQL丨AND & OR & IN

    AND函数 & OR函数 & IN函数 AND函数、OR函数和IN函数都可以理解是WHERE函数的补充,当然也可以...

  • Python之函数

    课程大纲 函数定义 函数的参数 函数的返回值 高阶函数 函数作用域 递归函数 匿名函数 内置函数 函数式编程 将函...

  • 函数基本知识

    函数 函数的定义: def 函数名() 函数的调用:函数名() #不能将函数调用放在函数定义上方 函数的文档注...

  • 积分表——不定期更新

    基本初等函数包括: 常函数: 幂函数 指数函数 对数函数 三角函数 反三角函数 I、反函数Ⅱ、复合函数:初等函数(...

  • MySQL基本使用

    函数 常用函数 数学函数 字符串函数 日期函数

网友评论

      本文标题:函数

      本文链接:https://www.haomeiwen.com/subject/hklzhxtx.html