Python学习笔记(二)—— 函数


1.定义函数

    定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。例:

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

空函数:

def nop():
    pass

pass语句什么也不做,可做为占位符

2.函数参数

  A. 默认参数

  参数设置支持默认参数,即在调用函数的时候,如果没有输入有默认值的参数,函数依旧可以执行。

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

如上面定义的函数,如果调用时写 power(3), 默认做的是平方。

注意事项:

一 必选参数在前,默认参数在后

二 如何设置默认参数。

三 默认参数必须指向不变对象!

下面举例说明第三点

在设置默认参数的时候,要注意,如果默认值为L=[],函数内又改变了它的值,如在尾部添加END,那么下次调用,会在这基础上再添加END,就有bug。例:

def add_end(L=[]):
    L.append('END')
    return L
>>> add_end()
['END']
>>> add_end()
['END', 'END']

因为Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

改进:

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L

B. 可变参数

如果要想参数个数可以改变,第一想法是参数是list或tuple类型,则调用函数的时候,需要以list或tuple的形式传入。

def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
>>> calc([1, 2, 3])
14
>>> calc((1, 3, 5, 7))
84

利用可变参数就可以直接将数字传入,具体改进为,在参数前加 * ,例子见下:

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
>>> calc(1, 2) 
5
>>> calc()
0

这里的调用就无需再组成list再调用,如果输入参数是列表,也无需一个一个输入,可以这样调用:

>>> nums = [1, 2, 3]
>>> calc(*nums)
14

C. 关键字参数

关键字参数允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
函数内对kw进行改动,不会改变函数外的。


命名关键字参数

如果要限制关键字参数的名字,就可以用命名关键字参数,
命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数

def person(name, age, *, city, job):
    print(name, age, city, job)
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer
调用时,命名关键字参数必须传入参数名。即city,job

D. 参数类型检查:

可以在函数内对参数类型进行检查,以便出错时候方便查看出错信息。

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x
数据类型检查可以用内置函数 isinstance()

函数介绍:

    isinstance(obj, class_or_tuple, /)

    Return whether an object is an instance of a class or of a subclass thereof.
    A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
    check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)

    or ...`` etc.

3.调用函数

  Tip: 可以使用 help(函数名) 看帮助信息。

 部分常用函数:abs();  max();  hex();  int();类型转换


—————————————————

本学习笔记很多例子引用于廖雪峰的网站。

猜你喜欢

转载自blog.csdn.net/qq_36999901/article/details/80227000