• Python擅长领域


    • web开发 django flask weepy等

    • 网络编程

    • 科学运算

    • GUI图形开发

    • 运维自动化

  • python2 3 区别:

    • Unicode support:  python3可以直接写中文  

      Python2  不会太更新了 

      2   print ‘’  

      3 print ()

      库改名

    • Twisted 目前还不支持3.0  

  • python hello.py

  •     表示 hello.py脚本有Python解释器来执行 

        如果想类似执行shell脚本一样执行Python   例如./hello.py 需要在hello.py文件 头部指定的解释器 

        #!/usr/bin/env python     找环境变量为Python  

        #!/usr/bin/python  路径写死了   /usr/bin/python

        执行前 吸引给文件加权限  chmod 755 hello.py 

  • 常量 --Python 大写 代表常量

  • name ='a'
  • name_new = name
  • name ="c"

    name_new 指向a的内存地址

  • 注释多行 三个引号 ''' ‘''

  • pass 占位符 不走本行

  • pyc 相当于编译后的文件


    • 32位系统整数是32位  -2**31~2**31-1 

      64位系统 64位

      long 长整型

      python2.2以后  数据溢出了自动转换类型 

      Python3 没有长整型  

      Python不需要声明数据类型

    • Python 是解释型语言 

    • 高级语言 变成 计算机语言 一种是通过编译(java)  一种是解释

    • int 整数

    • 字段转元组 很耗时

    • 用户输入


    • shell ----read

    • Python2 raw_input()

    • Python3 input()

    • %d 整数

    • %s 字符

    • %f 浮点

  • 字符串


    • 不可修改 每次修改是 生成新数据

    • 列表是在原来内存上修改

    • 列表可以嵌套列表字典 可以嵌套任何东西

    • 字典 特性: 无序 (通过key找值 ,不需要通过下标 通过哈希算法)

    • 字典可以嵌套列表 字典 可以很多层

    • popitem() 随机删

    • isdigit() 检测字符串是否只由数字组成

    • center(50,’-‘)

  • 默认字典无序 

    • 集合 无序

    • 最常用的两种操作


    • 交集 list1.intersection(list2)

    • 并集 list1.union(list2)

    • 差集 in list1 but not in list 2 lis1.difference(list2)

    • 子集 list11.issubset(list2)

    • 父集 list1.issuperset(list2)

    • 对称差集(没有的取出来 ) list1.symmetric_difference(list2)

    • 添加

    • 删除 删除一项 t.remove('s') 不存在的话 会报错

    • 长度 len(s)

    • X是否是 S的成员----- 列表 字典 集合 字符串

    • pop() 删除并返回任意元素

    • discard() 删除元素 不存在 不报错

    • 拿一个新列表 for循环 元素i放到新列表中 跟原列表比较


    • 去重

    • 关系测试

    • 添加一项 t.add('x')

    • 添加多项 t.update([10,2,8]

    • 集合---常用


    • 常用操作  打开 读 写 关闭

    • 2.7 file()

    • 3.X open()

    • f = open("a.txt",'r',encoding="utf-8").read()

    • w 是创建一个文件 如果有原文件 会被覆盖

    • a append 追加 不覆盖原来的文件 也不能读

    • read() 类似指针 读过程在移动

    • f=open("a.txt")

    • data = f.read()

    • data2 = f.read() 因为指针到文件尾了,so读到的内容为空

    • f.close() 不写关闭的话 程序执行结束 自动关闭

    • f.readlines() 结果为列表

    • strip() 去掉换行 和 空格

    • for index,line in enumerate(f.readlines()) 打印下标

    • readlines() 把文件读一次性全部读到内存中 不适合操作大文件

    • read() 多了也不适合 也占内存

    • file.tell() 字符

    • file.read(5)

    • f.seek(0) 回到文件哪 0开头 10 第十个字符位置

    • f.fileno() 返回文件内存编号 ---不常用

    • Python读文件 是调用操作系统的io 不是自己去读y

    • isatty() 是否是终端设备

    • seekable() 是都能移动

    • linux 一切皆文件

    • f.flush() 强者刷

    • 没有写 默认是读模式

    • w 写 就不能读

    • 文件

比如写 默认是内存的缓存满了在往内存里写

buffer 内存中的临时文件

import syssys.stdout.write() #std 标准f.truncate() 截断

  • 不写是清空文件

  • f.truncate(10) 从文件开头截断到 指定位置 移动也不好使 都是从头开始

r+ 读写 --常用

  • read + append

w+ 写读 ----没啥用

  • 先创建一个文件 在写

  • 在源文件上的修改 覆盖

a+ 追加读

  • a 不能读

rb 二进制读文件 比如视频等 二进制 不传encoding

  • 网络传输 3.0 socket 传输

  • 二进制文件打开

wb 二进制写 2.0 区分不大 3.0 要注意

  • 字符串.encode() 转byte

打开一个文件 修改完存到另一个文件

  • vim 是把文件全部放内存中 今行操作

  • 文件修改: 从一个文件里读 写到另一个文件 as f

with 自动关闭文件

  • 2.7后支持 多个文件

  • with open('a.txt','r'), open('b.txt','r') as f1,f2:

  • with open("/Users/qiao/changhenge.txt",'r',encoding='utf-8') as f,\

  • open("/Users/qiao/changhehge_new.txt",'w') as f2:

#high 逼格 高效 读一行 删一行内存 : file 变成了迭代器 不是列表了

for line in file:

    print (line)


字符编码#    utf-8 --decode---> unicode ---encode-->gbk#    utf-8 <--encode-- unicode  <---decode---gbk

  • >>> sys.getdefaultencoding()

  • 'ascii'

  • 英文 按accii

  • 中文三个字节 ?

  • Unicode 中文英文都占两个字节 万国编码

  • ascii 一个字节

  • utf-8 可变长

  • gbk

  • Python3 默认编码Unicode

  • 2.7 默认编码 accii

  • s =
  • print (s.encode("gbk"))
  • print (s.encode("utf-8"))
  • print (s.encode("utf-8").decode("utf-8"))
  • print (s.encode("utf-8").decode("utf-8").encode("gbk"))

函数

  • 不加return 默认返回null

  • Python 可以返回多个值

  • 形参

  • 实参 实际存在 占用空间的

  • def test(x,y):

    • test(1,2) 与形参一一对应

    • test(y=2,x=1) 关键词调用 与形参顺序无关

    • def test(x,y,z)


  • test(1,z=3,y=2) 正确

  • test(1,2,y=3) 错误

  • def test(x,y=2)

  • 调用的时候 可以 test(1) 默认参数非必传

  • 用处:a 连接数据库 b 默认值

参数组 :可以传不固定参数def test(*args):*args 接收的是 位置参数 不能接收 关键字参数 转换成元组 形式位置参数不能写在 关键字参数 后面def test(x,*args):

    print(x)

    print(args) 调用test1(1,2,3,4,5,6,7)

def test2(**kwargs) 形参是字典

  • def test4(name,age=18,**kwargs):

  • test2(name=‘alex’,age=8,sex=‘F’)

  • 关键字参数

  • **kwargs 功能 把关键字参数转换成字典

  • 位置参数 关键字参数

  • def test3(name.**kwargs) test3(‘alax’,age=8)

  • 参数组要往后放

局部变量 在函数里变全局变量 global name 但不要这样做 尽量不要这样做全局变量 在外部显示字符串 和 整数 是不可以在局部里改全局list 集合 字典 类等稍复杂的数据对象 可以最大递归次数 999递归 特性:

  • 函数调用是 通过栈(先进后出 )

  • 必须有一个明确的结束条件

  • 每次进入更深一层的递归 问题规模应比上次减少

  • 递归层过多 会导致栈溢出

函数式编程 :通过一堆函数调用 实现功能 Python不适用

  • hashshell erlang lisp

  • 例如 subtract(multiply(add(1,2),3),4)

高阶函数: 一个函数接受另一个函数作为参数