• 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'}))
  • 相关阅读:
    浅谈聚类算法(K-means)
    多步法求解微分方程数值解
    本学期微分方程数值解课程总结(matlab代码)
    Stone Game
    Two Sum IV
    Insert into a Binary Search Tree
    Subtree of Another Tree
    Leaf-Similar Trees
    Diameter of Binary Tree
    Counting Bits
  • 原文地址:https://www.cnblogs.com/zxw-xxcsl/p/11628712.html
Copyright © 2020-2023  润新知