python笔记

  • 解释型语言
  • Python不是纯函数式编程语言
  • 四个空格的缩进
  • Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
  • 大小写敏感
  • I/O:input()  print()
  • 字符编码:
    • 字符串是以Unicode编码的,支持多语言
    • 要计算str包含多少个字符,可以用len()函数
    • 单个字符的编码:
      • chr()函数把编码转换为对应的字符:
      • ord()函数获取字符的整数表示
  • 数据类型:
    • 整型:
      • 十六进制用0x前缀
      • 对于很大的数,允许在数字中间以_分隔,因此,写成10_000_000_00010000000000是完全一样的
      • 整数没有大小限制
    • 浮点数
    • 空值:None表示,None不能理解为0,因为0是有意义的,而None是一个特殊的空值

    • 布尔值:可以用andornot运算

    • 字符串:

      • 转义字符\
      • Python允许用'''...'''的格式表示多行
    • 常量:习惯上的用法:全部大写表示

    • 除法:

      • 一种除法是 :结果是浮点数,即使是两个整数恰好整除,结果也是浮点数

      • 一种除法是//,称为地板除,两个整数的除法仍然是整数,即使除不尽。

    • list:列表[]
      • 有序的集合,类似其他语言的数组
      • 要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素
      • len() :获得list元素的个数
      • append():list中追加元素到末尾
      • insert():把元素插入到指定的位置
      • pop():删除list末尾的元素;pop(i)删除指定位置的元素
    • tuple:元组()
      • 一旦初始化就不能修改,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
      • 只有1个元素的tuple定义时必须加一个逗号:t(1,)
    • dict:字典[]
      • 在其他语言中也称为map,使用键-值(key-value)存储
      • 要删除一个key,用pop(key)方法,对应的value也会从dict中删除:
      • 要避免key不存在的错误,有两种办法
        • 通过in判断key是否存在
        • get()方法
    • set:()
      • 和dict类似,也是一组key的集合,但不存储value。由于key不能重复
      • 可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
      • add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:
      • remove(key)方法可以删除元素:
  • 循环:
    • for in
    • while
    • range()函数,可以生成一个整数序列
  • 函数:
    • Python的函数返回多值其实就是返回一个tuple
    • 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
    • 默认参数:定义默认参数要牢记一点:默认参数必须指向不变对象!
    • 可变参数:
      • *args是可变参数,args接收的是一个tuple;
      • Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去
    • 关键字参数:
      • **kw是关键字参数,kw接收的是一个dict
    • 命名的关键字参数:
      • 是为了限制调用者可以传入的参数名,同时可以提供默认值。
      • 定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。
  • 高阶函数
    • 既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
    • 函数本身也可以赋值给变量,即:变量可以指向函数
    • map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
    • reduce()函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    • filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。
    • sorted()函数,还可以接收一个key函数来实现自定义的排序,用sorted()排序的关键在于实现一个映射函数。
    • 返回函数:函数作为返回值。这种称为“闭包(Closure)”:

      • 返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

      • 如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变

    • 匿名函数:关键字lambda表示匿名函数,匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
    • 装饰器:代码运行期间动态增加功能的方式
    • 偏函数:functools.partial就是帮助我们创建一个偏函数的
  • 模块和包
    • 一个py文件就是一个module
    • 包(package):按目录组织模块的方法
    • 每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包
    • 任何模块代码的第一个字符串都被视为模块的文档注释
    • Anaconda,这是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库
  • OOP
    • 变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name____score__这样的变量名。

    • 有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

    • 双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量:

    • 判断对象类型:type()函数、types模块中定义的常量、isinstance()、dir()

  • 进程和线程
    • 多进程:fork()、multiprocessing、Pool()、subprocess
    • 进程间通信:Queue()、Pipes()
    • 多线程:
      • 任何进程默认就会启动一个线程,我们把该线程称为主线程(MainThread),主线程又可以启动新的线程(LoopThread)
      • _thread(低级模块)、threading(高级模块)
      • current_thread()函数,它永远返回当前线程的实例
      • 所有变量都由所有线程共享
      • threading.Lock()、look.acquire()、look.release()
      • ThreadLocal:一个ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互不干扰。ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题。
    • 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。
  • 图形界面:第三方库:TK、wxWidgets、Qt、GTK
  • virtualenv:用来为一个应用创建一套“隔离”的Python运行环境
  • 异步IO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值