python全栈闯关--9-函数

作用

使用函数,可以提高代码的可复用性、可读性。避免重复的编写功能相同的代码。

定义

  def 函数名()

    函数体

def my_function():
    pass


def my_function(a, b, c):
    pass

调用

  函数名()

  f = 函数 名()

返回值

无返回值

  无return 函数体执行完毕,自动返回

只写returen,结束一个函数

  return None

无法返回值结束时,无论是否指定返回return,获取到的结束值都为None

一个返回值

  return 返回值

可以返回任何数据类型

只要返回数据就可以接收

如果一个函数中有多个return,只执行一个return

多个返回值

  return 返回值1,返回值2,返回值3

  用多个变量接收:有多少返回值就有多少变量接收

  用一个变量接收:得到一个元祖

函数体外,接收到的值为返回值组成的元祖,也可以跟返回值相同个数的变量接收

参数

  实参

    函数调用时的传的参数,为实参

位置参数,按照位置传递参数

关键字参数,按照关键字传递参数

位置参数和关键字参数,可以混合使用,必须先按照位置传,在按照关键字传

  不能给一个变量传多个参数

  形参

定义函数的使用,叫做形参

位置参数:必须传,有几个参数,传几个参数;

默认参数:关键字参数,参数名=‘默认的值‘

动态参数:

  参数名前加*,习惯参数名*args

  参数名前加**,习惯参数名**kwargs

顺序:位置参数,*args,默认参数,**kwargs

 

动态参数

站在形参的位置动态传递

*args: 可以接收按照位置参数传值,组成一个元祖

def func(*args):
    for i in args:
        print(i)


func(1, 2, 3, 4, 5, 6)

**kwargs: 可以按照关键传递参数的值,组成一个字典

def func(**kwargs):
    for k in kwargs.items():
        print(k)


func(a=1, b=2, c=3)

站在实参的位置动态传递

  在实参前面加*或者**,把列表或者字典打散按顺序传递

  

def func(*l):
    print(l)


func(*(1, 2, 3, 4, 5))
# 相当于:func(1, 2, 3, 4, 5)
def func(**l):
    print(l)


func(**{'a': 1, 'b': 2, 'c': 3})
# 相当于:func(a=1, b=2, c=3)

函数的注释

def func():
    '''
    这个函数实现了什么功能
    参数1:
    参数2:
    :return:是字符串或列表的长度等
    '''
    pass

参数陷阱

def bee(l=[]):
    l.append(1)  # 由于每次调用,使用的都是默认的列表,所以列表一致追加1
    print(l)


bee()  # [1]
bee()  # [1, 1]
bee()  # [1, 1, 1]
bee()  # [1, 1, 1, 1]

默认值为可变变量时,会产生参数陷阱,不指定默认参数时,多次调用,会一直使用同一个列表或者字典

def bee(k, dic={}):
    dic[k] = 1
    print(dic)


bee('a')  # {'a': 1}
bee('b')  # {'a': 1, 'b': 1}
bee('c')  # {'a': 1, 'b': 1, 'c': 1}
bee('d')  # {'a': 1, 'b': 1, 'c': 1, 'd': 1}
bee('e')  # {'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1}

作业

# 2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def func(l):
    return l[1::2]


print(func([0, 1, 2, 3, 4, 5, 6]))
# 3、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。
def func(l):
    return len(l) > 5
print(func([0, 1, 2, 3, 4, 5, 6]))
# 4、写函数,检查传入列表的长度,如果大于2,
# 那么仅保留前两个长度的内容,并将新内容返回给调用者。
def func(l):
    return l[:2]
print(func([0, 1, 2, 3, 4, 5, 6]))
# 5、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。
def func(s):
    dic = {'num': 0, 'alpha': 0, 'space': 0, 'other': 0}
    for i in s:
        if i.isdigit():
            dic['num'] += 1
        elif i.isalpha():
            dic['alpha'] += 1
        elif i.isspace():
            dic['space'] += 1
        else:
            dic['other'] += 1
    return dic


print(func('skghfoiw8qpe  uqkd@!@'))
#7、写函数,检查传入字典的每一个value的长度,如果大于2,
# 那么仅保留前两个长度的内容,并将新内容返回给调用者。
def func(s):
    for k in s:
        v = str(s[k])
        if len(v) > 2:
            s[k] = v[:2]
            if s[k].isdigit():
                s[k] = int(s[k])
    return s


print(func({'k1': 1234, 'k2': 'adfadsfasdf'}))
原文地址:https://www.cnblogs.com/zxw-xxcsl/p/11628712.html