ql的python学习之路-day8
前言:本节主要学习的是函数的全局变量和局部变量以及递归
一、全局变量和局部变量
定义在函数外并且在函数头部的变量,叫做全局变量,全局变量在整个代码中都生效。
局部变量只在函数里生效,这个函数就叫做这个变量的作用域。
在函数里直接修改全局变量的类型是字典、列表、集合以及类,数字和字符串类型的要加上global关键字才能修改。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:qinjiaxi 4 hobby = 'sing' 5 def change_name(name): 6 global hobby#global关键字,在函数里修改全局变量 7 hobby = 'play' 8 print('before name', name) 9 name = 'qinlang'#局部变量只在函数里生效,这个函数就是这个变量的作用域。 10 age = 3#出了这个函数就找不到 11 print('after name', name) 12 name = 'qinjiaxi' 13 change_name(name) 14 print(name) 15 #print(age)#报错 16 print(hobby)
二、递归
递归的定义:在函数的内部可以调用函数;如果一个函数在内部调用自己本身,这个函数就是递归函数。
递归特性:
1.必须要有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少(或者说成:问题规模每递归一次都应该比上一次问题规模有所减少)
3.递归效率不高,递归层数过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数的调用,栈就会增加一层栈帧,每当函数返回,栈就减少一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出。)
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:qinjiaxi 4 def calc(n): 5 print(n+1) 6 return calc(n+1) 7 calc(0)#递归层数最多只有999层,然后报错,这是一个保护机制 8 9 #用递归求一个数除2直到不能返回为止 10 def calc1(n): 11 print(n) 12 if n//2 > 0: 13 return calc1(n//2) 14 print('--->', n)#最后执行打印,如果不明白可以断点调试 15 calc1(10)
calc1()函数运行结果:
1 10 2 5 3 2 4 1 5 ---> 1
三、高阶函数
变量可以指向函数,函数的参数可以接受变量,那么一个函数就可以接受一个函数作为参数,这种函数就叫做高阶函数。
注:高阶函数基本运用不到,只做了解。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:qinjiaxi 4 #高阶函数就是把一个函数作为另外一个函数的参数使用 5 def add(a, b ,c): 6 return c(a) + c(b) 7 d = add(2,-6,abs) 8 print(d)
转载请注明出处
每天努力多一点,忧愁少一点,快乐多一点
--->by晴朗sky