zoukankan      html  css  js  c++  java
  • 函数----模块化的程序设计

    可扩展性,可维护性
    避免代码冗长
    可读性
     
    函数:
      函数是具备某一特定功能的工具
    使用原则:先定义后调用
     
    函数的定义———函数的三种形式
    def 函数名(arg1,arg2):
        #注释
        函数体
       Return 返回值
     
    1.定义无参函数:函数的执行不依赖于调用者传入的参数就能执行时,需要定义为无参函数
    def main():
         print_tag('*',20,3)
        print_msg('hello world')
        print_tag('*',20,3)
    main()
     
    2.有参函数:函数的执行需要依赖于调用者传入的参数才能执行时,需要定义为有参函数
    def print_tag(tag,count,line_num):
        for i in range(line_num):
        print(tag*count)
     
    3.空函数: 定义空函数:函数体为pass
    def func(x,y,z):
    pass
     
    函数的调用:
    •  语句形式:func()
    • 表达式形式:res=func2() 
    • 函数调用当作参数传入   func2(funct2(10))
     
    函数的定义:与变量的定义是相似的
    定义阶段:只检测语法,不执行代码 
    返回值:可以返回任意类型
    没有return:NONE
    return val1,val2,val2:(val1,val2,val3)
    return 只能返回一次值并终止函数 
     
    参数:
    形参&实参
    形参:变量名
    实参:实际传入的数据

    位置参数:按照从左到右的顺序依次定义的参数
                      按位置定义的实参,与形参一一定义
    def foo(x,y)
        print(x)
        print(y)
    Foo(1,2)
    
    1
    2

     
    关键字参数:形参=实参定义,key=value
    def foo(x,y):
       print(x)
       print(y)
    foo(y=1,x=2)
    注意:
    1位置实参必须在关键字实参前面
    2实参的形式可以是位置实参也可以是关键字参数,但是一个形参只能对赢一个实参
    def foo(x,y,z):
        print(x)
        print(y)
        print(z)
    foo(1,z=2,y=5)

    默认参数(形参):在定义参数阶段,就已经为形参赋值,调用阶段可以传值也可以不传值,不传值使用默认参数。
     
    **默认参数必须放在位置形参后面
    **值大多数情况下不变的使用默认参数
    **默认参数通常定义成不可变型
    **默认参数只在定义阶段被赋值一次
    a=10
    def foo(name,age=a)
        Print(name,age)
    a=20
     
    foo('mona’)
     
    Mona,10  
     

    可变长参数:可变长指的是实参的个数不固定
    按位置定义的可变长度的实参:*
    按关键字定义的可变长度的参数:**
    def func(x,y,*args):#可变的保存为tuple
        print(x,y,args)
    func(1,2,3,4)
     
    1 2 (3, 4)
    def func(x,y,**args):#可变的元素保存为字典模式
        print(x,y,args)
    func(x=1,y=2,z=3,a=1,b=1)
     
    1 2 {'z': 3, 'a': 1, 'b': 1}
     
    def wrapper(*args,**kwargs):
        print(args)
        print(kwargs)
    wrapper(1,2,3,4,5,x=1,y=2,z=3)
     
    (1, 2, 3, 4, 5)
    {'x': 1, 'y': 2, 'z': 3}

    命名关键字参数:定义在*后面的形参,必须被传值,并且必须以关键字的形式传值
    def register(*rg,name,age):
        print(name)
        print(age)
    register(age=18,name='mona’)
     
    mona
    18
    总结:位置参宿--->默认参数---->*args---->命名关键字----->**kwargs
     
     
    函数嵌套调用:
     
    函数的嵌套定义:
      def f1():
           def f2():
                  函数体
           f2()
    函数是第一类对象:指的是函数可以被当作数据传递
    • 可被引用
    • 可当作函数参数
    • 可以当做函数的返回值
    • 可以当做容器类型元素
        
    名称空间与作用域:
    名称空间:存放变量名与值的绑定关系
    名称空间分为三种:
    • 内置名称空间:python解释器自带的变量,python解释器启动就会生成内置空间
    • 全局名称空间:文件级别定义的名字都会存放到全局名称空间,执行python文件时会产生全局名称空间
    • 局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效,调用函数结束时失效
    三者的加载顺序:内置—>全局—>局部
    取值的顺序: 局部—>全局——>内置
                      局部作用域———>全局作用域
     
    作用域:作用范围
    • 全局作用域:内置名称空间和全局名称空间的名字属于全局范围;在整个文件的任意位置都能被引用,全局有效。
    • 局部作用域:局部名称空间的名字属于局部范围,只在函数内部可以被引用,局部有效。
    global:
    x=1
    def foo():
        global x
        x=1000
        print(x)
     
    foo()
    print(x)
     
    1000
    1000
    nonlocal :
    x=1
    def foo():
        def f2():
            x=2
            def f3():
                nonlocal x
                x=10000
            f3()
            print(x)
        f2()
     
     
    foo()
    print(x)
     
    10000
    1
     
    闭包函数:函数内部定义的函数,称为内部函数。该内部函数包含对外部作用域而非全家作用域。
    name='alex'
    def func():
        name='egon'
        def bar():
            print(name)
        return bar
    b=func()
    b()
       
    查看是否是闭包函数:none 就不是闭包函数
    name='alex'
    def func():
        name='egon'
        def bar():
            print(name)
        return bar
    b=func()
    print(b.__closure__)
    闭包函数的特点:
    • 自带作用域
    • 延迟计算

    定义闭包函数的基本形式:
    def   外部函数:
       内部函数变量
       def 内部函数():
            引用外部变量
       return 内部函数
     
  • 相关阅读:
    Caffe学习系列(16):caffe的整体流程
    caffe_windows安装
    r-cnn学习系列(三):从r-cnn到faster r-cnn
    Spatial pyramid pooling (SPP)-net (空间金字塔池化)笔记(转)
    r-cnn学习(二)
    r-cnn学习(一)
    Caffe学习系列(13):对训练好的模型进行fine-tune
    注解
    MATLAB实现回归分析
    MATLAB进行假设检验
  • 原文地址:https://www.cnblogs.com/mona524/p/7000636.html
Copyright © 2011-2022 走看看