zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    子类调用父类被重写的方法
    Linux下编译出现undefined reference to ‘pthread_create’问题解决
    CRC校验8
    嵌入式C语言查表法
    Static关键字,遇到的问题_1
    java中方法的参数传递机制_一个对象被当作参数传递到一个方法后
    String使用equals和==比较的区别
    如何导入XML数据 (python3.6.6区别于python2 环境)
    0xx_PHP核心01
    PHP_MVC设计模式02
  • 原文地址:https://www.cnblogs.com/zfc2201/p/8168974.html
Copyright © 2011-2022 走看看