美文网首页Python is Best
Python——函数基础

Python——函数基础

作者: So_ProbuING | 来源:发表于2017-09-25 16:00 被阅读17次

    函数基础

    • 函数就是将一些语句集合在一起的部件,不止一次地在程序中运行。还能计算出一个返回值,并能够改变作为函数输入的参数。

    编写函数

    函数基础

    • def是可执行的代码,Python函数时由def编写的,def是一个可执行的语句,函数并不存在。直到Python运行了def后才存在。
    • def创建了一个对象并将其赋值给某一变量名。当Python运行到def语句时,将会生成一个新的函数对象并将其赋值给这个函数名。就像所有的赋值一样,函数名变成了某一个函数的引用。
    • return将一个结果对象发送给调用者,当函数被调用时,其调用者停止运行直到这个函数完成了工作,之后函数将控制权返回调用者,return返回值就是函数调用的结果
    • yield向调用者返回一个结果对象
      global声明了一个模块级的变量并被赋值,在默认情况下,所有在一个函数中被赋值的对象,是这个函数的本地变量,并且仅在这个函数运行的过程中存在。为了分配一个可以在整个模块中都可以使用的变量名,函数需要在global语句中将它列举出来。变量名需要关注它的作用域,并且是通过赋值语句将变量名绑定至作用域的
    • nonlocal声明了将要赋值的一个封闭的函数变量。在Python3中添加的nonlocal语句允许一个函数来赋值一条语法封闭的def语句的作用域中已有的名称。允许封闭的函数作为保留状态的地方
    • 函数时通过对象引用传递的,在Python中,参数通过赋值传递给函数。
    • 参数、返回值以及变量并不是声明,在函数中并没有类型约束。可以传递任意类型的参数给函数。函数也可以返回任意类型的对象

    def语句

    格式

    def将创建一个函数对象并将其赋值给一个变量名

    def <name>(arg1,arg2,....argn):
          <statements>
    
    • def包含了首行并有一个代码块跟随在后边,这个代码块通常会缩进。这个代码块就是Python函数的执行语句
    • def的首行定义了函数名,赋值给了函数对象,并在括号中包含了0个或多个参数。在函数调用的时候,在首行的参数名称赋值给了括号中传递来的对象
    • 带返回值的格式
    def <name>(arg1,arg2,....argN):
      statement
    return <value>
    
    • return语句可以在函数主体中任何地方出现,表示函数调用的结束。并将结果返回至调用处。
    • 定义的函数中,如果没有return,会默认return null
    • 如果在函数中return多个对象,Python会将多个对象封装为一个元组返回,其实返回的还是一个对象

    def是实时执行的

    • Python的def语句实际上是一个可执行的语句:当运行时,创建一个新的函数对象并将其赋值给一个变量名,Python中的所有语句都是实时运行的,没有独立编译这样的流程。所以def语句可以出现在任一地方。还可以嵌套在其他的语句中
    if test:
      def func():
          statement
    else:
      def func()
          statment
    statement
    func()
    
    • def在运行时简单地给一个变量名进行赋值,Python函数在程序运行之前并不需要全部定义。
    • 函数的函数名并不重要,可以将函数赋值给一个不同的变量名,并通过新的变量名进行调用。
    • 函数允许任意的属性附加到记录信息供随后使用
    def func():....
    func()
    func.attr = value
    
    示例
    # 返回两个数的计算结果
    >>> def times(x,y):
    ...     return x*y
    ... 
    >>> time = time(2,3)
    >>> time = times(2,3)
    >>> time
    6
    
    • 函数中的参数完全取决于参数的对象类型

    用户定义的函数属性

    用户定义的函数具有以下属性

    • f.doc 文档字符串
    • f.name 函数名称
    • f.dict 包含函数属性的字典
    • f.code 字节编译的代码
    • f.defaults 包含默认参数的元组
    • f.globals 定义全局命名空间的字典
    • f.closure 包含与嵌套作用域相关数据的元组

    Python中的多态

    同样的函数,在不同的实例下执行的结果取决于不同的实例。这种依赖行为称为多态。

    • 作为函数,可以自动的适用于所有类别的对象类型。只要对象支持所预期的接口,函数就能处理
    • Python中代码不应该关心特定的数据类型。
    # 寻找序列的交集
    >>> def intersect(seq1,seq2):
    ...     res=[]
    ...     for x in seq1:
    ...             if x in seq2:
    ...                     res.append(x)
    ...     return res
    ... 
    >>> x = [1,2,3,4,5]
    >>> y = ['a',1,2,'b','c',4]
    >>> resout = intersect(x,y)
    >>> resout
    [1, 2, 4]
    
    • 如果我们传入了不支持这些接口的对象,Python将会自动检测出不匹配,并抛出一个异常
    本地变量

    在上述的代码中res是本地变量,这个变量只是在def内的函数中是可见的,并且仅在函数运行时是存在。所有的在函数内部进行赋值的变量名都默认为本地变量。

    • 参数也是通过赋值被传入的,所以seq1和seq2是本地变量
    • for循环将元素赋值给了变量X,所以变量X是本地变量
    • 所有的本地变量都会在函数调用时出现,并在函数退出时消失。

    相关文章

      网友评论

        本文标题:Python——函数基础

        本文链接:https://www.haomeiwen.com/subject/wwvrextx.html