13、函数

函数

  • 函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。

  • 可以通过函数名在程序的不同地方多次执行(这通常叫做函数调用),却不需要在所有地方都重复编写这些语句。

自定义函数

  • 用户自己编写的

预定义的Python函数

  • 系统自带的一些函数,还有一些和第三方编写的函数,如其他程序员编写的一些函数,对于这些现成的函数用户可以直接拿来使用。

为什么使用函数

  • 降低编程的难度

    • 通常将一个复杂的大问题分解成一系列更简单的小问题,然后将小问题继续划分成更小的问题,当问题细化为足够简单时,我们将可以分而治之。这时,我们可以使用函数来处理特定的问题,各个小问题解决了,大问题也就迎刃而解了。
  • 代码重用

    • 我们定义的函数可以在一个程序的多个位置使用,也可以用于多个程序。此外,我们还可以把函数放到一个模块中供其他程序员使用,同时,我们也可以使用其他程序定义的函数。这就避免了重复劳动,提供了工作效率。

函数定义和调用

  • 当我们自己定义一个函数时,通常使用def语句,其语法形式如下所示:

    def 函数名 (参数列表): #可以没有参数函数体

    def add(a, b):
    print a + b

  • 调用函数的一般形式是:

    函数名(参数列表)

    add(1, 2)

形式参数和实际参数

  • 在定义函数时函数后面圆括号中的变量名称叫做“形式参数”,或简称为“形参”

  • 在调用函数时,函数名后面圆括号中的变量名称叫做“实际参数”,或简称为“实参”

缺省参数(默认参数)

  • 默认参数只能从右至左给定,如果需要第一个参数给默认值,其他参数不给,那么把第一个参数移到最后一个即可。

    def add(a, b = 2):
    print a + b

    add(3) #result : 5

局部变量和全局变量

  • Python中的任何变量都有其特定的作用域。

  • 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量。

  • 在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量。

    x = 100 #全局变量,可以在文件任何地方调用

    def func():
    x = 200 #局部变量,只能在函数内部调用
    print x

    func() #输出200
    print x #输出100

global语句

  • 强制声明为全局变量

    x = 100

    def func():
    global x #强制声明x为全局变量,导致值被覆盖
    x = 200

    func()
    print x #输出200

函数返回值

  • 函数被调用后会返回一个指定的值

  • 函数调用后默认返回None

  • return返回值

  • 返回值可以是任意类型

  • return执行后,函数终止

  • 区分返回值和打印

    def add(a, b):
    return a + b

    ret = add(1, 2) #将函数返回结果赋值给变量ret
    print ret #输出3

向函数传入元组和字典

  • func (*args)

    def func(x, y):
    print x, y

    t = (1, 2)
    func(*t)

  • func (**kw)

    def func(name='jack', age=30):
    print name,age

    d = {'age': 22, 'name' : 'mike'};
    func(**d)

处理多余实参

  • def func(*args, **kw)

    def func(x, *args, **kw):
    print x
    print args
    print kw

    func(1, 2, 3, 4, 5, y=10, z=20)

    输出

    1
    (2, 3, 4, 5)

lambda表达式

  • 匿名函数
    • lambda函数是一种快速定义单行的最小函数,是从Lisp借用来的,可以用在任何需要函数的地方。

      lambda x,y:x*y

    • 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

    • 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

    • 使用lambda在某些时候让代码更容易理解。

lambda基础

  • lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象

    g = lambda x:x**2
    print g
    <function at 0x0000000002643A58>

lambda应用实例

  • reduce为逐次操作list里的每项,接收的参数为2个,最后返回的为一个结果。

    sum = reduce(lambda x,y:x*y, range(1,6))
    print sum

switch语句

  • switch语句用于编写多分支结构的程序,类似与if...elif...else语句。
  • switch语句表达的分支结构比if...elif...else语句表达的更清晰,代码的可读性更高。
  • 但是python并没有提供switch语句

switch实现

  • python可以通过字典实现switch语句的功能。
  • 实现方法分为两步
    • 首先,定义一个字典
    • 其次,调用字典的get()获取相应的表达式

函数调用

  • 通过字典调用函数

    def add(a, b):
    return a + b

    def sub(a, b):
    return a - b

    def mul(a, b):
    return a * b

    def div(a, b):
    return a / b

    operator = {'+': add, '-': sub, '*': mul, '/': div} #通过字典实现switch语句的功能

    def calc(a, o, b):
    return operator.get(o)(a, b)

    print calc(4, '+', 2)
    print calc(4, '-', 2)
    print calc(4, '*', 2)
    print calc(4, '/', 2)

posted @ 2018-01-01 21:20  水之原  阅读(176)  评论(0)    收藏  举报