二、函数基础

一、函数分类

  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'}

 

 

 


 

posted @ 2019-01-12 14:43  猪光宝气  阅读(190)  评论(0编辑  收藏  举报