zoukankan      html  css  js  c++  java
  • Python 学习笔记 之 03

    函数总结
        最基本的一种代码抽象的方式。
       
    定义函数
        使用def语句进行定义, return进行函数返回。
        一旦执行导return,函数就执行完毕。
        即使函数未指定return语句,函数执行完毕后也会进行return,只不过返回值是None,(return None, 可以简写为return) 。
       
        将函数保存到文件,便于以后调用
            可以将定义的函数定义保存到.py文件,在存放文件的目录中启动py解释器,使用from 文件名 import 函数名 来导入存放在文件中的函数, 文件名不加扩展名。
       
        空函数
            定义一个什么也不做的空函数,用来做占位符
                def nothing():
                    pass
            空函数做占位符,在后续开发中再对函数进行完善。
       
        返回多个值
        实际上函数返回的是单一值(一个tuple),因为tuple在返回时可以省略小括号,所以多个变量可以通过获取tuple元素位置的方式按照位置获取值。
       
    函数的参数*
        默认参数
            def func(x,n=2)
            定义参数时,必选参数在前,默认参数在后,否则报错。
            当函数有多个参数时,把变化大的参数放在前面,变化小的参数放后面,变化小的参数就可以作为默认参数了。
           
        可变参数
            def func(*numbers)
            传入参数的数量是可变的。在参数前加*后,参数接收到的是一个tuple,因此在不改变代码的情况下,支持传入任意个参数。函数调用时,传入的任意个参数会自动组建为一个tuple。
           
            调用可变参数
                如果已经有了一个list,想将list调用可变参数,可以直接在list前加*,就可以把list中的元素变为可变参数传递给函数。
                >>> def fu(*n):
                ...     r = max(n)
                ...     return r
                ...
                >>> fu([1,2,3,4,5])
                [1, 2, 3, 4, 5]     #直接用list的话,会被当做一个对象。
                >>> fu(*[1,2,3,4,5])
                5
               
        关键字参数
            def func(name,age,**otherinfos)
            允许传入任意个携带参数名的参数,这些关键字参数在函数内部自动组建为一个dict。
           
            也可以先将可选项组为一个dict,谭厚将dict转换为关键字参数传进度。
           
        命名关键字参数
            def func(name,age,*,sex,city)
            # *后的参数都会被是为命名关键字参数,调用时必须传入参数名,否则报错,这一点和位置参数不同。当不指定参数名时,都会被函数认为成位置参数。
            # 如果函数定义中已经有了一个可变参数,那么可变参数后面跟着的命名关键字参数就不再需要*了。
            对于关键字参数,调用时可以传入任意个不受限制的关键字参数,至于到底传入了哪些参数,就需要在函数内通过【函数里定义的关键字参数】来检查,但是在调用函数时依然可以传入不受限制的关键字参数。如果要限制关键字参数的名字,就可以使用命名关键字参数。
            命名关键字参数与位置参数看起来很像,位置参数要求必须传入,而命名关键字参数也要求参数必须传入(关键字参数却是可选),二者的区别在哪里?
                位置参数是list中的一个必要元素,而命名关键字参数是dict中的一个必要元素。明明关键字参数更加灵活一些。
               
            关于命名关键字参数的理解,在学过参数组合后会更好理解。
           
        参数组合
            函数的参数:
                1.位置参数
                2.默认参数 (x=xxx)
                3.可变参数 (*something)
                4.关键字参数 (**something)
                5.命名关键字参数 (*,somgting)
            在python中定义的函数,可以使用这五种参数进行组合。但是参数定义的顺序必须是:
                必选参数->默认参数->可变参数->命名关键字参数->关键字参数
       
            虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可读性和可理解性都会非常的差。
           
            实际上,对于任意函数,都可以通过类似func(*canshu,**kw)的形式调用,无论它的参数是如何定义的。
       
                >>> def testfunc(a, b, c=0, *de, **ee):
                ...         print(a,b,c,de,ee)
                ...
                >>> aa = [1,2,3,4,5,6,7,8,9,0]
                >>> bb = {'w':'s', 'e':'d', 'r':'f' }
                >>> testfunc(*aa,**bb)
                1 2 3 (4, 5, 6, 7, 8, 9, 0) {'e': 'd', 'w': 's', 'r': 'f'}
                   
                #dict中的key不要和函数定义的变量重合噢,如果dict中有key为'a' ,那么这个参数传入后会报错的。
       
    递归函数
        函数内调用函数本身。
        过深的递归会导致栈溢出。针对尾递归优化的语言可以通过尾递归优化的方式防止栈溢出,
            def jx(n):
                if n == 1:
                    return 1
                return n * jx(n - 1)

  • 相关阅读:
    PhoenixFD插件流体模拟——UI布局【Dynamics】详解
    Altera三速以太网IP核使用(下篇)之千兆网接口设计与使用
    FPGA之千兆网接口设计与使用(不调用IP核,适用于Alter与Xilinx,简单粗暴实现udp协议封装)
    基于Matlab Hdl Coder实现FPGA程序开发(卡尔曼滤波算法实现)
    FPGA之SSI接口协议实现
    FPGA之BISS接口协议实现
    Xilinx DDR2 IP核使用
    FFT IP核调用与仿真之SCALE压缩因子设置
    Quartus/Modelsim调试仿真技巧
    FPGA之CORDIC算法实现_代码实现(下)
  • 原文地址:https://www.cnblogs.com/konggg/p/9132809.html
Copyright © 2011-2022 走看看