函数

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

定义:
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函数能接收任何数量的参数但只能返回一个表达式的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容