zoukankan      html  css  js  c++  java
  • [ Python入门教程 ] Python函数定义和使用

      函数是一段可以重复多次调用的代码,通过输入的参数值,返回需要的结果。通过使用函数,可以提高代码的重复利用率。本文主要介绍Python函数的定义、调用和函数参数设置方法。

    函数的定义

      Python函数定义非常简单,使用关键字def定义。函数必须先定义后使用。Python函数定义的格式如下所示:

    def 函数名(参数1,参数2,...):
        语句块
        return [表达式]

      函数名可以是字母、数字或下划线组成的字符串,但是不能以数字开头。函数的参数放在一对圆括号中。参数的个数可以有一个或多个,参数之间用逗号隔开。括号后面以冒号结束,冒号下面就是函数的主体。函数的返回使用return语句,return [表达式]结束函数。如果return后面不带表达式,表示返回None。实例如下:

    def power(x, n):
        s = 1
        while n > 0:
            n = n - 1
            s = s * x
        return s

    函数调用

      函数调用采用函数名加一对圆括号的方式,圆括号内的参数是传递给函数的具体指。函数调用格式如下:

     函数名(实参1,实参2...)

      实际参数必须与形式参数一一对应,否则将报错。具有默认值的参数例外。上述power()函数的调用方法如下:

    power(3,2)

    函数的参数

      函数定义的时参数名和位置就已经确定。使用函数时只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

    (1)位置参数

      位置参数指的是调用函数时根据函数定义的参数位置来传递参数。上述power()函数的x,n参数就表示参数。调用时可以直接通过传参嗲用。函数调用时传入参数个数必须与位置参数个数一致,否则会报错。实例如下:

    # -*- coding:utf-8 -*- 
    
    def power(x, n):
        s = 1
        while n > 0:
            n = n - 1
            s = s * x
        return s
    
    print "power(3, 2) = ", power(3, 2) #传入参数个数与定义的位置参数一致。
    print "power(3) = ", power(3) #传入参数个数与定义的位置参数不一致。报错"TypeError: power() takes exactly 2 arguments (1 given)"

    (2)默认参数

      函数的参数支持默认值。当某个参数没有传递实际的值时,函数将使用默认参数计算。特别注意的是,在函数定义和调用时,所有位置参数必须出现在默认参数前。修改power函数代码如下:

    def power(x, n=2):
        s = 1
        while n > 0:
            n = n - 1
            s = s * x
        return s
    
    print "power(3) = ", power(3) #不带参数n调用函数,n赋默认值为2
    print "power(3, 2) = ", power(3, 2) #参数n指定值为2调用函数
    print "power(3, 3) = ", power(3, 3) #参数n指定值为3调用函数

     代码运行结果如下:

    power(3) =  9
    power(3, 2) =  9
    power(3, 3) =  27

    (3)可变参数

      可变参数就是值允许调用函数时传入参数个数是可变的,可以是1个,2个或者多个,这些可变参数在函数调用时自动组装为一个tuple。因此在函数内部获取可变参数时,参数接收到的是一个元组。可变参数在函数定义时的格式如下:

    def 函数名(*args):
        ....
        return 变量或表达式

      可变参数在函数定义时对形参前加一个星号*,如*args。实例如下:

    def fun1(x,y,*args):
        print "x = ", x
        print "y = ", y
        print "type(*args) = ", type(args) #可变参数args在函数内部获取到的类型
        print "args = ", args #可变参数args获取的传入的值
        
        sum = 0
        for i in args:
            sum += i
        print "sum = ", sum
    
    fun1('A', 'B', 1, 2, 3, 4)

     代码运行输出结果如下:

    x =  A
    y =  B
    type(*args) =  <type 'tuple'>
    args =  (1, 2, 3, 4)
    sum =  10

      通过上述实例,我们知道。可变参数args可以传入任意数量参数。函数内部获取可变参数的类型为tuple。

    (4)关键参数

      关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。这是不同于可变参数的地方。函数定义时使用关键参数的格式如下:

    def 函数名(**kw):
        ....
        return 变量或表达式

      关键参数在函数定义时对形参前加两个星号**,如**kw。实例如下:

    def fun1(x,y,**kw):
        print "x = ", x
        print "y = ", y
        print "type(**kw) = ", type(kw)
        print "kw = ", kw
        
        for key, value in kw.items():
            print key, value
    
    fun1('A', 'B', num1=1, num2=2, num3=3, num4=4)

     代码运行结果如下:

    x =  A
    y =  B
    type(**kw) =  <type 'dict'>
    kw =  {'num4': 4, 'num1': 1, 'num2': 2, 'num3': 3}
    num4 4
    num1 1
    num2 2
    num3 3

      从上述结果可以知道,函数内部获取的关键参数的类型为字典(dict),使用时以字典形式操作即可。

    函数的嵌套

     函数的嵌套是指在函数的内部调用其他函数。C、C++只允许在函数体内部嵌套。而Python不仅支持函数体内嵌套,还支持函数定义的嵌套。通过2个实例分别查看,如下

    (1)函数体内嵌套

    def sum(a, b):
        return a + b
    
    def sub(a, b):
        return a - b
    
    def fun1():
        x=1
        y=2
        m = 2
        n = 4
        return sum(x, y) * sub(m, n)
    
    print fun1()

    (2)函数定义的嵌套。不推荐使用,代码可读性、可维护都不好。

    def fun1():
        x=1
        y=2
        m = 2
        n = 4
        def sum(a, b):
            return a + b
    
        def sub(a, b):
            return a - b
        return sum(x, y) * sub(m, n)
    
    print fun1()

    匿名函数lambda

      lambda函数用于创建一个匿名函数,函数名未和标识符进行绑定。使用lambda函数可以返回一些简单的运算结果。lambda函数的格式如下所示:

    lambda 变量1,变量2,...: 表达式

      其中,变量列表用于表达式的计算。lambda属于函数,因此变量列表后需要一个冒号。通常把lambda赋值给一个变量,变量就可以作为函数使用。另外,lambda中只能使用表达式,不能使用判断、循环等多重语句。常用实例如下:

    >>> list1 = [3,5,-4,-1,0,-2,-6]
    >>> sorted(list1, key=lambda x: abs(x))

     

  • 相关阅读:
    python中的编码问题
    CVPR2018 Tutorial 之 Visual Recognition and Beyond
    hdu 1376 Octal Fractions
    hdu 1329 Hanoi Tower Troubles Again!
    hdu 1309 Loansome Car Buyer
    hdu 1333 Smith Numbers
    hdu 1288 Hat's Tea
    hdu 1284 钱币兑换问题
    hdu 1275 两车追及或相遇问题
    hdu 1270 小希的数表
  • 原文地址:https://www.cnblogs.com/linyfeng/p/9142503.html
Copyright © 2011-2022 走看看