python基础语法

1、高级语言分类

  编译类

    将程序源码“翻译”成目标源码(机器语言),生产可执行文件(*.obj)然后执行

    优点:不需要源代码,不依赖语言环境,因为,执行的是机器代码文件,编译后可直接执行,效率高,速度快,因为程序代码已经翻译成计算机可以理解的机器语言

    缺点:一旦需要修改,必须要修改源代码,然后在重新编译,没有源代码,修改很不方便。跨平台性能差,不同操作系统需要不同的可执行文件

    语言:C,C++等   

  解释类

    使用解释器执行源代码文件, 解释器把源代码文件便解释成机器指令,便交给CPU执行

    优点:可跨平台,因为解释器做好了跨平台的交互处理。方式灵活,可以动态调整和修改程序

    缺点:效率比较低,不能独立生成可执行文件,不能脱离解释器。代码是明文的

    语言:python,Java,php

2、变量

  规则:只能是字母、数字或下划线的任意组合

        第一个字符不能是数字

        关键字不能为变量名

  命名习惯:驼峰体,下划线

3、交互

  print,input

  py2中,print ‘aaa‘, py3中,print('aaa')

4、注释

  #

5、数据类型

  数字:int,long(python没有指定长度,python3中没有这个类型了,都是int型), float

  字符串:单引号,双引号,多引号(一段话),可以相加(只能字符串之间)相乘(字符串*数字)

  bool类型:True, False

6、运算符

  (参考:菜鸟)

  算术运算符: '+','-','*','/','%','**','//'(py2中,1/2 得0,  1.0/2得0.5)

  比较运算符:‘==’, ‘!=', '<>'(py2里得不等于),  '>', '<', '>=', '<='  

  赋值运算符:'=', '+=', '-=', '*=', '/=', '%=', '**=', '//='

  位运算符(换成二进制操作):'&', '|', '~', '^'(异或,相异为1), '<<'(左移,高位丢弃,低位补0), '>>'

  逻辑运算符: and, or, not

    x and y: x为False,返回False,否则,返回y的计算值。

    x or y:x为非0,返回x值,否则返回y得计算值。

    not x:x为True,返回False;x为False,返回True

  成员运算符:in, not in

  身份运算符:is,is not,(判断两个标识符是不是引用自一个对象)

  优先级:(从高到低)

    幂,转,正负, 乘除取模取整除,

    加减,左右移,位与,位或位异或,

    大大等小小等,等不等,

    赋值,身份,成员,逻辑。

  万能用法:括号()

7、流程控制

  单分支
    if 条件:
        .....
  双分支
    if 条件:
        ....
    else:
        ....
  多分支
    if 条件:
        ...
    elif 条件:
        ....
    elif 条件:
        ...
    else:
        ...
  循环
    while 条件:
        执行代码.....
  终止语句
    break, continue
  while 条件:
      执行代码..
  else:
      ......(当循环正常退出或者条件不成立时,执行else后的语句)

 8、字符编码

  py3 文件默认编码:utf-8,

         字符串默认编码:unicode

  py2 文件默认编码ASCII,

    字符串默认编码ASCII,

  把字符串编码改成utf-8的方式:在文件开头:#!_*_ coding: utf-8 _*_, 或  #!encoding: utf-8

  

  UTF --> decode 解码 --> Unicode

  Unicode --> encode 编码 --> GBK/UTF-8

 

   存在内存上Unicode,存在硬盘或网络传输是GBK/UTF-8 

 

   在python2,str = bytes, 是因为 要表示图片,视频等二进制的数据。还有一个类型叫unicode

   pyhton3,str = unicode 

  

  py2: 以utf-8orgbk编写的代码,内容加载到内存,并不会转成unicode,还是utf-8 or gbk

  py3: 以utf-8orgbk编写的代码,内容加载到内存,自动转成unicode,

   

  千万不要自己转码,转码前必须备份

   保证不乱码的关键:

     字符当初以什么编码的,就应该以什么编码取解码

9、文件操作

  什么是文件:操作系统为用户/应用程序提供操作硬盘的抽象单位

  为何用文件:用户/应用程序对文件的读写操作会由操作系统转换成具体的硬盘操作,

          所以用户/应用程序可以通过简单的读写文件间接控制复杂的硬盘的存取操作

  如何使用文件:

    f = open(),向操作系统发送信号打开文件,拿到一个文件对象

    f.read(),读取文件,像操作系统发送读取文件指令

    f.close(),向操作系统发送信号,关闭文件,操作系统回收资源

  上下文管理:

    with open() as f,open() as e,.....:

      pass

  强调:一定要在关闭文件前,操作文件    

# 当你以utf-8写一个文件,直接读取时会报错:
with open(r'aaa') as f:
    print(f.read())

#UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 20: illegal multibyte sequence

#原因:写入硬件的方式和读取时的方式不一样,造成了乱码。执行open()时,操作系统会以GBK模式打开文件。
#解决方法:
with open(r'aaa', encoding='utf-8') as f:
    print(f.read())
当以utf-8写一个文件,直接读取会报错

  控制读写文件单位的方式(必须与‘r’/‘w’/‘a’连用)

     t:文本模式(默认的),一定要指定编码方式

      优点:操作系统会将硬盘中二进制数字解码成Unicode,然后返回,仅适用文本文件

    b:二进制模式,不用指定编码方式

  文件的打开模式:

    r:读(默认的)

    w:  写

    a:   只追加模式

  读:当文件不存在时,报错,当问及那存在时,指针指向文件开头。

    f.read(),全读,文件大时,不建议使用

    f.readline(),读一行,

    f.readable(),是否可读,

    f.readlines(),全读,以每一行为元素放在一个列表内。文件大时,不建议使用

  写:当文件不存在时,创建新的,存在时,清空覆盖,

    f.write(" d");

    f.writelines([]),

    f.writable(),

  追加:当文件存在时,追加写,文件不存在时,创建新文档

  r+:可读可写,写在末尾

  w+:可读可写,

  a+:可读可写,

  f.seek(offset, whence), 文件内指针的移动,只有t模式下的read(n),n代表的字符的个数,其余的都是以字节为单位。
    offset: 代表控制指针移动的字节数
    whence:代表参照什么位置进行移动
      0:参照文件开头(默认的),可以在t或b模式下使用
      1:参照当前所在的位置, 必须在b模式下用
      2:参照文件末尾, 必须在b模式下用,f.seek(-3, 2);f.read(3)读出最后一个汉字 
  f.tell(),当前指针所在的字节数位置
  f.truncate(6),指定长度,从文件的开头开始截断指定长度,其余内容删除;不指定长度,从文件开头开始截断到当前位置,其余内容删除。只能在‘r+'和’a'模式下,在‘r+'模式下可有seek指定长度。
  注:硬盘没有改,只有更新覆盖
# 修改文件的方式一:
# 1 将文件内容由硬盘全部读入内存
# 2 在内存中完成修改
# 3 将内存中修改后的结果覆盖写回硬盘


# with open('d.txt',mode='rt',encoding='utf-8') as f:
#     all_data=f.read()

# print(all_data,type(all_data))

# with open('d.txt',mode='wt',encoding='utf-8') as f:
#     f.write(all_data.replace('alex','dsb'))

# 错误的做法
# with open('d.txt',mode='rt',encoding='utf-8') as f1,open('d.txt',mode='wt',encoding='utf-8') as f2:
#     all_data=f1.read()
#     f2.write(all_data.replace('dsb','alex'))

# 修改文件的方式二:
# 1 以读的方式打开源文件,以写的方式打开一个临时文件
# 2 从源文件中每读一样内容修改完毕后写入临时文件,直到源文件读取完毕
# 3 删掉源文件,将临时文件重命名为源文件名
# import os
#
# with open('d.txt',mode='rt',encoding='utf-8') as read_f,open('.d.txt.swap',mode='wt',encoding='utf-8') as write_f:
#     for line in read_f:
#         write_f.write(line.replace('alex','dsb'))
#
# os.remove('d.txt')
# os.rename('.d.txt.swap','d.txt')


# 方式一:
# 优点: 在文件修改的过程中硬盘上始终一份数据
# 缺点: 占用内存过多,不适用于大文件

# 方式二:
# 优点: 不会过多地占用内存
# 缺点: 在文件修改的过程中会出现源文件与临时文件共存,硬盘上同一时刻会有两份数据,即在修改的过程中会过多的占用硬盘,
修改文件的两种方式

 

posted @ 2019-03-10 18:13  yw_sun  阅读(221)  评论(0)    收藏  举报