Python初级笔记

来源:互联网 发布:外星人灯光控制软件 编辑:程序博客网 时间:2024/06/14 16:27
  06.28
    1 Python中标识符有字母数字下划线;不能用数字开头,区分大小写.
        1.1 以下划线开头的标识符代表不能直接访问的类属性,需要通过类提供的借口进行访问不能用form xx import * 而导入;
        1.2 以双下划线开头的代表类的私有成员;
        1.3以双下划线开头和结尾的代表Python里特殊方法专用的标识
            如__init__()代表构造函数;
        1.4可以一行显示多条语句,用;隔开就好
    2 Python中没有大括号,靠缩进来写模块,同一模块缩进相同
    3 Python中用/将一行语句显示为多行;如果语句中有括号就不需要了
    4 Python的引号,可以使用单双三引号,三引号可以由多行组成,特定的地方被当做注释(注释也可以用'#'开头);
    5 raw_input("\n\nPress the enter key to exit.")  等待用户输入
    6 print输出是换行的如果不让换行的话需要在变量结尾加上,即可
    7 缩进相同的玉足语句构成代码块.
    8 变量无需声明,内存中创建的变量信息包括标识、名称和数据,不赋值不能使用,只分配空间,复制之后才会创建
    9 赋值 按照正常人的理解就是对的
    10 Python的标准数据类型: Numbers(数字)  String(字符串) List(列表) Tuple(元组) Dictoonary(字典)
    11 数字数据类型用于存储数值,如果改变会分配新的对象;Python支持四种不同的数字类型:int long(使用大写的L来显示长整型) float complex
    12 字符串下标从0开始; s[1,5] 包括前边界,不包括后边界;list 类似
    13 元组:不能二次赋值,相当于只读列表,使用()分割
    14 字典是无需的对象集合,通过键存取;元组和列表是通过偏移存取,使用{}包裹,由索引key和它对应的值组成;
    15 Python的数据类型转换:
                            相当于构造,用的时候查吧 不知道base是什么东西
    16 Python的位运算符:将数值全部转为二进制  & 都为1  结果是1
                                              | 一个为1 结果就是1  
                                              ^ 互异时为1
                                              ~ 取反
                                              >>   << 右移和左移  符合二进\
    17 Python的逻辑运算符: and  x  and  y   如果x为false  返回False 否则返回y的值
                           or   x  or   y   如果x非0 返回x 否则 返回y
                           not              反向
    18 Python的成员运算符: a in b   和  a not in b 返回值也是布尔值
    19 Python身份运算符:   is 和 is not  使用id()获取对象的内存地址值
    20 Python的运算符优先级
        运算符    描述
        **     指数 (最高优先级)
        ~ + -     按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
        * / % //     乘,除,取模和取整除
        + -     加法减法
        >> <<     右移,左移运算符
        &     位 'AND'
        ^ |     位运算符
        <= < > >=     比较运算符
        <> == !=     等于运算符
        = %= /= //= -= += *= **=     赋值运算符
        is is not     身份运算符
        in not in     成员运算符
        not or and     逻辑运算符
    21 Python会为每个出现的对象分配内存,哪怕值完全相同   较小的int值类似于java 会只分配一次
    22.使用def定义函数,不需要返回值,其他格式和java类似
    23. 在python中,strings,tuples,和numbers是不可更改的对象,而list,dict等则是可以更改的对象;传递参数的时候类似于引用类型和实际类型
    24.python中的参数:
        1.关键字参数    和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
        2.必须参数      在调用方法时必须传递的参数,不传会报错
        3.默认参数      在不传递时使用卡默认值
        4.不定长参数    参数列表有普通和不定长两种,传入的符合哪种用哪种 没有命名
    25.匿名函数:    
        lambda  参数  参数 参数 :表达式    可以通过赋值为匿名函数起名
    26. return 语句 函数的返回值
    27.变量作用域
            L(Local) 局部作用域
            E(Enclosing) 闭包函数外的函数中
            G(Global)  全局作用域
            B(Built-in)  内建作用域

            x=int(2.9) 内建作用域

            g_count=0  全局作用域
            def function():
                o_count=1   闭包函数外的函数中
                def inner():
                    i_count=2;  局部作用域
    28.global和nonlocal关键字
            当在局部修改全局变量时  要使用global关键字;
            num = 1
            def fun1():
                global num  # 需要使用 global 关键字声明
                print(num)
                num = 123
                print(num)
            要修改前台作用域(enclosing作用域,外层非全局作用域)中的变量需要用nonlocal;
            def outer():
            num = 10
            def inner():
                nonlocal num   # nonlocal关键字声明
                num = 100
                print(num)
            inner()
            print(num)
    29.数据结构:
        1.列表:很多方法类似于java中的list
                del 语句可以依照索引而不是值来删除一个切割或整个列表;
        2.元组和序列 由若干逗号分隔,括号包裹
            ==使用enumerate()函数同时得到索引位置和对应值;两个或者更多的序列可以使用zip()组合;使用reversed()函数反向遍历,使用sorted()函数返回一个已经排序的序列,不修改原值;
        3.集合:无序不重复元素的集;基本功能包括关系测试和消除重复元素;使用大括号包裹,创建空集合使用set();
            ==遍历:可以使用items()方法同时解读出
    30.模块:
            1、import sys 引入 python 标准库中的 sys.py 模块;这是引入某一模块的方法。
            2、sys.argv 是一个包含命令行参数的列表。
            3、sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表。
            4.import 模块名
            5.from 模块名 import 函数名
            6.模块被第一次引入时,主程序将运行,如果想组织这种情况,使用_name_属性;
            if __name__ == '__main__':
               print('程序自身在运行')
            else:
               print('我来自另一模块')
            7.dir()函数;找到模块内定义的所有名称,以字符串列表形式返回;
            8.导包的时候,如果_init_.py中存在yi9ge较_all_的列表变量,才会把包下所有的模块导入,如果不存在,只会导入包含内容 有可能会执行_init_.py中的内容;    
    31.输出:表达式语句和print()还有使用文件对象的write()方法;
        1.str.format()函数格式化输出值
        print('{}网址: "{}!"'.format('菜鸟教程', 'www.runoob.com'))
        2.str()或者repr()将输出的值转为字符串;
    32.open()将会返回一个file对象,open(文件名称,文件打开模式---默认只读)
    33.文件的读取:文件名.read(size);如果size被忽略或者是为负,将会读取整个文件;readline()读取一行,返回值为读取到的内容;readlines(sizeint)返回所有行,如果设置sizeint,读取指定长度将内容按行分隔;
    34.write(str),将str写如文件,并返回写入的内容;tell(),返回文件对象当前所处的位置,从文件头开始算起的字节数;seek(偏移量,从什么位置开始--默认是0从文件头开始--1标识当前位置--2标识文件结尾;);close()释放资源,其他方法isatty() 和 trucate();
    35pickle模块实现序列化和反序列化: pickle.dump(数据,文件对象);
    36.文件对象的方法:读写查找,特殊方法有file.isatty():如果文件连接到一个终端设备返回true,否则返回false,什么叫连接到一个终端设备?file.truncate([size])从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
    37.OS提供更多的对文件和目录的处理方法;
    38.编译错误和运行异常,和java类似:多出一个else语句,只在try字句中没有发生异常的情况下执行与java中的finally块不一样!通过raise抛出异常,也可以自定义异常,也有finally最终执行块;使用关键词with在代码执行完毕之后进行清理任务(比如文件关闭);
    39.Python中类的继承是允许多继承的,其他的与java类似,构造方法_init_(),可以传参,self(不是python的关键词)代表的是对象,而不是类本身;类的方法中必须包括self,且为第一个参数,self代表的是类的实例;两个下划线 开头的是私有的,只能在内部通过对象调用;
    40.标准库概览
            OS中有用的方法:
                1.引包   import os
                2.方法
                    os.getcwd()  返回当前目录
                    os.chdir()   修改当前工作目录
                    os.dir()     返回文件列表
                    os.help()    帮助
                3.shutil模块中有操作文件的方法
                4.glob 提供函数用于从目录通配符搜索中生成文件列表
                5.sys模块有argv变量 链表的形式存储一些经常调用的命令行参数;
                  还有stdin,stdout,stderr属性,及时在stdout被重定向之后,后者也可以用于显示警告和错误信息
                6.re模块为高级字符串处理提供了正则表达式;
                7.math模块为浮点运算提供了对底层C函数库的访问,random提供了生成随机数的工具
                8.访问互联网的urllib.request和发送邮件的smtplib
                9.datatime模块处理日期和时间
                10.zlib提供压缩
                11.timeit可以测试解决同一问题不同方法性能
                12.doctest提供测试方法;unittest可以在一个独立的文件里提供一个更加全面的测试集;
    41.正则表达式:
        re.match(正则表达式,要匹配的字符串,标志位--用于控制正则表达式的匹配方式);职匹配字符串的开始,匹配成功返回对象,不成功返回none;
        group(num)和groups():匹配对象函数来获取匹配表达式。
            import re

            line = "Cats are smarter than dogs"

            matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

            if matchObj:
               print ("matchObj.group() : ", matchObj.group())
               print ("matchObj.group(1) : ", matchObj.group(1))
               print ("matchObj.group(2) : ", matchObj.group(2))
            else:
               print ("No match!!")

            以上实例执行结果如下:

            matchObj.group() :  Cats are smarter than dogs
            matchObj.group(1) :  Cats
            matchObj.group(2) :  smarter

        re.search扫描整个字符串并返回第一个成功的匹配,语法同match;
        re.sub用于替换字符串中的匹配项;
            re.sub(正则,要替换的,被替换的,替换几个)
  07.12
    Python的CGI编程:
        语言是互通的,使用print()向客户端写html代码,和之前初学Servlet的时候是一样的;
    Python的数据库连接:
         1. 使用的是PyMysql,首先获取连接,然后获取游标,执行语句;在执行语句的时候通过变量来给sql语句中传递参数;
         2. 查询的时候是用fetchone()和fetchall()获取数据.使用rowcount获取影响行数;
         3.增删改的时候,需要在执行sql之后进行commit()操作,出现错误回滚,控制事务;
         4.数据库操作错误:
             Warning    当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。
            Error    警告以外所有其他错误类。必须是 StandardError 的子类。
            InterfaceError    当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。
            DatabaseError    和数据库有关的错误发生时触发。 必须是Error的子类。
            DataError    当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。
            OperationalError    指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。
            IntegrityError    完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
            InternalError    数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。
            ProgrammingError    程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。
            NotSupportedError    不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。
    Python的网络编程:
             1.两个级别访问的网络服务:
                     低级别的网络服务支持基本的Socket,提供了标准的BSD Sockets API,可以访问底层操作系统的Socket接口的全部方法;
                     高级别的网络服务模块SocketServer,提供服务中心类,简化网络服务器开发;
             2. Socket:套接字,被用来发送或者应答请求,实现主机之间或者一台计算机上的进程之间的相互通信;
                 Socket()函数:
                     socket.socket(family(套接字家族可以使AF_UNIX或者AF_INET),type(可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM),不填默认为0);
    Python使用SMTP发送邮件:
             1. 类似于socket的用法,smtplib.SMTP(服务器主机,端口号,服务器地址)
             2. 设置之后可以使用对象.sendmail(发件人,收件人,信息(构成))                 
                        #!/usr/bin/python3
                        
                        import smtplib
                        from email.mime.text import MIMEText
                        from email.header import Header
                        
                        # 第三方 SMTP 服务
                        mail_host="smtp.XXX.com"  #设置服务器
                        mail_user="XXXX"    #用户名
                        mail_pass="XXXXXX"   #口令
                        
                        
                        sender = 'from@runoob.com'
                        receivers = ['429240967@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
                        
                        message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
                        message['From'] = Header("菜鸟教程", 'utf-8')
                        message['To'] =  Header("测试", 'utf-8')
                        
                        subject = 'Python SMTP 邮件测试'
                        message['Subject'] = Header(subject, 'utf-8')
                        
                        
                        try:
                            smtpObj = smtplib.SMTP()
                            smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号
                            smtpObj.login(mail_user,mail_pass)
                            smtpObj.sendmail(sender, receivers, message.as_string())
                            print ("邮件发送成功")
                        except smtplib.SMTPException:
                            print ("Error: 无法发送邮件")

             3. 发送附件的时候,需要创建MIMEMutipart()        
                        #!/usr/bin/python3
                        
                        import smtplib
                        from email.mime.text import MIMEText
                        from email.mime.multipart import MIMEMultipart
                        from email.header import Header
                        
                        sender = 'from@runoob.com'
                        receivers = ['429240967@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
                        
                        #创建一个带附件的实例
                        message = MIMEMultipart()
                        message['From'] = Header("菜鸟教程", 'utf-8')
                        message['To'] =  Header("测试", 'utf-8')
                        subject = 'Python SMTP 邮件测试'
                        message['Subject'] = Header(subject, 'utf-8')
                        
                        #邮件正文内容
                        message.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain', 'utf-8'))
                        
                        # 构造附件1,传送当前目录下的 test.txt 文件
                        att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
                        att1["Content-Type"] = 'application/octet-stream'
                        # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
                        att1["Content-Disposition"] = 'attachment; filename="test.txt"'
                        message.attach(att1)
                        
                        # 构造附件2,传送当前目录下的 runoob.txt 文件
                        att2 = MIMEText(open('runoob.txt', 'rb').read(), 'base64', 'utf-8')
                        att2["Content-Type"] = 'application/octet-stream'
                        att2["Content-Disposition"] = 'attachment; filename="runoob.txt"'
                        message.attach(att2)
                        
                        try:
                            smtpObj = smtplib.SMTP('localhost')
                            smtpObj.sendmail(sender, receivers, message.as_string())
                            print ("邮件发送成功")
                        except smtplib.SMTPException:
                            print ("Error: 无法发送邮件")
  07.17
    Python的多线程:
        Python3线程中常用的两个模块是:_thread和threading(推荐使用);    
            1._thread提供了低级别的、原始的线程以及一个简单的锁;
                _thread.start_new_thread ( function, args[, kwargs] );
                    function - 线程函数。
                    args - 传递给线程函数的参数,他必须是个tuple类型。
                    kwargs - 可选参数。

            2.threading模块除了_thread中的方法外,还有threading.currentThread()--返回当前线程变量;threading.enumerate()--返回一个包含正在运行的线程list;threading.activeCount():返回正在运行的线程的数量;
            3.同样提供Thread类的方法:run(),start(),jion(time):等待之线程终止;
            4.同步锁:threading,lock(),返回对象(同时会有线程参数组,必须添加进去才能使用)有两个方法,获得锁是acquire(),释放锁是release()
            5.线程优先级队列:
                Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO队列Queue,LIFO队列LifoQueue,和优先级队列PriorityQueue.
                创建对象:workQueue=queue.Queue();

    Python解析XML:
    Python中的Json数据解析:
        json.dumps():对数据进行编码
            python的原始类型与json类型转换:
                dict===object
                list,tuple==array
                str=string
                int,float,int- & float-derived Enums=Number
                true=true
                false=false
                none=null
        json.loads():对数据进行解码
            json解码为python类型转换对应表:
                object=dict
                array=list
                string=str
                number(int)=int
                number(real)=float
                true=true
                false=false
                null=none
    Python3中的日起和时间:time和calendar模块可以用于格式化日起和时间,时间间隔是以秒为单位的浮点小数.
        1.time模块
            常用函数:time.time()获取当前时间,使用time.localtime()将当前时间转换为时间元组struct_time,获取可读的时间模式time.asctime()将非格式化时间转换过来;使用time.strftime()方法来将日期格式化成各种格式;
            %y 两位数的年份表示(00-99)
            %Y 四位数的年份表示(000-9999)
            %m 月份(01-12)
            %d 月内中的一天(0-31)
            %H 24小时制小时数(0-23)
            %I 12小时制小时数(01-12)
            %M 分钟数(00=59)
            %S 秒(00-59)
            %a 本地简化星期名称
            %A 本地完整星期名称
            %b 本地简化的月份名称
            %B 本地完整的月份名称
            %c 本地相应的日期表示和时间表示
            %j 年内的一天(001-366)
            %p 本地A.M.或P.M.的等价符
            %U 一年中的星期数(00-53)星期天为星期的开始
            %w 星期(0-6),星期天为星期的开始
            %W 一年中的星期数(00-53)星期一为星期的开始
            %x 本地相应的日期表示
            %X 本地相应的时间表示
            %Z 当前时区的名称
            %% %号本身
        2.calendar模块
        3.datetime模块
  07.20
    Python爬虫编写:
        实质就是利用http请求和响应读取网页内容;要注意编解码,注意传递参数时需要进行url编码



    -----关于pass------    
    没有逻辑,为了防止语法错误,不能不写!    
        while 1:
            pass        
    -----关于with------    
    基本的with表达式格式  with EXPR(任意表达式) as VAR(可选): BLOCK
    过程:1.执行EXPR,获取一个上下文管理器
         2.上下文管理器的__exit()__方法被保存起来用于之后的调用
         3.调用上下文管理器的__enter()__方法
         4.如果with表达式中含有asVAR,nameEXPR的返回值被赋值给VAR
         5.执行BLOCK中的表达式
         6.调用上下文管理器的__exit()__方法,如果发生异常,那么异常的type,value和traceback将作为参数传递给__exit()__,否则传递三个none
    -----关于编码问题-----
    什么编什么解,在使用python爬虫时,利用httpresponse返回的HTML的内容是经过ISO8859-1编解码之后,使用UTF-8编码之后的内容;使用utf-8解码之后,可以的到正常的Unicode字符,这些字符如果要打到控制台上,必须使用GBK编码,Win7的CMD,默认codepage是CP936,即GBK的编码,因为内容中含有一些GBK无法显示的字符,所以会出现‘gbk’ codec can’t encode character异常!   
原创粉丝点击