• Python基础:12函数细节


     一:返回值

            当没有显式地返回元素时,Python 会返回一个None。如果函数返回多个对象,python 把他们聚集起来并以一个元组返回。

     

    二:创建函数

            1:强烈推荐,在函数体之前,编写函数的文档字符串。

            2:在某些语言中,函数声明和函数定义区分开的。但在Python中,将这两者视为一体,函数的子句由声明的标题行以及随后的定义体组成的。

     

            3:和其他高级语言类似,Python 也不允许在函数未声明(定义)之前,对其进行引用或者调用。下面给出几个例子来看一下:

    def  foo():
            print  'in foo()'
            bar()

             此时如果调用函数foo(),肯定会失败,因为函数bar()还没有定义:

    >>> foo()
    in foo()
    Traceback (innermost last): File"<stdin>", line 1, in ?
    File "<stdin>", line 3, infoo
    NameError: bar

             现在在函数foo()前给出bar()的定义:

    def bar():
            print 'in bar()'
    
    def foo():
            print 'in foo()'
            bar()

             现在可以安全的调用foo(),而不会出现任何问题:

    >>> foo()
    in foo()
    in bar()

             甚至也可以在函数bar()前定义函数foo():

    def foo():
            print 'in foo()'
            bar()
    
    def bar():
            print 'in bar()'
    
     >>> foo()
    in foo()
    in bar()

             这段代码是正确的因为:即使(在foo()中)对bar()进行的调用出现在bar()的定义之前,但foo()本身不是在bar()声明之前被调用的。换句话说,先声明foo(),然后再声明bar(),接着调用foo(),但是到那时,bar()已经存在了,所以调用成功。(这一点,在C语言中,是不成立的。)

     

            4:除了加注释帮助理解函数之外,还有一种方式就是文档字符串。如果在函数的开头写下字符串,它就会作为函数的一部分进行存储,称为文档字符串。

     

            5:函数也具有属性,可以自定义任何函数属性,可以在函数体之外定义函数属性。比如:

    def  foo():
            'foo() -- properly created doc string'
    
    foo.__hehe__ = 'foohehe'
    
    def  bar():
            pass
    
    
    bar.__doc__ = 'Oops, forgot the doc strabove'
    bar.version = 0.1
    bar.hehe = 'barhehe'

     

    三:内部函数

            在函数体内创建另外一个函数(对象)是完全合法的。这种函数叫做内部/内嵌函数。比如:

    def  outer():
           print'in outer'
    
           def inner():
                  print'in inner'
    
           inner()  
    
     
    outer() 

     结果是:

    in outer
    in inner

            内部函数在外部函数的作用域之内。如果没有任何对inner ()的外部引用,那么除了在函数体内,任何地方都不能对其进行调用。

     

    五:传递函数

            在Python中,函数也是一种对象,所以,函数可以被引用的,也作为参数传入函数,以及作为列表和字典等等容器对象的元素。

            函数有一个独一无二的特征使它同其他对象区分开来,那就是函数是可调用的

     

  • 相关阅读:
    Neo4j使用
    Neo4j安装
    textCNN原理
    一小时彻底搞懂RabbitMQ
    微服务配置中心 Apollo 源码解析——Admin 发送发布消息
    new jup在新一代中存在
    elasticsearch 之 深入探秘type底层数据结构
    Elasticsearch修改分词器以及自定义分词器
    ElasticSearch解决深度分页性能存在的问题使用scoll来解决
    elasticsearchBouncing Results问题
  • 原文地址:https://www.cnblogs.com/gqtcgq/p/7247203.html
Copyright © 2020-2023  润新知