• 二、函数基础


    一、函数分类

      1. 内置函数:

        python解释器已经定义好了的函数,拿来即用

      2. 自定义函数:

                 def 函数名(参数1,参数2,参数3,...):
                      '''注释'''
                函数体
                return 返回的值
    

     二、 自定义函数需先定义,再使用

        函数定义后会检测语法错误,逻辑错误只有被调用后才能检测

    三、 函数调用

      1. 函数调用方式

        函数名()

      2. 函数返回值

        没有return------------>返回None

        return1个值---------->返回一个值

        return多个值--------->返回一个元组

      3. 函数调用的三种形式

        语句形式----------------------->foo()

        表达式形式-------------------->6*len(x)

        作为另一个函数的参数------>len(upper(x))

    四、形参和实参

      1. 形参即变量名

      2. 实参即变量值

      3. 位置参数

        按照从左到右的顺序定义的参数,实参在传给形参时,也必须按照顺序传递 

        def aaa(x,y,z)
            #计算3个参数的和
            a=x+y+z
            return(a)
    
        res=aaa(1,2,3)
        #调用时1赋值给x,2赋值给y,3赋值给z

      4. 关键字参数

        按照x=2,y=3,z=4的形式给形参传值

      5. 默认参数

        形参在定义时,已经给了一个参数,调用时,若不给这个参数赋值,则使用默认参数

      6. 可变长参数

        指实参的个数不固定

        针对可变长参数,使用 *args 存放元组形式的参数, **kwargs 存放字典形式的参数

    def foo(x,y,*args):
        print(x,y)
        print(args)
    print(foo(1,2,3,4,5))
    
    运行结果:
    1,23,4,5)          #元组形式传入的实参
    None              #没有定义函数返回值,默认返回None
    def foo1(x,y,*args):
        print(args)
        print(len(args))
    
    foo1(1,2,*(3,4,5))      #依次拿出元组(3,4,5)的元素,组成元组args的元素
    
    运行
    (3,4,5)
    3
    
    ########## def foo(x,y,z): print(x,y,z) foo(*[1,2,3]) print(*[1,2,3]) 1 2 3 1 2 3

    ########## def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(1,y=2,a=1,b=2,c=3) 1 2 {'b':2,'c':3,'a':1}

    ########## def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(1,y=2,**{'a':1,'b':2,'c':3}) 1 2 {'b':2,'c':3,'a':1}

    ########## def foo(x,y,z): print(x,y,z) foo(**{'z':1,'x':2,'y':3}) 2 3 1

    ########## def foo(x,y): print(x,y) def wrapper(*args,**kwargs): print('====>') foo(*args,**kwargs) wrapper((66,77),{'a':1,'b':2,'c':3}) (66,77),{'a':1,'b':2,'c':3}

    ########## def aaa(*args,**kwargs): print(args) print(kwargs) print(len(args),len(kwargs)) aaa(*(66,77),**{'a':1,'b':2,'c':3}) #args=(66,77) kwargs={'a':1,'b':2,'c':3} aaa((66,77),{'a':1,'b':2,'c':3}) #args=(66,77),{'a':1,'b':2,'c':3} kwargs为空

    ########## def foo(x,y,*args,a=1,b,**kwargs): print(x,y) print(args) print(a) print(b) print(kwargs) foo(1,2,3,4,5,b=3,c=4,d=5) 1 2 (3, 4, 5) 1 3 {'c': 4, 'd': 5}

    五、练习题

    1、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数

    def  aaa(x):
        num=0
        string=0
        space=0
        others=0
        for i in x:
            if i.isdigit():
                num+=1
            elif i.isalpha():
                string+=1
            elif i.isspace():
                space+=1
            else:
                others+=1
        print('%s这个字符串中,有数字%s个,字母%s个,空格%s个,其他%s个'%(x,num,string,space,others))
    aaa('dgajg sdjigaj s3438ng %%#%')

    2、 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5

    def aaa(x):
        if len(x)>5:
            print('%s的长度大于5,长度为%s'%(x,len(x)))
        else:
            print('%s的长度不大于5,长度为%s'%(x,len(x)))
    aaa((1,2,3,4,5,6,7))
    aaa([1,2,3,4,5,6,7])
    aaa('sfhusgange')

    (1,2,3,4,5,6,7)的长度大于5,长度为7
    [1,2,3,4,5,6,7]的长度大于5,长度为7
    sfhusgange的长度大于5,长度为10
     
     

     3、 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者

    def aaa(x):
        if len(x)>2:
            x=x[0:2]
        print(x)
        return(x)
    aaa(['aaa'])
    aaa(['aaa','bbb','ccc','ddd'])
    
    ['aaa']
    ['aaa','bbb']

     4、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者

    def aaa(x):
        return x[1::2]
    print(aaa([1,2,3,4,5,6,7,8,9]))

    5、写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者

    def aaa(x):
        d={}
        for k,v in x.items():
            if len(v)>2:
                d[k]=v[0:2]
            else:
                d[k]=v
        return d
    print(aaa({'k1':'abcdef','k2':[1,2,3,4],'k3':('a','b','c'),'k4':'a'}))
    
    {'k1':'ab','k2':[1,2],'k3':('a','b'),'k4':'a'}
    
    
    
  • 相关阅读:
    ES6_函数方法
    Node_初步了解(3)回调,作用域,上下文
    ES6_入门(4)_数组的解构赋值
    ES6_入门(3)_顶层对象属性
    ES6_入门(2)_const命令
    ES6_入门(1)_let命令
    Node_初步了解(2)
    Node_初步了解(1)
    树的基本知识
    JS_高程5.引用类型(6)Array类型的位置方法,迭代方法,归并方法
  • 原文地址:https://www.cnblogs.com/haoy/p/10252051.html
Copyright © 2020-2023  润新知