zoukankan      html  css  js  c++  java
  • Python学习之--函数/生成器/装饰器

    Function,函数,主要是为了:1提高代码的复用程度,2将程序模块化。

    定义函数

    在Python中,使用def 用来定义函数,一般函数的定义如下:

    def name(arg1,arg2,....):
          statements
          return value

    其中,return 用来返回函数执行的结果

    一个简单的sample如下:

    >>> def times(x,y):
    ...     return x*y
    ...
    >>> times(5,2)
    10
    >>>

    函数执行的结果可以放入到一个变量中:

    >>> result=times(5,2)
    >>> result
    10
    >>>

    Python 不需要定义参数的类型,函数结果的返回完全依赖于传入参数的类型,在上例中,Python自动识别传入的参数为两个数字,并作出返回值,当传入一个列表参数的时候,结果如下:

    >>> li=[1,2,3]
    >>> times(li,2)
    [1, 2, 3, 1, 2, 3]
    >>>

    传入字符串的时候,结果如下:

    >>> a='Hello'
    >>> times(a,3)
    'HelloHelloHello'
    >>>

    所以简单的Summary一下,传入的函数参数会被python自动识别,也就是在运算的时候'*'识别并对不同类型的参数变量作出了不同的应对。但是如果'*'不能识别或者不支持传入的参数,那么在函数运行的时候还是会报错的,如下:

    >>> b='x'
    >>> times(a,b)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in times
    TypeError: can't multiply sequence by non-int of type 'str'
    >>>

    所以,在不确定的情况下,可以先实验一下,传入的参数会不会造成error。

    函数参数的类型

    一般参数

    关键字参数:通过参数名进行匹配

    默认参数:没有传入值的参数定义的默认值

    可变参数:*开头,可以是多个基于位置或者关键字的参数

    具体,如下的函数定义中传入了不同的参数,代表了不同的含义:

    def fun(*name)                    #传入不定量的参数,这些参数会被组成一个元祖
    def func(name=value)              #定义了参数的默认值
    def func(**name)                  #传入不定量的参数,这些参数会被组成一个字典
    def func(name,*args)              #混合方式,多余的参数会被组成一个元祖传入
    def func(name,**args)             #混合方式,多余的参数会被组成一个字典传入
    def func(*,name=value)            #混合方式,后面的参数name必须通过关键字参数传入

    生成器(generator)

    生成器是用来创建python序列的对象。生成器是一种迭代器,使用它可以迭代庞大的序列,且不需要在内存中创建和存储整个序列。

    在python中,一个函数中如果使用了yield,那么这个函数就是一个生成器。

    有关生成器内容点这里

    装饰器(decorator)

    有关装饰器的内容点这里

  • 相关阅读:
    求Computational problems associated with Racah algebra
    病理情形
    扫描算法求最大子序列的一次简单非严格证明
    分治法求最大子序列,关于复杂度的一次弱推导
    VFP_等待 rar 命令结束
    Windows_解决win7开机画面变成vista画面的方法
    C#_WinForm的等待窗口
    C#_控件的缩写大全
    SQL Server 2008_基本安装说明
    C#_获取 SQL服务器列表
  • 原文地址:https://www.cnblogs.com/cedrelaliu/p/5151817.html
Copyright © 2011-2022 走看看