zoukankan      html  css  js  c++  java
  • Python学习笔记(四)之Python函数

    思维导图:

    Snipaste_2020-01-14_09-43-39.png

    1. 函数定义和调用

    • 实例1.1:

      #!/user/bin/python
      #coding=utf-8
      #author@ zjw
      
      #函数定义
      def printSth(sth):
          print(sth)
      
      #main方法,程序运行时一开始直接进入到该函数
      if __name__ == "__main__":
      	printSth("Hello World!") #函数调用
      
    • 输出:

      Hello World!

    • 分析:上面是一个简单的函数定义和调用的实例。

      • 函数代码块通过def关键字开头,后接函数标识符号名称和圆括号()。

      • 将传入参数放在圆括号中,这和C语言和java是一致的。

      • 函数主体以冒号开始,并且需要缩进。

      • return语句可有可无,没有return语句默认返回None,单独的一个return也是返回None。return语句可以一次性返回多个变量,在外部用一个变量接收时,获得的类型是Tuple。

        • 例1.2:(return语句可以一次性返回多个变量,在外部用一个变量接收时,获得的类型是Tuple)

          #!/user/bin/python
          #coding=utf-8
          #author@ zjw
          
          #函数定义
          def loc(x, y):
              cx = x + 1
              cy = y + 1
              return cx, cy #一次性返回两个对象
          
          #main方法,程序运行时一开始直接进入到该函数
          if __name__ == "__main__":
              z = loc(1, 2) #函数调用
              print z
          
        • 输出:

          (2, 3)

    2. 参数传递

    2.1 位置参数

    • 实例2.1.1:

      #!/user/bin/python
      #coding=utf-8
      #author@ zjw
      
      #创建一个函数,计算从1到x的和
      def function(x): #其中x就是默认参数
          sum = 0
          for i in range(1, x + 1):
              sum += i
          return sum
      
      if __name__ == "__main__":
          print(function(2))
      
    • 输出

      3

    • 分析:上面是一个计算从1加到x的和的函数。其中function的参数x就是函数的位置参数。但是要调用该函数时,只能传入一个参数x,当传入两个数时程序会报错。为了解决该问题我们引入了默认参数

    2.2 默认参数

    • 我们现在创建一个默认计算从1加到x的和的函数,但是当传入两个变量时,我们需要计算从1到x的和和从1到y的和的两个总和的函数。

      • 实例2.2.1:

        #!/user/bin/python
        #coding=utf-8
        #author@ zjw
        
        '''
        创建一个函数,默认计算从1到x的和
        如果传入两个参数,则计算从1到x的和加上1到y的和的总和
        '''
        def function(x, y = 0):
            sum = 0
            for i in range(1, x + 1):
                sum += i
            for i in range(1, y + 1):
                sum += i
            return sum
        
        if __name__ == "__main__":
            print(function(2))
            print(function(2, 2))
        
      • 输出:

        3

        6

      • 分析:上述程序中,引入了默认参数,function函数中y就是默认参数,带有一个默认值为0,当只传入一个参数时,默认参数y默认值为0,所以计算总和时,并不影响一个参数的结果。但当我们传入两个参数时,默认参数的默认值被改变,就可以计算两个数总和的结果。

    • 设置默认参数时需要注意:

      1. 必选参数(位置参数)在前,默认参数在后,否则程序会出错。
      2. 当函数有多个参数时,传入的参数实时变化比较大的放在前面,变化小的放在后面。变化小的参数也可以作为默认参数。
    • 使用默认参数,我们可以在函数外控制参数的传递,降低了函数调用的难度,当我们需要使用比较复杂的函数参数传递时,我们也可以增加传入参数的数量。这可以实现一个函数实现多功能处理。

    • 定义默认参数时,必须指向不可变对象。否则每次进入函数后,可变对象的值可能发生了改变,对于下一次调用该函数来说,会有影响。

    2.3 可变参数

    • 实例2.3.1:

      #!/user/bin/python
      #coding=utf-8
      #author@ zjw
      
      '''
      比较重点:直接传入一个list
      函数功能:计算传入的所有值的和
      '''
      def function1(li):
          sum = 0
          for i in li:
              sum += i
          print sum
      
      '''
      比较重点:用可变参数进行传递
      函数功能:计算传入的所有值的和
      '''
      def function2(*nums):
          sum = 0
          for i in nums:
              sum += i
          print sum
      
      if __name__ == "__main__":
          #来看一下传入参数的区别,明显用可变参数的更简便。
          function1([1, 2, 3])
          function2(1, 2, 3)
      
    • 输出:

      6

      6

    • 分析:从上面的实例我们可以看到,function2中带*号的nums就是可变参数。虽然function1和function2的功能是一样的,但function2简化了参数传入。在function2函数内部,参数nums接收到的是一个tuple

    • 注:如果想创建一个list后传入function2,则需要使用下面大的语法。

      • nums = [1, 2, 3]
      • function(*nums)
      • 其中*nums表示把nums这个list的所有参数作为可变参数传入。

    2.4 关键字参数

    • 实例2.4.1:

      #!/user/bin/python
      #coding=utf-8
      #author@ zjw
      
      #函数功能:输出传入参数
      def student(id, name, **other):
          print('id:', id, 'name', name, 'other:', other)
      
      if __name__ == "__main__":
          student('1', 'Kangkang')
          student('2', 'Maria', age = 11) #关键字参数调用,可以自定义参数和类型
      
    • 输出:

      ('id:', '1', 'name', 'Kangkang', 'other:', {})
      ('id:', '2', 'name', 'Maria', 'other:', {'age': 11})

    • 分析:student函数中的带两个*的other参数就是关键字参数。在student函数中,除了id和name参数是必选之外,其余参数可以根据需求填写,传入关键字参数的格式如上面age = 11那样,需要一个参数+等号+参数值。传入到关键字参数后,会被封装成一个dict,并输出出来。

    • 注:同理如上面的可变参数,当我们先创建了一个dict,后面想要通过关键字参数传入时,我们需要使用如下语法:

      • other = {'age' : 12, 'city' : 'Xiamen'}
      • student('3', 'Jane', **other) #函数调用
      • 分析:其中**other表示吧other这个dict中所有的key-value用关键字参数的形式传入到函数中。

    2.5 命名关键字参数

    • 用途:用来限制关键字参数的名字。

    • 上面的实例中,关键字参数的键值名可以随意命名,且个数可以随意控制,但是当我们想要限制键值名和变量的数量时,我们可以用命名关键字参数。

    • 这里给出上面函数改进后的封装方式:

      • def student(id, name, *, age, city):
            print(id, name, age, city)
        
      • 其中*作为一种特殊的分隔符,*号后面的参数就是命名关键字参数,可以选填。

    • 如果函数中间已经定义了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

      • def student(id, name, *args, age, city):
        	print(id, name, args, age, city)
        
  • 相关阅读:
    软件测试模型
    功能测试用例是怎么写
    Web测试需要注意的点
    WEB测试方法总结-笔记
    安全性测试的测试点
    删除功能测试的测试点
    压力测试的测试点
    异常测试的测试点
    解决Plugin org.apache.maven.plugins:maven-archetype-plugin:RELEASE or one of its dependencies...
    中国联通:本公司将继续在纽约证交所上市交易
  • 原文地址:https://www.cnblogs.com/vanishzeng/p/12190853.html
Copyright © 2011-2022 走看看