美文网首页
函数(基本定义,作用域,参数,lambda)

函数(基本定义,作用域,参数,lambda)

作者: 04a07ffbfb62 | 来源:发表于2016-05-21 20:40 被阅读154次

函数是对程序逻辑进行结构化或过程化的一种编程方法。能将整块代码巧妙地隔离成易于管理的小块,把重复代码放到函数中而不是进行大量的拷贝--这样既能节省空间,也有助于保持一致性。

python可以创建四种函数:

全局函数:定义在模块中
局部函数:嵌套在其他函数中
lambda函数:表达式
方法:与特定数据类型关联的函数,并且只能与数据类型关联一起使用(定义在类中的函数)

def

def是一个可执行语句
def创建了一个对象并赋值给一个变量名(即函数名)

return

函数是通过return语句将计算得到的值传递给调用者的,返回值成为函数调用的结果。
如果函数执行了return语句,那么函数的生命就结束了,return 语句后面的代码都不会执行。函数里只能执行一次return语句,但可以写多条return语句

函数返回结果

没有return语句,没有返回值,返回对象类型是none;(如果在构造函数中,没有返回值,记得在最后加上 return none)
返回一个值的时候,类型为object;
返回多个值的时候,python会把返回值聚集起来,以元组的形式返回;

def test():
    print 'haha'
res = test()
>>>haha
print res
>>>None
type(res)
>>>NoneType

调用函数

使用()对函数进行调用;

  def t1():
     print 'hello'
     return None

  t1
  >>> <function __main__.t1>
  print t1
  >>> <function t1 at 0x00000000038B8DD8>
  t1()
  >>> hello

函数作用域

  • python创建、改变、查找变量名都是在名称空间中进行
  • 在代码中变量名被赋值的位置决定了其能被访问到的范围
  • 函数定义了本地作用域,而模块定义了全局作用域
    • 每个模块都是一个全局作用域,因此,全部作用域的范围就限于单个程序文件
    • 每次对函数的调用夺回创建一个新的本地作用域,赋值的变量除非为全局变量,否则均为本地变量
    • 所有的变量名都可以归纳为本地、全局或内置(由__builtin__模块提供)

变量名解析:LEGB原则

变量名引用分三个作用域进行:首先是本地、之后是外层函数内、接着是全局(模块),最后是内置;

tml.png

参数匹配模型

默认情况下,参数通过其位置进行传递,从左到右,个数相同;
但也可以通过关键字参数、默认参数或参数容器等改变这种机制:

  • 定义默认参数时,默认参数放在最后

  • 可变参数:定义函数时使用*开头的参数,可用于收集任意多给予位置或关键字的参数;可变参数放在最后。

    可变参数,输出为元组

    m = 3; n = 4; l = [1,2]
    def f10(*arg):
    print arg
    f10(l)

    ([1, 2],)
    f10(l, m)
    ([1, 2], 3)
    f10(l, m, n)
    ([1, 2], 3, 4)

    def f11(x, *y):
    print x, y
    f11(m,n,l)

    3 (4, [1, 2])
    #可变参数解包
    l3 = ['a', 'b', 'c']
    def f17(x, y, z):
    print x, y ,z
    f17(*l3) #个数需匹配,如果l3是四个,就会报错
    >>> a b c
    f17(m, *l3)
    >>> 3 a b

lambda

lambda是表达式,不是语句,不是代码块
参数是可选的,lambda表达式返回的是一个可调用函数对象

f18 = lambda x, y: x + y
f18
>>> <function __main__.<lambda>>
f18(1, 2)
>>> 3
# 收集可变参数的lambda
m = 3; n = 4; l = [1,2]
f19 = lambda *z: z
f19(m, n)
>>> (3, 4)
f19(m, n, l)
>>> (3, 4, [1, 2])

函数的设计规范

  • 降低耦合性:
  • 通过函数接受输入,以及通过return产生输出以保证函数的独立性(少使用print);
  • 尽量少使用全局变量进行函数间通信;
  • 不要在函数中修改可变类型的参数;
  • 避免直接改变定义在另外一个模块中的变量;
  • 聚合性:
    • 每个函数保持单一性功能;
    • 函数功能应保持简单,避免过于复杂;

相关文章

  • Python函数复习

    本章重点: 掌握函数参数传递 变量的作用域 lambda函数 函数定义: 一、变量的作用域 作用域顾名思义是指变量...

  • Python入门 - 第 3 节课:函数

    目录 1. 函数定义定义函数默认参数 2. 变量作用域 3. 文档 4. Lambda 表达式Lambda 函数的...

  • 函数(基本定义,作用域,参数,lambda)

    函数是对程序逻辑进行结构化或过程化的一种编程方法。能将整块代码巧妙地隔离成易于管理的小块,把重复代码放到函数中而不...

  • 函数的使用

    主要内容 函数的声明 调用自定义函数 变量的作用域 各类函数参数的应用 使用lambda匿名函数 python的其...

  • 5-1 Python自定义函数及调用的方法

    声明函数 调用自定义函数 变量作用域 各种类型的函数参数应用 使用lambda建立匿名函数 Python其他常用内...

  • 2020年4月22日&23日 第六章 函数

    第六章 函数 6.1 函数的基本使用 6.2 函数的参数和返回值 6.3 变量作用域 6.4 lambda函数 6...

  • 第一部分 第3章 函数作用域和块作用域

    函数作用域 函数作用域可以将内部的变量和函数定义隐藏起来function foo(/*参数*/){ //.....

  • 2.Dart面向对象

    函数 命名可选参数{} 位置可选参数[] 作用域定义:与js的作用域一致,层层向上找。 Dart函数闭包 js函数...

  • JavaScript之函数

    三、函数 目录:函数的定义和参数获取、变量的作用域 let const详解、方法的定义和参数的获取 1.函数的定义...

  • 2018-08-31函数

    01-record 1.匿名函数函数名 = lambda 参数列表:返回值函数名(实参) 2.作用域函数的调用过程...

网友评论

      本文标题:函数(基本定义,作用域,参数,lambda)

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