zoukankan      html  css  js  c++  java
  • 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))
    
    
  • 相关阅读:
    奥展项目笔记12-批量下载文件
    深度学习笔记03-梯度下降和方向传播
    深度学习笔记02-高效计算基础(python)
    深度学习笔记01-数学基础
    解决Android Studio卡在Gradle:Resolve dependecies 'app:_debugCompile'问题
    Oracle DB , 计算各个用户/schema 的磁盘占用空间
    转载:删除github上文件夹的两种方式
    Win7无法保存共享帐户密码
    怎么做网线,网线水晶头接法和线序
    QQ Protect 的删除
  • 原文地址:https://www.cnblogs.com/P-Z-W/p/10555993.html
Copyright © 2011-2022 走看看