25.Python基础学习笔记(函数)

1.调用函数

调用abs函数(取绝对值,有且仅有一个参数):

>>> abs(100)
100
>>> abs(-20)
20
>>> abs(12.34)
12.34

2.定义函数

定义函数使用def语句,依次写出函数名、括号、括号中的参数、冒号,在缩进块中写函数体,用return语句返回值。

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

pass语句定义空函数:

def nop():
    pass

isinstance()对参数进行数据类型检查:

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

注意:函数执行完毕也没有return语句时,自动return None函数可以同时返回多个值,但其实就是一个tuple

3.函数的参数

(1)位置参数

  计算x的2次方的函数:

def power(x):
    return x * x

  对于power(x)函数,参数x就是一个位置参数。

若要计算x的3次方、4次方、5次方.......就需要把power(x)改为power(x,n)

(x,n这两个参数都是位置参数)

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

(2)默认参数

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

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

(3)可变参数

   在参数前加 *  在函数内部 参数numbers接收到的是一个tuple 调用该函数时 可以传入任意个参数(甚至0个)

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

如果已经有一个list或tuple 调用一个可变参数 就需要这么调用:

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

不过最好还是在list或tuple前加* 直接把list或tuple的元素变成可变参数传过去:

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

(4)关键字参数

  可变参数允许传入0个或任意个参数,在函数调用时自动组装成一个tuple(元组(1,2,3));

  关键字参数允许传入0个或任意个含参数名的参数,在函数调用时自动组装成一个dict({'Michael': 95, 'Tracy': 85})

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

函数person除了必选参数name和age之外,还接受关键字参数kw(调用时可以只传必选参数)

>>> person('Michael', 30)
name: Michael age: 30 other: {}

  **extra表示把extra这个dict的所有的key-value用关键字参数传入到**kw参数,kw将获得一个dict,对kw的改动不会影响到函数外的extra

>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

(5)命名关键字参数

若要限制关键字参数的名字  就可以用命名关键字参数(如:只接受city和job作为关键字参数):

def person(name, age, *, city, job):
    print(name, age, city, job)

命名关键字参数需要 * 分隔符 ,* 后边的参数被视为命名关键字参数

def person(name, age, *, city, job):
    print(name, age, city, job)

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

def person(name, age, *args, city, job):
    print(name, age, args, city, job)

(6)参数组合

  以 上几种参数在函数定义时可以组合使用;

  但参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

4.递归函数

函数在其内部调用自己,就是递归函数

5.总结几点:

   1. 默认参数用不可变对象

   2.   *args是可变参数,args接收的是一个tuple;

 3. **kw是关键字参数,kw接收的是一个dict。

   4. 可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))

   5.关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值