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)
      {'y': 10, 'z': 20}
    

lambda表达式

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

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

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

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

lambda基础

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

      g = lambda x:x**2
      print g
      <function <lambda> 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  水之原  阅读(149)  评论(0编辑  收藏  举报