zoukankan      html  css  js  c++  java
  • 函数

    input--out---correction(输入输出正确)
    ***第一模块回顾
        byte类型:数据存到硬盘,硬盘只能存储2进制。
                gbk/utf-8--->>decode(解码)--->>unicode
                Unicode--->>encode(编码)--->>gbk/utf-8(2进制)
                文字--》utf-8/gbk-->>2进制
                图片--》jpg/png-->>2进制
                音乐--》mp3/wav-->>2进制
                视频--》mp4/mov-->>2进制
            bytes类型,以16进制形式表示,2个16进制数(如0x e 5)构成一个byte(字节),
            以‘b’来标识
        1byte = 8bit
        python3文件的默认编码是utf-8(pycharm默认加载文件都是用utf-8编码)
        eg:f = open('bytes.txt','w',encoding='gbk')  # 自己指定编码
        eg:f = open('bytes.txt','wb')  # 以2进制模式就不用指定编码
                
            ‘wb’-----二进制写(必须是二进制)
            ‘w’------文件写(必须是字符串)
                
                python按你指定的编码来编成2进制
                
        总结 : 1,字符存硬盘 要变成bytes
                2,网络传输  字符要变成bytes类型
                
    **深浅copy
        dict,list,set,(和变量赋值指向不一样)
        s = {'name' : 'alex', .....}
        s2 = s ,此时s2和s是共享 同一份数据的(指向同一个内存地址(杯子)),
        s,s2改dict,list,set里面的任一元素会同时改。
        
        深浅copy(借助copy模块)
        s.copy,浅copy(只复制第一层)复制一份数据,
        只能改第一层的(第一层独立),里面的嵌套断线的数据改了会同时变
        
        s.deepcopy,深copy,所有层都完全独立。
        
    **编码转换
        >>> s
        '你好未来'
        >>> s.encode('utf-8')  #编码,以utf-8编码成2进制
        b'xe4(2个16进制数)xbdxa0xe5xa5xbdxe6x9cxaaxe6x9dxa5'#12个字节
        >>> s_utf8 = s.encode('utf-8')
        >>> s_utf8
        b'xe4xbdxa0xe5xa5xbdxe6x9cxaaxe6x9dxa5'

        >>> s_utf8.decode('utf-8')  #以utf-8格式解码,也可以不写,就会以python3默认的utf-8
        '你好未来'
        
    **编码与解码(以utf-8格式编码的就必须用utf-8解码,不然会报错)
        
        gbk/utf-8--->>decode(解码)--->>unicode
        Unicode--->>encode(编码)--->>gbk/utf-8(2进制)
        s.encode('utf-8')-->>以utf-8格式编码成2进制
        s.dncode('utf-8')-->>从2进制解码成unicode str
        
    **编码的转换:把文字从一种编码转成另外一种,比如,从gbk转成utf-8
            Unicode:万国码,跟所有的编码之间有映射关系
                >>> s
                '你好未来'
                >>> s.encode('utf-8')
                b'xe4xbdxa0xe5xa5xbdxe6x9cxaaxe6x9dxa5'
                >>> s
                '你好未来'
                >>> s.encode('gbk')
                b'xc4xe3xbaxc3xcexb4xc0xb4'
                >>> s_gbk = s.encode('gbk')
                >>> s_gbk.decode('gbk')
                '你好未来'
                >>> s_gbk.decode('gbk').encode('utf-8')  #gbk转换为utf-8
                b'xe4xbdxa0xe5xa5xbdxe6x9cxaaxe6x9dxa5'
    2进制模式:rb  wb  ab
    r 文本模式,把2进制解码成str,Unicode



    **函数
        特性:1,减少重复  2,使程序易扩展  3, 使程序易维护

        返回值(return),意味着函数的中止
        
        def register(name, age, major, country = 'CN',*args,**kwargs):  # 这里country是默认参数
            info = """
            --------你的注册信息---------
            name:  %s
            age:  %s
            major:  %s
            country:  %s
            """ % (name,age,major, country)
            print(info)
        
        register('alex', 22, 'cs')
        register('al', 22, 'math')
        register('ax', 22, 'us', 'US')
        
        函数的参数: 形参和实参
        
        函数参数的优先级:位置参数  >  默认参数/关键参数
        
        
                    函数外部的代码要想获取函数的执行结果,就可以在函数里用return
                    语句把结果返回。
                    def stu_register(name, age, course = 'PY', country = 'CN'):
                        print('-----注册学生信息-----‘)
                        print('Name:', name)
                        print('Age:', age)
                        print('Country:', country)
                        print('Course:', course)
                        if age > 22:
                            return False
                        else:
                            return True
                    registriation_status = stu_register('alex', 22, course='PY', 'CN')
                    if registriation_status:
                        print('注册成功’)
                    else:
                        print('too old to be a student.')
                    
    *注意:1.函数在执行过程中,只要遇到return语句,就会停止执行并返回结果,所以
        也可以理解为return语句代表函数的结束。
        2.如果未在函数中指定return,那这个函数的返回值为None
        
        函数返回多个值
            def test():
                return 1,2,3,4,5   #  返回多个值会以tuple包起来
            print(test())


    **全局变量和局部变量    (locals()方法,打印所有的局部变量
                          globals()方法,打印所有的全局变量)(从局部变量》嵌套变量》全局变量)
            name = 'alex'  #  全局变量
            def change():
                name = '金角大王'  #局部变量
                global name #  在函数内部声明(创建)一个全局变量
                print(name)
                print(locals())
                print(globals())
            
            change()
            print(name)
            
    **函数传递列表,字典,集合时发生的现象        
                d = {'name':'alex', 'age':28, 'hobby':'dabaojian'}
                l = ['rebeeca', 'katrina', 'rachel']
                        
                def change_data(info, girls):
                    info['hobby'] = 'study'
                    girls.append('xiaoyun')
                change_data(d,l)
                print(d,l)##  dic,li 这个内存地址没有变,只是里面的元素变了

                结果为d 为{'name': 'alex', 'age': 22, 'hobbie': 'study'}
                l为['Rebeeca', 'Katrina', 'Rachel', 'xiaoyun']

    **嵌套函数,匿名函数和高阶函数    
        嵌套函数        name = '小猿圈'
                        def change():
                            # name = '小猿圈,自学编程'
                            def change2():
                                #global name 如果声明了这句,下面的name改的是最外层的全局变量
                                # name = '小猿圈,自学编程,不要钱'
                                print('第3层打印', name)
                            change2()  # 调用内层函数
                            print('第2层打印', name)
                        change()
                        print('最外层打印',name)
                        
        匿名函数
            c = lambda x,y:x**y
            print(c(2,8))
        与下面的代码等价:
            def calc(x, y):
                return x**y
            print(calc(2, 8))
        
        
                例子:    def calc(x):
                        return x**2
                    #res = map(calc, [1,2,3,4,5,6])
                    res = map(lambda x:x**2,[1,2,3,4,5,6])#lambda函数中最多加一个三元运算
                    print(res)
                    for i in res:
                        print(i)
        
        高阶函数:1,接收一个或者多个函数作为输入 2,return返回另外一个函数
            def get_abs(n):
                if n < 0:
                    n = int(str(n).strip('-'))
                return n
            def add(x,y,f):
                return f(x) + f(y)
            res = add(3, -6, get_abs)
            print(res)
            
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    

























  • 相关阅读:
    Ant Design Pro:Layout 组件——嵌套布局
    React实战之将数据库返回的时间转换为几分钟前、几小时前、几天前的形式。
    React实战之Ant Design—Upload上传_附件上传
    React实战之60s倒计时按钮(发送短信验证按钮)
    map方法到底会不会改变原始数组?
    【React】react开发vscode插件推荐
    【React】React 工程的 VS Code 插件及配置
    【React】react新特性实例详解(memo、lazy、suspense、hooks)
    数组常用slice和splice的区别
    【React】react-beautiful-dnd 实现组件拖拽
  • 原文地址:https://www.cnblogs.com/ylkx/p/11219678.html
Copyright © 2011-2022 走看看