• Python基础(五)-函数


    函数:

    1、定义与使用:

    def 函数名(参数):

        "函数_文档字符串"

        函数体

        ...

        return [表达式]

    ##

    def:表示函数的关键字

    函数名:函数名称,根据函数名调用函数

    文档字符串:函数第一行可以选择性的使用文档字符串--用于存放函数说明

    函数体:函数中进行一系列的逻辑计算

    参数:为函数提供数据

    return [表达式]:结束函数,选择性地返回一个值给调用者。不加返回内容,隐式返回None

    2、函数的优点:

    代码重用;

    保持一致性,易维护;

    可扩展

    3、过程

    定义:简单特殊没有返回值的函数

    当函数没有使用return显示的定义返回值时,Python解释器会隐式的返回None

    def test01():
        pass
     
    def test02():
        return 0
     
    def test03():
        return 0,10,'hello',['alex','lb'],{'WuDaLang':'lb'}
     
    t1=test01()
    t2=test02()
    t3=test03()
     
     
    print 'from test01 return is [%s]: ' %type(t1),t1
    print 'from test02 return is [%s]: ' %type(t2),t2
    print 'from test03 return is [%s]: ' %type(t3),t3

    返回值数=1 返回object

    返回值数>1 返回元组tuple

    4、函数参数:

    (1)形参:定义函数时的参数,只有在被调用时才分配内存单元,调用结束即刻释放内存。

                    形参只在函数内部有效,函数调用结束返回主调用函数后则不能再使用该形参变量

    (2)实参:调用函数时的参数,可以是常量、变量、表达式、函数等,无论实参是哪种类型的值,在进行函数调用时,都必须                 有确定的值,以便把这些值传送给形参。因此应预先赋值,输入等办法使参数获得确定值

    (3)位置参数和关键字:

    位置参数:标准调用,实参与形参位置一一对应,多或少都不行

    关键字调用:位置无需固定,

    混合使用时,位置参数必须在关键字参数左边,且不能重复赋值

    (4)默认参数

    在定义形参时,给参数一个确定的值,调用时不改动返回原值;若变动,返回变动后的值

    5、局部变量与全局变量

    局部变量:定义在子程序中的变量;作用域是定义该变量的子程序中

    全局变量:定义在程序最外层的变量;作用域是整个程序中

    一般使用全大写定义全局变量,全小写定义局部变量,用于区分

    当二者同名时,局部变量起作用

    使用global 加变量名 不管在什么位置都可直接调用全局变量,也可做修改,修改后全局生效

     使用nonlocal调用上一级代码变量

    6、前向引用(函数即变量)

    def action():
        print 'in the action'
        logger()
    action()
    报错NameError: global name 'logger' is not defined
    
    
    def logger():
        print 'in the logger'
    def action():
        print 'in the action'
        logger()
     
    action()
     
    
    def action():
        print 'in the action'
        logger()
    def logger():
        print 'in the logger'
    View Code

    7、嵌套函数

    函数中又定义函数

    8、递归

    如果一个函数在内部调用自己本身,那这个函数就是递归函数。

    特性:

    (1)必须有一个明确的结束条件

    (2)每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    (3)递归效率不高,递归层次过多会导致内存溢出

    def calc(n):
        if int(n/2)==0:
            return n
        #m=calc(int(n/2))  #内部调用函数本身
        #print(m)
        #return m  #只有返回常量时,函数才结束
    
        a=int(n/2)
        m=calc(a) 
    return(m) calc(10)
    #print(calc(10))
    #print(calc(10000))


    ##过程分析:
    #第一次return(calc(5))相当于return内接着调用函数calc,且尚未return值,且接着调用函数calc;
    #第二次n=calc(5)时,return(calc(2))内部接着调用calc函数,结果也没有return常量,继续调用calc;
    #第三次n=calc(2)时,return(calc(1))内部继续调用calc函数,
    #第四次n=calc(1) 此时 int(n/2)==0 满足条件,return 1,调用结束,并返回给函数,之后再一层一层返回


     经典案例:

    1.阶乘 : f(n)=n!=n * (n-1) * (n-2) * ... * 2 * 1

     1 def f(n):
     2     if n == 1:
     3         return 1
     4     a=n*f(n-1)
     5     return a
     6 
     7 f(3)
     8 
     9 #f(3) -->return(3*f(2))
    10 #f(2)--> return(2*f(1))
    11 #f(1)-->return 1
    View Code

    9、高阶函数:

    满足一下任意条件:1、函数穿入参数是一个函数名 2、函数返回是一个函数名

    10、匿名函数与三元表达式

    三元表达式:x=1 if x<1 else x=2  --> 如果(if x<a )为True则返回(x=1)否则返回(x=2)

    匿名函数:通俗的讲就是没有函数名 lambda 定义  

    lamba x:x+1 -->返回(x+1)

    通常与其他函数结合使用

    11、函数式编程

  • 相关阅读:
    iOS开发应用设置及用户默认设置【2、读取应用中的设置】
    iOS开发应用设置及用户默认设置【1、bundle的运用】
    iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
    iOS开发中的4种数据持久化方式【一、属性列表与归档解档】
    iOS开发编译报错、常见问题(实时更新)
    js window.location用法
    canvas 时钟
    java File处理
    servletjspEL 表达式
    Linux(centos 7)配置tomcat8、JDK1.8、lighttpd、ngnix、mysql
  • 原文地址:https://www.cnblogs.com/chenzhuo-/p/6116952.html
Copyright © 2020-2023  润新知