python3——函数

常用函数举例

#help()函数接收一个函数名,接着会打印函数声明(定义)
help(print)

#print()用来打印内容
print("hello world") # hello world

#len()用来统计字符串的字符数(注意不是字节数),或者统计list、tuple、set、dict的元素个数
print(len("你好"))   # 2

#round()用来指定保留一个浮点数中小数点后几位
print(round(1.23456, 3))  # 1.235

#abs()返回一个数字的绝对值
print(abs(-1234.567))   # 1234.567

  

 

查看内置函数的声明

  使用help(def)即可,在命令行中或者在代码中执行,比如查看print()函数的使用方法,那么就可以执行help(print),注意要查询的函数名不加括号:

>>> help(print)
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

  如果执行help(print()),那么就会首先执行print(),打印一个空字符串,最终,执行的是help(""),查看的就不是print的声明了。

 

 

定义函数的基本格式

def funcname(parameter_list):
    pass

  注意:

    1、定义函数时,parameter_list(参数列表——形参)如果没有时,可以省略。

    2、函数体中可以有return返回结果,当然也可以不返回(省略return),省略return时,默认返回值是None。 

    3、函数要先定义,再调用;如果函数定义在调用的后面,那么就会报错。

 

 

形参

  形参就是我们在定义函数时,定义函数需要接收的参数。比如下面这个函数,用来求长方体的体积,接收3个参数:width,length,height。

def getVolume(length, width, height):
    data = {
        "length" : length,
        "width"  : width,
        "height" : height,
        "volume" : length * width * height
    }
    print(data)

getVolume(5, 6, 7)
# {'length': 5, 'width': 6, 'height': 7, 'volume': 210}

  注意,上面这段代码中,我们在调用getVolume函数的时候,传递的三个参数5,6,7会按照函数定义时的顺序,分别赋值给length,width,height。

  但是,有时候,我们会忘记定义getVolume函数时参数的顺序,这个时候,想要准确无误的调用函数,并且求得结果,要么查看函数定义,要么使用关键字参数。注意,虽然在这个函数中,三个参数的顺序颠倒是没有太大的问题的,但是,如果是一个比较复杂的函数,参数的顺序(也就决定了每一个参数的值)非常重要,决定了函数能否正常处理问题。

 

 

关键字参数

  关键字参数,并不是在定义的时候指定,而是在调用函数的时候指定传递给函数,这样的话,可以不用遵循定义函数的形参列表顺序,而是可以自己指定顺序,但是注意参数的个数仍旧要符合函数定义时的参数个数。

  以上面getVolume函数为例,不修改函数定义,在调用的时候使用关键字参数。

def getVolume(length, width, height):
    data = {
        "length" : length,
        "width"  : width,
        "height" : height,
        "volume" : length * width * height
    }
    print(data)

# 默认的调用方式
getVolume(5, 6, 7)
# {'length': 5, 'width': 6, 'height': 7, 'volume': 210}

# 这里虽然使用了关键字参数,但是关键字参数的顺序和定义函数时的顺序相同
# 所以等价于上面默认的调用方式
getVolume(length=5, width=6, height=7)
# {'length': 5, 'width': 6, 'height': 7, 'volume': 210}

# 注意,这里的关键字参数顺序和定义函数时的参数顺序不同
# 但是对应的参数值却是正确的
getVolume(width=5, height=6, length=7)
# {'length': 7, 'width': 5, 'height': 6, 'volume': 210}

# 可以先传入一个参数,该参数会默认赋值给定义函数时的第一个参数
# 之后可以再使用关键字参数
getVolume(5, height=6, width=7)
# {'length': 5, 'width': 7, 'height': 6, 'volume': 210}

# 注意,下面这种做法是错误的
# 规则:在关键字参数后面的所有参数,都必须是关键字参数
# getVolume(5, height=6, 7)

  使用关键字参数,需要注意两点:

  1、再次强调一下,关键字参数,只是在调用的时候有区别,在定义的时候不需要做任何改变。

  2、在调用时,如果出现了关键字参数,那么之后的参数也必须是关键字参数。这一点,可以看上面这个代码最后一个错误调用。

 

 

指定函数默认参数

  仍旧以上面的getVolume为例,假设,我们在定义函数的时候,为height设置一个默认值,该默认值的作用:

  1、如果在调用函数时传入了height值,那么传入的值就会替换掉默认值。

  2、如果在调用函数时没有传入height(只传入了length和width),那么就是用默认的height值。

  指定函数默认值,是在函数定义时进行操作。

# 参数height的默认值为9
def getWeight(length, width, height, density=2):
    data = {
        "length" : length,
        "width"  : width,
        "height" : height,
        "density": density,
        "wight" : length * width * height * density
    }
    print(data)

# 传递4个参数(也就是说传入了density值,会忽略掉density的默认值)
getWeight(5, 6, 7, 4)
# {'length': 5, 'width': 6, 'height': 7, 'density': 4, 'wight': 840}

# 传递3个参数(也就是说没有传入density值,那么就会使用density的默认值)
getWeight(5, 6, 7)
# {'length': 5, 'width': 6, 'height': 7, 'density': 2, 'wight': 420}

# 同样也可以在这里使用关键字参数
getWeight(density=3, height=5, width=6, length=7)
# {'length': 5, 'width': 6, 'height': 7, 'density': 4, 'wight': 840}

getWeight(height=5, width=6, length=7)
# {'length': 5, 'width': 6, 'height': 7, 'density': 2, 'wight': 420}

 

  定义函数使用默认参数值时,需要注意:从左往右开始,遇到的第一个有默认值的参数,之后,每一个参数都必须有默认值。

  实例:如果定义函数时,如果有A,B,C,D四个参数(顺序也是这样排列),如果C是第一个有默认值的参数,那么D也必须有默认值,如果D没有默认值,就会出错,而A和B没有默认值,不会出错。 如果想要C有默认值,D不设默认值,可以将C和D交换顺序,比如A,B,D,C,这样C有默认值,D没默认值,但是不会出错。

  程序可以表示如下:

# 正确
def getWeight(length, width, height=4, density=2):
    pass

# 错误
def getWeight(length, width, height=4, density):
    pass

  

 

可变参数

  有些时候,我们不确定调用函数时,传入的参数,比如有一个求和函数sum(),功能就是求和,可以接受任意多个参数,假设有100个,那么在定义sum函数时,写100个形参,这是不现实的。python提供了一种方式:可变参数。

  可变参数的形式很特别,*args,args只是大家通用的名称,也可以换为其他名称,比如命名为*params,*args或者*param表示可变参数,类型是一个tuple。

def multi_args(*args):
    print(type(args))
    print(args)

multi_args(9,8,7,6,5,4,3,2,1)
# <class 'tuple'>
# (9, 8, 7, 6, 5, 4, 3, 2, 1)

  

  

posted @ 2018-10-07 10:56  寻觅beyond  阅读(238)  评论(0)    收藏  举报
返回顶部