• Python_函数_复习_习题_24


    # 函数
    # 可读性强 复用性强
    # def 函数名():
    # 函数体
    #return 返回值
    # 所有的函数 只定义不调用就一定不执行
    #先定义后调用

    #函数名() #不接收返回值
    #返回值 = 函数名() #接收返回值

    #返回值
    # 没有返回值 :默认返回None
    # 不写return:函数内的代码执行完毕自动结束
    # 只写return:结束一个函数
    # return None
    # 返回一个值 :结束了函数且返回一个值,可以是任意的值
    # 返回多个值 : 多个值之间用逗号隔开,接收的时候可以用一个变量接收(元组),也可以用等量的多个变量接收

    # def f(a):
    # return '栗子'
    #
    # ret = f('苹果')
    # print(f('苹果'))

    #参数
    #形参 定义函数的时候
    # 位置参数 :必须传
    # *args :动态参数 可以接收任意多个按位置传入的参数
    # 默认参数 : 可以不传 —— 陷阱
    # **kwargs : 动态参数 可以接受任意多个按关键字传入的参数
    #实参 调用函数的时候
    # 按照位置传参数
    # 按照关键字传参数
    # 可以混用 位置参数必须在关键字传参之前
    # 不能对一个参数重复赋值

    # def 娃哈哈(*args):
    # print(args)
    #
    # # 娃哈哈(1,2,3,4)
    # l = [1,2,3,4]
    # 娃哈哈(*l)






    默认参数的陷阱

    def qqxing(l = []):
        l.append(1)
        print(l)
    
    qqxing()     #[1]
    qqxing([])   #[1]
    qqxing()     #[1,1]
    qqxing()     #[1, 1, 1]
    
    # 如果默认参数的值是一个可变数据类型,
    # 那么每一次调用函数的时候,
    # 如果不传值就公用这个数据类型的资源
    
    
    
    def qqxing(l = {}):
        # l.append(1)
        l['k'] = 'v'
        print(l)
    
    qqxing()     #{'k': 'v'}
    qqxing()     #{'k': 'v'}
    qqxing()     #{'k': 'v'}
    
    
    def qqxing(k,l = {}):
        # l.append(1)
        l[k] = 'v'
        print(l)
    
    qqxing(1)     #{1: 'v'}
    qqxing(2)     #{1: 'v', 2: 'v'}
    qqxing(3)     #{1: 'v', 2: 'v', 3: 'v'}
    
    def qqxing(k, l = {}):
        # l.append(1)
        l[k] = 'v'
        print(l)
    
    qqxing(1)          #{1: 'v'}
    qqxing(2, l={})    #{2: 'v'}
    qqxing(3)          #{1: 'v', 3: 'v'}

    习题

    #2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
    def func(l):
        return l[1::2]  #切片
    print(func([1,2,3,4,5,6]))
    
    #或者
    def func(l):
        a = []
        l = l[1::2]
        for i in l:
            a.append(i)
        return a
    print(func([1,2,3,4,5,6]))
    
    
    
    # 3、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。
    def func(x):
        return len(x)>5
    if func('abcd'):
        print('长度确实大于5')
    
    # 4、写函数,检查传入列表的长度,如果大于2,
    #那么仅保留前两个长度的内容,并将新内容返回给调用者。
    def func(l):
        return l[:2]
    
    print(func([1,2,3,4]))
    
    # 5、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。
    def func(s):   #'skghfoiw8qpeuqkd'
        # num=0
        # alpha=0
        # space=0
        # other=0
    
        dic = {'num':0,'alpha':0,'space':0,'other':0}
        for i in s:
            if i.isdigit(): # isdigit() 方法检测字符串是否只由数字组成。
                dic['num']+=1
            elif i.isalpha(): # isalpha() 方法检测字符串是否只由字母组成。
                dic['alpha'] += 1
            elif i.isspace(): # isspace() 方法检测字符串是否只由空格组成。
                dic['space'] += 1
            else:
                dic['other'] += 1
        return dic
    print(func('+0-0skahe817jashf wet1'))
    
    # 6、写函数,检查用户传入的对象(字符串、列表、元组)
    #的每一个元素是否含有空内容,并返回结果。
    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([]))
    
    #7、写函数,检查传入字典的每一个value的长度,如果大于2,
    #那么仅保留前两个长度的内容,并将新内容返回给调用者。
    #    dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    #    PS:字典中的value只能是字符串或列表
    def func(dic):
        for k in dic:
            if len(dic[k]) > 2:
                dic[k] = dic[k][:2]
        return dic
    dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    print(func(dic))
    
    # 8、写函数,接收两个数字参数,返回比较大的那个数字。
    def func(a,b):
        if a>b:
            return a
        else:
            return b
    print(func(1,5))
    
    def func(a,b):
        return a if a > b else b
    print(func(5,1))
    
    # 三元运算
    a = 1
    b = 5
    c = a if a>b else b   #三元运算
    print(c)
    
    # 变量 = 条件返回True的结果 if 条件 else 条件返回False的结果
    #必须要有结果
    #必须要有if和else
    #只能是简单的情况
    
    # 9、写函数,用户传入修改的文件名,与要修改的内容,
    # 执行函数,完成整个文件的批量修改操作(进阶)。
    def func(filename,old,new):
        with open(filename, encoding='utf-8') as f, open('%s.bak'%filename, 'w', encoding='utf-8') as f2:
            for line in f:
                if old in line:  # 班主任:星儿
                    line = line.replace(old,new)
                # 写文件
                f2.write(line)  # 小护士:金老板
    
        import os
        os.remove(filename)  # 删除文件
        os.rename('%s.bak'%filename, filename)  # 重命名文件
  • 相关阅读:
    ubuntu下cmake自动化编译的一个例子
    KL变换和PCA的数学推导
    tensorflow c++ API加载.pb模型文件并预测图片
    tensorflow c++接口的编译安装与一些问题记录
    深度增强学习--总结下吧
    深度增强学习--DPPO
    深度增强学习--DDPG
    深度增强学习--A3C
    tomcat远程调试
    springboot问题记录
  • 原文地址:https://www.cnblogs.com/LXL616/p/10659010.html
Copyright © 2020-2023  润新知