zoukankan      html  css  js  c++  java
  • 二、函数基础

    一、函数分类

      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'}
    
    
    
  • 相关阅读:
    [ERR] Node 10.211.55.8:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    PAT A1137 Final Grading (25 分)——排序
    PAT A1136 A Delayed Palindrome (20 分)——回文,大整数
    PAT A1134 Vertex Cover (25 分)——图遍历
    PAT A1133 Splitting A Linked List (25 分)——链表
    PAT A1132 Cut Integer (20 分)——数学题
    PAT A1130 Infix Expression (25 分)——中序遍历
    PAT A1142 Maximal Clique (25 分)——图
    PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
    PAT A1140 Look-and-say Sequence (20 分)——数学题
  • 原文地址:https://www.cnblogs.com/haoy/p/10252051.html
Copyright © 2011-2022 走看看