Day3 - Python基础3 函数、递归、内置函数
1. 函数基本语法及特性
定义:将一组语句的集合通过一个名字(函数名)封装起来,当执行该函数时,只需调用该函数名即可
特性:
1.避免重复代码
2.增强程序可扩展性
3.代码容易维护
2. 参数与局部变量
形参变量只有被调用时才会分配内存单元,在调用结束后,内存单元即刻被释放。因此,形参只在函数内部有效,当函数调用返回主调用函数时,形参的变量将不再可用
实参变量可以是常量、变量、表达式、函数等,无论实参是何种类型的量,当函数调用时,传给形参时都必须是确定的值。因此应预先使用赋值、输入等方法,使形参获得确定值
局部变量:函数内定义的变量,只在函数运行时起作用,运行结束后自动释放
默认参数:
def stuffs(name,age,country='CN'): print("姓名:%s"%name) print("年龄:%d" % age) print("国家:%s" % country) stuffs('sam',18)
非固定参数:
#*args会把多传的参数变成一个元组 >>> def stuffs(name,age,*args): ... print(name,age,args) ... >>> stuffs('sam',18,'football','Movie','Python') sam 18 ('football', 'Movie', 'Python') >>> #**kwargs会把多传的参数变成一个字典 >>> def stuffs(name,age,*args,**kwargs): ... print(name,age,args,kwargs) ... >>> stuffs('sam',18,'CN','python',sex='man',hobby='running') sam 18 ('CN', 'python') {'hobby': 'running', 'sex': 'man'} >>>
关键参数:
关键参数必须在位置参数之后
>>> def stuffs(name,age,country='CN'): ... print("姓名:%s"%name) ... print("年龄:%d" % age) ... print("国家:%s" % country) ... >>> >>> stuffs(country='USA','sam',18) #关键参数在位参前面,导致报错 File "<stdin>", line 1 SyntaxError: positional argument follows keyword argument >>> stuffs('sam',18,country='USA') #关键参数的位参之后正常 姓名:sam 年龄:18 国家:USA >>>
全局和局部变量:
在子程序定义的变量叫局部变量,在程序一开始就定义的变量叫全局变量
局部变量作用域是定义该变量的子程序,全局变量作用域是整个程序
当二者同名时,在定义局部变量的子程序中局部变量起作用,其它地方全局变量起作用
3. 返回值
要想获取执行结果,就可以用return把结果返回
- 函数执行过程中,只要遇到return语句时就会停止执行并返回结果,可以理解为return就是函数的结束
- 函数如未设置return,则默认返回值为None
嵌套函数
函数内再套用函数
name = 'sam' def change_name(): name = 'sam2' def change_name2(): name = 'sam3' print("第3层打印",name) change_name2() #调用内层函数 print('第2层打印',name) change_name() print('第1层打印',name)
4.递归
如果一个函数在内部调用自身本身,这就叫递归函数
特性:
1.要有明确的结束条件
2.每当进入深一层次的递归时,问题规模相对上次都要有所减少
3.递归效率不高,递归层次过多可能导致栈溢出
5.匿名函数
不需要显示的指定函数 ,和其它函数搭配使用
>>> calc = lambda n:n**n
>>> print(calc(10))
10000000000
#和其它函数配合使用
>>> res = map(lambda n:n**3,[1,2,3,4]) >>> res <map object at 0x0000000000DEDCF8> >>> for i in res: ... print(i) ... 1 8 27 64
6.函数式编程介绍
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。
函数式编程中的函数这个术语不是指计算机中的函数(实际上是Subroutine),而是指数学中的函数,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态。比如sqrt(x)函数计算x的平方根,只要x不变,不论什么时候调用,调用几次,值都是不变的。
一、定义
简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。主要思想是把运算过程尽量写成一系列嵌套的函数调用。
7.高阶函数
变量可以指向函数,函数的参数能接受变量,那么一个函数就可以接受另一个函数作为参数,这种函数称为高阶函数
1 >>> def add(x,y,f): 2 ... return f(x) + f(y) 3 ... 4 >>> res = add(3,-6,abs) 5 >>> print(res) 6 9
8.内置函数
内置参数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii