python基本语法简记

python基本语法简记

python语句严格要求格式对齐,无分号。

算术操作符

操作符 含义
** 指数
// 整除取整
/ 除法
- 减法
+ 加法
* 乘法
% 取模

比较操作符

< 、>、>=、<=、==、!=

逻辑操作符

and 、or 、 not

条件语句

if 条件:
     print("结果1!") 
elif 条件: 
     print("结果2") 
else:     
print("结果3")

内置函数

len(" ")字符长度,列表元素个数

str(**) 整型转换字符

int() 转换整型

float()转化浮点

list() 列表化

复用函数,可没有返回值

def f():

可选参数

def f(x=2, y):   
return x ** y

异常处理

try: 


 print(a / b)

except (ZeroDivisionError,ValueError): 

 print("b cannot be zero.") 

文档字符串

“”"
内容

“”"

容器

方法

.调用内置函数。例如字符串函数的调用“aaa”.upper()大写 "aaa ".replace(“a”,“b”)替换

列表 list()

定义fruit = [“Apple”,“Orange”, “Pear”]

查找
list.index(“sss”)
fruit[0]索引

“\n”.join(app[0:6]) app0到6列打印,换行隔开 “ ”空格隔开

“ ”.join(app)空格隔开元素

判断
“green” in colors 、“black” not in colors真值检验
合并复制
colors1 + colors2合并 colors*3复制
添加
(1)insert函数:len(list)=5
list.insert(0,a) 首位插入a
list.insert(>=5,a)末位插入a
list.insert(-1,a) 倒数第二插入a
list.insert(<=-5,a)倒数第六插入a即首位插入a
(2)fruit.append(“Banana”)添加到尾部
删除
(1)list.remove(“babaab”)
(2)item = colors.pop()移除最后一个给item
排序

list.sort() 
list 				#对list本身排序从小到大,字母数字不能混,**不要记录返回**值,输出就是原来的序列,有大小写之分按照ASCII
spam.sort(reverse=True)		#逆排序
 spam.sort(key=str.lower) 	 #全部小写排序

元组(不可变列表)tuple()

定义dys = (“1984”, “Brave New World”, “Fahrenheit 451”)

单独定义有逗号(“self_taught”, )

不能增减其余语法和列表一致

字典(键值对)dict()

fruits = {“Apple”:“Red”, “Banana”: “Yellow”}

“字典名[键] = 值”添加新的键值对,并通过语法“字典名[键]”查找值

“Bill Gates” in bill=”Bill Gates“ in bill.keys()

“Bill Doors” not in bill查找键不能查找值

del books[“The Trial”]删除键值对
三个字典方法
dic.keys()键
dic.values()值
dic.items()键值对

for i in dic.items():#遍历键值对
	print(i)

检查
get()

dic.get("aa",2)#检查键aa是否存在,存在则返回其值,不存在返回2

setdefault()

 dic.setdefault("colors","black")#检查键colors是否存在,则返回其值,不存在则设置该键值对,并返回该值。

漂亮打印
模块pprint

 import pprint
 .
 .
 pprint.pprint(dic)

嵌套容器:可以在列表中存储元素,在元组中存储列表,还可以在列表或元组中存储字典

字符串

三引号字符串跨行

正索引(从左往右 0开始)

负索引(从右往左-1开始)

+号字符串拼接

*3字符串重复三次

.upper() 字符串改为大写

.lower() 字符串改为小写对自身没有改变有返回值
.isupper()
.islower()判断大小写 ,返回真值
.isalpha() 只含字母且非空?
.isalnum() 只含字母数字且非空?
.isdecimal() 只含数字且非空?
.isspace() 只含空格制表符和换行且非空?

.startswitch(“aa”)以aa开始?
.endswith(“aa”)以aa结束?

.capitalize() 字符首字母大写

"{} was born in {}.".format(author, year_born)传参进括号

“I jumped over the puddle. It was 12 feet!”.split(".") 从.分割字符串

" ".join(words)在字符串words中用空格隔开

s = s.strip()去除首末空格

equ = equ.replace(“a”,"@") equ中a替换成@

"animals".index(“m”)查找索引

“Cat” (not)in "Cat in the hat."逻辑真值检验

\” 内容 "使双引号转义使其(字符串。。。)一般化

\n换行

ivan[0:17]0到17个元素

ivan[:17]开始到17元素

ivan[17:]17到结束的元素

ivan[:] 索引全部元素

循环

for遍历

for show in coms:	
	print(show)
# 遍历coms

range函数

for i in range(1, 11):

	print(i)  

while循环,为真循环

while x > 0:
	print(1)

break终止循环

continue 中止本次循环,继续下一次循环

模块

import math 导入模块math

math.pow(2, 3) 调用模块中的函数次方

random.randint(0, 100) 生成随机整数

statistics.mean(nums) 均值

statistics.median(nums) 中值

statistics.mode(nums)众值

keyword.iskeyword(“for”) 真值检查

同一个文件内导入自定义模块 文件名.函数名字 调用函数

文件

write对应close w只写 r只读 w+可读写

st = open("st.txt", "w") 
st.write("Hi from Pytho!")
st.close()
# open后要close

自动关闭文件with

with open("st.txt", "w") as f: 
	f.write("Hi from Python!")

读取read

with open("st.txt","r") as f: 
	print(f.read())

csv文件模块(表格文件)

writerow写行

import csv

with open("st.csv","w") as f:
w=csv.writer(f,delimiter=",")
w.writerow{["one","two","three"]}

用户输入

input(提示性话语) 合法输入

raw_input(notice) 任何都能输入

过程式编程、函数式编程

面向对象编程

class [类名]:
	 [代码主体]

类名:首字母大写单词之间没有下划线

代码主体称之为方法:都是小写下划线分隔
方法与函数的区别:类内定义;参数至少一个(第一个参数self)
类初始化,参数定义,属性函数的例子,来自于书本《Python无师自通:专业程序员养成》

class Rectangle(): 
    def __init__(self, w, l):   
	 self.width = w 
	 self.len = l 
    def area(self): 
	return self.width * self.len 

    def change_size(self, w, l): 
        self.width = w 
        self.len = l 
rectangle = Rectangle(10, 20) 
print(rectangle.area()) 
rectangle.change_size(20, 40) 
print(rectangle.area())

结果为200 800

对象编程的四大支柱

1.封装

避免客户端直接访问内部数据,python中没有私有变量,不该访问的变量名称前加下划线

2.抽象

保留对象的本质

3.多态

为不同的基础形态,数据类型提供相关接口的能力。

4.继承

子类继承父类,和C++类似

class Square(Shape): 
	 def area(self): 	
	 	 return self.width * self.len 

 a_square = Square(20, 20)
 print(a_square.area())
 
 >> 400

定义父类Shape的一个子类Square,除继承父类的参数函数还可以定义新的函数,同名覆盖父类

组合

对象保留在另一个对象中,

深入面向对象编程

类就是一个对象,类有两种变量:类变量和实例变量。
实例变量属于对象,类变量属于 Python 为每个类定义创建的对象,以及类本身创建的对象,类变量可以在不使用全局变量的情况下,在类的所有实例之间共享数据

 class Rectangle(): 
      recs = [] 
      
      def __init__(self, w, l): 
          self.width = w 
          self.len = l 
          self.recs.append((self.width, elf.len)) 

width和len是实例变量,recs是类变量类间共享每创建一个类就会添加到recs中。

魔法方法_repr_:所有类继承Object的父类,默认返回类的地址,在类中可以重新定义_repr_魔法方法更新类的返回值。其他魔法方法参照https://www.cnblogs.com/jiangchenxi/p/8073482.html
is用于类的比较指向是否为同一定义的类声明,相同为真,不同为假

编程工具(要擅长)

命令行接口Bash:Ubuntu和UNIX自带,Windows命令提示符dos
Windows10提供bash:
echo输出函数;
python3进入python代码 exit()退出python代码;
history历史命令
pwd工作目录(print working directory)
cd改变当前目录(change directory)
cd ~ (home键)cd …返回上一层目录
ls(list)打印当前工作目录下的所有目录和文件夹
mkdir 当前目录下创建目录(make directory)
rmdir 删除目录(remove directory)
touch 新建文件 **

旗标(打印目录文件作者大小时间)
UNIX:ls -author
Linux:ls --author
ls -a 查看所有文件包括隐藏文件
-c 含有代码

隐藏文件(.开头)
touch .self_taught 创建隐藏文件
写入文本并查看
法1

touch file
echo “hello world”>>file
cat file

法2
vim test.txt
i编辑
输入内容
Esc退出编辑 :wq退出保存
cat test.txt

管道(可使用管道将一个命 令的输出,传入另一个命令作为输入)
ls | less 执行结果是一个用 less 程序打开的文本文件,内容为ls命令的输出
环境变量(美元符号引用,仅存在于当前bash窗口,隐藏文件可以使环境变量永远存在 )

$ export x=100
$ echo $x

用户whoami
根用户 代码前加sudo
正则表达式

bash python
grep命令匹配文本 grep -i Beautiful zen.txt(旗标-i忽略大小写)(-o仅仅打印匹配) re内置模块使用正则表达式。findall(正则表达式,目标文本,re.IGNORECASE)第三个忽略大小写匹配
匹配起始位置 grep ^If zen.txt 从if开始 匹配结束位置grep idea.$ zen.txt到idea.结束 m = re.findall("^If", zen, re.MULITILINE)第三个参数使其匹配所有参数
匹配多个字符 echo Two too. | grep -i t[ow]o 输出前者给后者匹配t o/w o m = re.findall("t[ow]o", string, re.IGNORECASE
匹配数字 echo 123 hi 34 hello. | grep [[:digit:]] m = re.findall("\d", line, re.IGNORECASE)
重复echo two twoo not too. | grep -o two* 重复echo __hello__there | grep -o __.*__ __.__贪婪匹配 found = re.findall("__.*?__", t)加问号非贪婪
转义 echo I love $ | grep \\$单纯匹配$ m = re.findall("\\$", line, 1re.IGNORECASE
正则工具http://theselftaughtprogrammer.io/rege 寻找匹配的正则表达式

pip问题。dos可以访问,bash访问不了待解决

网络爬虫

1.用 BeautifulSoup 模块解析(parse) HTML 代码
2.Urllib 库,它是 Python 内置的 HTTP 请求库,有四个模块。

  • request,它是最基本的 HTTP 请求模块,我们可以用它来模拟发送一请求。

  • error 模块即异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。 parse

  • parse模块是一个工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等等的方法。

  • robotparser,主要是用来识别网站的 robots.txt 文件,然后判断哪些网站可以爬,哪些网站不可以爬。

3.Urllib 库的使用

(1)urlopen()

API: llib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
返回值它是一个 HTTPResposne 类型的对象,它主要包含的方法有 read()、readinto()、getheader(name)、getheaders()、fileno() 等方法和 msg、version、status、reason、debuglevel、closed 等属性。

data参数:bytes 类型,通过 bytes() 方法, GET 方式请求转为 POST。

data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())

urllib.parse 模块里的 urlencode() 方法来将参数字典转化为字符串。编码格式指定为 utf8。
timeout参数:超时时间,单位为秒,try except

  try:
    response = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1)
except urllib.error.URLError as e:
    if isinstance(e.reason, socket.timeout):
        print('TIME OUT')

其他参数
context 参数,它必须是 ssl.SSLContext 类型,用来指定 SSL 设置。
cafile 和 capath 两个参数是指定 CA 证书和它的路径,这个在请求 HTTPS 链接时会有用。
cadefault 参数弃用了,默认为 False。

(2)Request Headers 等信息,强大的 Request 类来构建一个请求。

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

第一个 url 参数是必传参数。
第二个 data 参数如果要传必须传 bytes(字节流)类型的,如果是一个字典,可以先用 urllib.parse 模块里的 urlencode() 编码。
第三个 headers 参数是一个字典,这个就是 Request Headers 了,你可以在构造 Request 时通过 headers 参数直接构造,也可以通过调用 Request 实例的 add_header() 方法来添加, Request Headers 最常用的用法就是通过修改 User-Agent 来伪装浏览器,默认的 User-Agent 是 Python-urllib,我们可以通过修改它来伪装浏览器。
第四个 origin_req_host 参数指的是请求方的 host 名称或者 IP 地址。
第五个 unverifiable 参数指的是这个请求是否是无法验证的,默认是False。意思就是说用户没有足够权限来选择接收这个请求的结果。例如我们请求一个 HTML 文档中的图片,但是我们没有自动抓取图像的权限,这时 unverifiable 的值就是 True。
第六个 method 参数是一个字符串,它用来指示请求使用的方法,比如GET,POST,PUT等等。

from urllib import request, parse

url = 'http://httpbin.org/post'
headers = {
    'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
    'Host': 'httpbin.org'
}
dict = {
    'name': 'Germey'
}
data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

urlopen() 方法的参数不再是一个 URL,而是一个 Request 类型的对象headers 中指定了 User-Agent 和 Host,传递的参数 data 用了 urlencode() 和 bytes() 方法来转成字节流,另外指定了请求方式为 POST。 headers 也可以用 add_header() 方法来添加。

(3)处理异常
Urllib 的 error 模块定义了由 request 模块产生的异常,两个异常类URLError和HTTPError。HTTPError,它有三个属性(code状态码、reason、headers),URLError 是 HTTPError 的父类,先捕获 HTTPError,获取它的错误状态码、原因、Headers 等详细信息。如果非 HTTPError,再捕获 URLError 异常。

from urllib import request, error

try:
    response = request.urlopen('http://cuiqingcai.com/index.htm')
except error.HTTPError as e:
    print(e.reason, e.code, e.headers, sep='\n')
except error.URLError as e:
    print(e.reason)
else:
    print('Request Successfully')

数据结构

1.栈
2.栈逆转字符串
3.队列

算法

1.FizzBuzz问题
2.顺序搜索
3.回文词
4.变位词
5.计算字母频数
6.递归

补充:

1.print()代表换行
下一个语句不换行:

print('d',end=' ')
  1. int 支持非常长的整数 对比C++没有长整形
  2. 复数表示:(1)3+5j (2)complex(3,5)
  3. 注释:C++:单%多/* Python 单:# 多’’’
  4. 类:
    class ClassName:
    ‘类的帮助信息’ #类文档字符串
    class_suite #类体
    实例化class: class1 = class(“laowang”,23)实例化_init_函数
    调用:lass1.name()
    6.列表推导式
lst1=[1, 2, 3]
lst2=[3, 4, 5]
lst3 = [x*y for x in lst1 for y in lst2]
print(lst3)

>>[3, 4, 5, 6, 8, 10, 9, 12, 15]

做链接使用:

lst1=[1, 2, 3]
lst3 = [x for x in lst1 if x<2]
print(lst3)

>>[1]

随时更新。。

你可能感兴趣的:(python语法学习笔记)