Day3 - Python基础3 函数、递归、内置函数

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 

posted @ 2018-05-01 00:06  Pynetwork  阅读(179)  评论(0编辑  收藏  举报