python note 09 初识函数

1、函数

def my_len():  #自定义函数(相当于len)
    i = 0
    for k in s:
        i += 1
    print(i)
print(my_len())
#输出None,因为没有返回值

2、返回值

#返回值的3种情况
    # 没有返回值 —— 返回None
        # 不写return
        # 只写return:结束一个函数的继续
        # return None  —— 不常用
    # 返回1个值
        # 可以返回任何数据类型
        # 只要返回就可以接收到
        # 如果在一个程序中有多个return,那么只执行第一个
    # 返回多个值
        # 用多个变量接收:有多少返回值就用多少变量接收
        # 用一个变量接收: 得到的是一个元组

3、break与return的区别

#break会结束当前条件语句和循环语句返回上一层级

#return会结束函数返回此时的值,后面的不再执行

def func():
    l = ['老大','老二']
    for i in l:
        print(i)
        if i == '老大':
            return None
    print('='*10)#此处不打印
ret = func()
print(ret)
#输出 老大
#     None

 

4、形参与实参

#站在实参的角度上:
  #按照位置传参
  #按照关键字传参
  #混着用可以:但是 必须先按照位置传参,再按照关键字传参数
    # 不能给同一个变量传多个值

#站在形参的角度上
  #位置参数:必须传,且有几个参数就传几个值
  #默认参数: 可以不传,如果不传就是用默认的参数,如果传了就用传的

def classmaste(name,sex=''):
    print('%s:%s' %(name,sex))
classmaste('张三')
classmaste('张三','')
#输出
#张三:男
#张三:女

 

5、

#只有调用函数的时候
  #按照位置传 : 直接写参数的值
  #按照关键字: 关键字 = 值

#定义函数的时候:
  #位置参数 : 直接定义参数
  #默认参数,关键字参数 :参数名 = '默认的值'
  #动态参数 : 可以接受任意多个参数
    #参数名之前加*,习惯参数名args,
    #参数名之前加**,习惯参数名kwargs
  #顺序:位置参数,*args,默认参数,**kwargs

def sum(*args):
    n = 0
    for i in args:
        n+=i
    return n
print(sum(1,2)) #输出3
print(sum(1,2,3))#输出6
print(sum(1,2,3,4)) #输出10

 

def func(**kwargs):
    print(kwargs)
func(a = 1,b = 2,c =3)  #输出{'b': 2, 'a': 1, 'c': 3}
func(a = 1,b = 2)   #输出{'b': 2, 'a': 1}  
func(a = 1) #输出{'a': 1}

 

# 动态参数有两种:可以接受任意个参数
  #*args : 接收的是按照位置传参的值,组织成一个元组
  #**kwargs: 接受的是按照关键字传参的值,组织成一个字典
  #args必须在kwargs之前

def func(*args,default = 1,**kwargs):
    print(args,kwargs)

 

6、动态参数的另一种传参方式

#站在形参的角度上,给变量加上*,就是组合所有传来的值。

def func(*args):
    print(args)
func(1,2,3,4,5)

#站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散

def func(*args):
    print(args)
l = [1,2,3,4,5]
func(*l)

 

7、相关练习

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

def func(l):
    return l[1::2]
print(func([1,2,3,4,5,6,7,8]))

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

def func(x):
    if len(x) > 5:
        print("长度大于5")
    return len(x)
print(func('abcd'))

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

def func(l):
    if len(l) > 2:
        print(l[0:2])
        return l[:2]
func([2,3,4,5])

4、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。

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('+0-0skahe817jashf wet1'))

5、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。

def func(x):
    if type(x) is str and x:
        for i in x:
            if i == ' ':
                return True
    elif x and type(x) is list or type(x) is tuple:
        for i in x:
            if not i:
                return True
    elif not x:
        return True
print(func([]))

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

dic = {"k1": "v1v1", "k2": [11,22,33,44]}
def func(dic):
    for k in dic:
        if len(dic[k]) > 2:
            dic[k] = dic[k][:2]
    return dic
print(func(dic))

7、写函数,接收两个数字参数,返回比较大的那个数字。

def func(a,b):
    if a>b:
        return a
    else:
        return b
print(func(1,5))

 


posted @ 2019-03-18 23:23  P-Z-W  阅读(208)  评论(0编辑  收藏  举报