一、变量

  1. 元组:元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
  1. 字典:相当与C++中的map,字典中值不允许用到变量 [头下标:尾下标] 切割

二、运算符

  1. Python的and, or, not 对应了其他语言的双与&&、双或||、非!
  1. 没有++, --运算符
  1. Python特有的运算符:
    • in, not in, 判断某个成员是否存在于列表中a in list
    • is, not is, 判断两个对象是否是否指向同一块内存    ---  与== 和 != 的区别是:is 用于判断两个变量引用对象是否为同一个(同一块内存空间), == 用于判断引用变量的值是否相等。

三、控制结构(选择,循环)

  1. for循环其实是C++的增强for循环或者Java中的范围for循环
  1. 循环使用else语句
  • for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样
  1. Python的pass语句
  • pass 不做任何事情,一般用做占位语句,该语句的使用场景是:如果定义一个空函数程序会报错,当没有想好函数的内容是可以用 pass 填充,使程序可以正常运行。

四、函数

函数中不能同时使用变量名相同的局部变量和全局变量

五、异常

Python3.x 之后获取异常参数要加一个 as , 比如:except ValueError as Argument:
python3.x : raise Exception("Invalid") --- pythone2.x: raise Exception, "Invalid level"

六、面向对象

  1. self 相当于其他语言的this, 每个成员方法都必须把这个变量作为第一参数,selft的变量名可变
  1. 定义类时声明的成员其实是类成员,也就是其他语言的静态成员,非静态成员可以不显示声明
  1. 成员可以直接通过对象实例. 出来, 也可以使用以下函数的方式来访问属性:
    • getattr(obj, name[, default]) : 访问对象的属性。
    • hasattr(obj,name) : 检查是否存在一个属性。
    • setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
    • delattr(obj, name) : 删除属性。
  1. 和其他语言一样,如果子类没有重写父类的某个方法,那么子类就会将这个方法继承下来,如果重写了某个方法,那么这个新方法会覆盖从父类继承下来的方法,构造方法也不例外。如果子类方法中要调用父类的方法,则需要按下面的格式来调用父类的方法:
  • super(子类,self).methodname(参数1,参数2,....)
  1. 获取私有属性的方式:
    1. obj._类名__私有属性, 也可以用这种方式调用私有方法。
    1. getattr(v1, '_Vector__secretCount')
  • python并没有真正的私有化属性,而是修改了属性名,把属性名修改成了_类名__属性名, 通过访问正确的属性名可以访问到这个私有属性,所以python的私有化属于伪私有。
  1. python的构造方法不能重载,可以给所有属性参数添加默认值,这样可以达到传其他个数的参数的目的

七、格式化输出的三种方式

  1. print(str%(var1, var2...)
  1. print("...{ }...{ }..".format(var1, var2))
  • 其中花括号可以有以下几种写法
  • (1)不带编号,即“{}”
  • (2)带数字编号,可调换顺序,即“{1}”、“{2}”
(3)带关键字,即“{a}”、“{tom}”, format()函数中必须要指明变量名和值
  1. print(f"...{var1}...{var2}..."), 这个其实是2的变形

八、内置函数

  1. 函数 len() 返回列表的长度,即元素的个数。
  1.  range返回一个序列的数。rang(10, 20), range(10), range(10, 20, 2)
  1. id(),返回对象的内存地址
  1. .....

九、使用 requests 抓取网页数据

request介绍
Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。
⼀句话——Python实现的简单易⽤的HTTP库
上面所有方法均返回一个response对象,这个response对象有以下属性,可以通过查看response的下列属性来获取和判断页面的各种信息
除了以上属性外,还有一个cookies属性用的也挺多的。
使用方式:
1 import requests
2 response = requests.get("https://www.baidu.com")
3 print(response.cookies)
4 print(response.text)
使用resquests的一个案例
不登陆直接使用request访问这个发帖页面,会被拦截,跳转到登陆页面
1 import requests
2 # 下面这个url是一个发帖页面,这个页面需要登陆后才能访问
3 response = requests.get("http://39.106.217.243:8081/bbs/post/transitKind?kind=0")
4  
5 # 答应状态码和响应内容
6 print(response.status_code)
7 print(response.text)
运行结果符合预期,没有获取到发帖页面的内容,而是登陆页面的内容
先使用session携带登陆信息访问登陆接口页面,然后再让session访问上面的发帖页面,成功获取到发帖页面的源代码
 1 # 1. 创建session对象, 用来保存cookie值
 2 session = requests.session()
 3  
 4 # 2. 处理headers
 5 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 6  
 7 # 3. 需要登陆的用户名和密码
 8 data = {"username":"tom", "password":"123"}
 9  
10 # 4. 发送带有用户名和密码的请求,并获取登陆后的cookie值,保存在session中
11 session.post("http://39.106.217.243:8081/bbs/user/login", data = data)
12  
13 # 5. session包含用户登陆后的cookie值,可以直接访问需要登陆的才能访问的发帖页面
14 response = session.get("http://39.106.217.243:8081/bbs/post/transitKind?kind=0")
15  
16 # 答应状态码和响应内容
17 print(response.status_code)
18 print(response.text)
下面是获取到的发帖页面中一个表单
python 获取url中的参数列表
1 import urlparse
2 urldata = "http://en.wikipedia.org/w/api.php?action=query&ctitle=FA"
3 result = urlparse.urlparse(urldata)
4 print result
5 print urlparse.parse_qs(result.query)
输出
ParseResult(scheme='http', netloc='en.wikipedia.org', path='/w/api.php', params='', query='action=query&ctitle=FA', fragment='')
{'action': ['query'], 'ctitle': ['FA']}

参考:

十、Assert断言

断言作用:

检查条件,不符合就终止程序

用法:

下面两个程序是等价的,一个是用抛出异常的raise来实现的,另一个是用断言来实现的
1 a = -1
2 if not a > 0:
3     raise AssertionError("a 不合法")
1 a = -1
2 assert a > 0, "a不合法"

参考

List常用函数

  1. 添加元素append(val)
  1. 插入元素insert(index, val)
  1. list的长度len(list)
  1. list的最小值min(list)
  1. list的最大值max(list)

collections.Counter