python基础知识

基础语法

name ="Eric,Eric

print(name.upper())将所有小写字母转化为大写

print(name.lower())将大写字母转化为小写

print(name.capitalize())将单词第一个字母大写,其他的还是小写

print(name.title())将每一个单词第一个字母都转化为大写

title()方法将变量中单词的首字母变为大写,其余全部变为小写,

如果变量中没有英文字符并不会改变变量中的变量值其余全部变为小写。

upper()方法是将单词的所有字母都变为大写,而 lower() 方法是将单词的字母都变为小写。

end=" "意味着print末尾不换行,加空格

使用r可以让反斜杠不发生转义

字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。

查找类型type()

str.format()括号及其里面的字符 (称作格式化字段) 将会被 format() 中的参数替换。

括号中数字(也可以用关键字)指向传入对象在 format()中的位置

eg: print('{}网址:"{}!"'.format('菜鸟教程','www.runoob.com'))

菜鸟教程网址: "www.runoob.com!"

print('{0} 和 {1}'.format('Google', 'Runoob'))

Google 和 Runoob

print('{1} 和 {0}'.format('Google', 'Runoob'))

Runoob 和 Google

列表

可嵌套形成矩阵列表

student=['1qw','dd','xx']

a=student[:] 复制

student.append("age") 增加

student.extend("name")

student.insert(1,9)

student.pop(1) 删除

student.remove('age')

del student[0]

student[1] = 'aax' 修改

print(student)

A=[1,2,3,4,5]

print(A[1])

print(A[1:3]) 切片

B=[]

C=A+B

print(C[1]) 合并

元组

name=(1,2,3,4)

print(name*2)

del name 删除

enumerate返回结果是元组

enumerate(list,start=0)

字典

A={'key1':'value','key2':'hai'}

A['key3']=4 添加

delA['key1'] 删除

A.pop('key2')

A['key4']=A.pop('key2') 修改

print(A['key2']) 查找

len(A)

keys(A)

value()

后进先出

只在容器的一端(称为栈顶端指标,top)进行加入(push)和输出数据(pop)的运算。

没有位置概念,保证任何时候可以访问、删除的元素都是最后存入的那个元素,确定了一种默认的访问顺序。

Stack()创建一个新的空栈

push(item) 添加一个新的元素item到栈顶

pop() 弹出栈顶元素

peek() 返回栈顶元素

is_empty() 判断栈是否为空

size() 返回栈的元素个数

推导式(简化代码)

只有列表,集合,字典有

列表推导式: for之后跟一个表达式,然后有零到多个for或if子句。

返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。

如果希望表达式推导出一个元组,就必须使用括号。

转换容器类型

set()转换为集合

tuple()转换为元组

list()转换为列表

判断语句

if 判断语句1:

执行语句1

elif 判断语句2:

执行语句2

else:

执行语句3

循环

for 变量 in 列表:

执行语句

i = 0

while 判断语句:

执行语句

break退出整个循环,continue退出一个循环

使用continue,在continue之前要改变计数器,否则会陷入无限循环

pass 一般用于占位置。

在 Python 中有时候会看到一个 def 函数:

def sample(n_samples):

pass

该处 pass 便占据一个位置,

定义一个空函数程序会报错,没有想好函数内容时可用 pass 填充使程序正常运行。

函数

def 函数名():

return[表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

定义一个函数只给了函数一个名称,并不会执行,只有当被调用的时候才会被执行。

函数括号内的参数称为形式参数,也叫形参,在我们实际调用函数时传入的参数称为实际参数,也叫实参。

func =add 将函数赋值给一个变量

func =add() 调用函数

数字函数中:sqrt()函数返回数字x的平方根。 math库

随机数函数:random()返回随机生成的一个实数,在[0,1)范围内。 random库

randiant()随机生成范围内整数

uniform() 随机生成范围内浮点数

shuffle()将序列的所有元素随机排序

sample(sequence,length)从指定的序列中随机的截取指定长度的片断

递归函数: 可在函数中调用自己,从后往前返回,需编写递归结束的条件。

defrefunc(n): 计算阶乘

i = 1

if n>1 : 递归结束判断

i = n

n = n*refunc(n-1) 递推

print("%d!="%i,n)

return n 回归

refunc(5)

lambda函数:创建一个函数名未和标识名绑定的匿名函数,只能使用表达式,可赋值给变量或直接作为函数使用

deffunc():

a=1

b=3

sum = lambda a,b: a+b

return sum(a,b)

print(func())

模块

import 模块名

import 模块名 as 另一个更简单的名字 更名

from 模块名1 import 函数名 直接调用函数

from 模块名 import * 可调用模块中所有函数

importsys 查找模块路径

print(sys.path)

sys.path.append('例题')

import sys 保存自己写的程序模块

sys.path.append("D:\\test")

如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数

__name__属性

__name__是python的内置属性,记录着一个字符串

如果程序作为模块被导入,__name__就是模块名

如果程序独立运行,__name__就是__main__ 通过name来判断程序运行状态

在很多Python文件中,你会看到以下格式的代码:

defmain():

...

If __name__ ==“__main__”:

main()

(一个包含多个模块的文件夹或目录)

import 包名 调用包中所有模块与函数

目录下有个特殊的文件__init__.py(必须包含,空文件作为包的标志)

调用包中函数示例:

1. import hhh.index

hhh.index.hdl()

2. from hhh import index

index.hdl()

3. from hhh.index import hdl

hdl()

当 __init__.py不是空文件时,导入包会执行其中代码并自动导入其中变量和函数

异常

程序运行时,遇到错误,停止执行,并提示错误信息,即异常

程序停止执行且提示错误信息这个动作,称之为:抛出(raise)异常。

Try:

pass

Except 错误类型1:

pass

Except 错误类型2:

pass

Except Exception as result:

print(“未知错误%s”%result)

else:

print("只有没有异常时,才会被执行")

finally:

print("无论是否异常都会执行")

提示:在开发中,可以在主函数中增加异常捕获

主函数中调用其他函数时,只要出现异常,都会传递到主函数的异常捕获中,不必在代码中增加大量的异常捕获,能够保证代码的整洁

raise 异常名 抛出异常

raise 异常名,附加数据

raise 类名

ex=Exception() 自定义异常

raiseex

主要的内置异常

AttributeError 调用不存在的方法引发的异常

EOFError 遇到文件末尾引发的异常

ImportError 导入模块出错引发的异常

IndexError 列表越界引发的异常

KeyError 使用字典中不存在的关键字引发的异常

NameError 使用不存在的变量引发的异常

TabError 缩进不正确

ValueError 搜索列表中不存在的值引发的异常

ZeroDivisionError 除数为零引发的异常

文件

withopen('自定义文件.im','wb') as f: 如果文件不存在则会自己创建一个

open() 将会返回一个file对象

open(filename, mode) filename:包含了你要访问的文件名称的字符串值。

mode:决定打开文件的模式:只读,写入,追加等。非强制,默认文件访问模式为只读(r)。

f.read(size) 当size被忽略或为负, 该文件所有内容被读取并返回。

f.readline() 从文件中读取单独的一行。返回空字符串, 说明已读取到最后一行

f.readlines() 返回该文件中所有行。

f.write(string) 将 string 写入文件, 返回写入的字符数。

f.close() 关闭文件

生成随机数

importrandom

random.seed(1111) 使每一次生成的随机数都一样

print(random.randint(1,90)) 在这个范围内随机取数

pickle模块

序列化(串行化):将对象转化为数据形式,并转储到磁盘文件或跨平台运输。

反序列化:磁盘中或接收到的数据形式恢复得到相应对象的过程。

序列化对象并保存到磁盘中,并在需要的时候读取出来,任何对象都可以执行序列化操作。

pickle.dumps(obj[, protocol]) 对象序列化为bytes对象

pickle.dump(obj, file, [,protocol]) 对象序列化到文件对象,存入到文件。

pickle.loads(string) 从bytes对象反序列化。

pickle.load(file) 对象反序列化,从文件读取数据.

远程接收端反序列化时候必须有对应的数据类型,否则就会报错。尤其是自己定义的类。远程有一致定义。

os模块

处理文件和目录

os.access(path, mode) path -- 检测是否有访问权限的路径。mode -- mode为F_OK,测试存在的路径。

os.F_OK: 测试文件path是否存在。 os.R_OK: 测试文件path是否可读。

os.W_OK:测试文件path是否可写。 os.X_OK:测试文件path是否可执行。

如果允许访问返回 True , 否则返回False。

os.getcwd() 输出当前工作目录。

os.remove() 删除指定路径的文件,如果指定的路径是一个目录,将抛出OSError。

os.listdir(dir) 获取指定目录下的所有子目录和文件名

os.rename(原文件名,新文件名) : 对文件或目录改名

time 和 calendar 模块

用于格式化日期和时间,时间间隔是以秒为单位的浮点小数。

每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。

time.sleep(2) 暂停两秒输出

time.strftime(format[, t]) 格式化日期

对象

id type value 一切皆为对象(都有属性)对象属性是实例对象拥有的属性,又称为实例属性。

a = 2

print(id(a))

print(type(a))

Python中一切都是对象,对象比较可以用 == 或者 is。

== 比较的是两个对象的内容是否相等,默认会调用对象的 __eq__() 方法。

is 比较的是两个对象的 id 是否相等,也就是是否是同一个对象,是否指向同一个内存地址。

面向对象:通过建立模型而达到的抽象。

模型:反映现实世界中事物特征,蓝图。

类:抽象的模板。

实例:实例是根据类创建出来的一个个具体的“对象”。

创建类:class接类名,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的.

创建实例:类名+()

类都有一个构造函数,Python 的构造函数为 __init__(), 它会在对象初始化的时候执行。

类的方法:封装数据的函数

与函数的区别:有一个额外的第一个参数名称self。

__init__方法第一个参数永远是self(代表类的实例,当前对象的地址),可把各种属性绑定到self。

调用方法:传入与方法匹配的参数(self不传,解释器把实例变量传入)

类的实例化(创建对象的过程):类似函数调用方式(赋值)

类属性:类对象所拥有的属性,被该类所有实例对象共有,可使用类对象或实例对象访问。

属性访问限制:让内部属性不被外部访问,属性的名前加上两个下划线__

实例的变量名以__开头,变成私有变量(private),只有内部可以访问

以双下划线开头,并以双下划线结尾的,是特殊变量,可直接访问,非private变量

继承:定义新的class时,可从某个现有class继承,新class称为子类,被继承class称为基类、父类或超类。

具有 子类 is a 父类 的关系,子类获得父类全部功能,可多继承

可在子类重写父类, super()函数

运算符重载:让自定义的类生成的对象(实例)能够使用运算符进行操作

算术运算符的重载:

方法名 运算符和表达式 说明

__add__(self,rhs) self + rhs 加法

__sub__(self,rhs) self - rhs 减法

__mul__(self,rhs) self * rhs 乘法

__truediv__(self,rhs) self / rhs 除法

__floordiv__(self,rhs) self //rhs 地板除

__mod__(self,rhs) self% rhs 取模(求余)

__pow__(self,rhs) self **rhs 幂运算

二元运算符的重载方法格式:

def __xx__(self,other):

语句块

多态:多种状态,子类也是父类的一种状态

命名空间

从名称到对象的映射,大部分命名空间通过Python字典实现,提供了在项目中避免名字冲突的一种方法

各个命名空间独立,没任何关系,一个命名空间中不能有重名,但不同命名空间可以重名而没任何影响。

一般有三种命名空间:

内置名称(built-in names), Python 语言内置的名称,比如函数名和异常名称BaseException、Exception等。

全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。

局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量(类中定义的也是)

迭代器

迭代器对象从集合的第一个元素开始访问到最后,只能往前不会后退。

迭代器有两个基本的方法:iter() 和 next()。

字符串,列表或元组对象都可用于创建迭代器

list=[1,2,3,4]

it = iter(list) 创建迭代器对象

print(next(it)) 输出迭代器的下一个元素

print(next(it))

把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。

__iter__()方法返回一个特殊的迭代器对象,这个迭代器对象实现了 __next__()

__next__()方法会返回下一个迭代器对象。

StopIteration异常标识迭代的完成,防止无限循环

在 __next__()方法中可设置完成指定循环次数后触发StopIteration结束迭代。

生成器: 使用了 yield 的函数,生成器就是一个迭代器。

遇到yield暂停并保存当前所有运行信息,返回 yield 的值,下次执行next()继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

正则表达式

搜索、替换、解析字符串。在源字符串中查找与给定正则表达式相匹配的部分。

由字母、数字和特殊字符组成

特殊字符(元字符):

$ 正则表达式结尾 \w 匹配字母、数字、字符串

^ 开头 \s 匹配空白字符

\d 匹配数字 \b 匹配单词的开始和结束

. 匹配任意字符,包括汉字 [m] 匹配单个字符串

[m1m2...n] 匹配多个字符串 [m-n] 匹配m到n区间内的数字、字母

[^m] 匹配除m以外的字符串 () 分组

[] 指定匹配范围

常用限定符(量词):

* 匹配零次或多次 + 匹配一次或多次

? 匹配一次或零次 {m} 重复m次

{m,n} 重复m到n次(n可以省略,表示m到任意次)

{} 控制字符重复次数

懒惰限定符:

*?重复任意次但尽可能少重复 +?重复1次或更多次但尽可能少重复

?? 重复0或1次但尽可能少重复 {n,m}重复n到m次但尽可能少重复

{n,} 重复n次以上但尽可能少重复

贪婪模式:尽可能多的去匹配

懒惰模式:尽可能少的去匹配

函数:

re.match()从头开始匹配

re.search()字符串中搜索匹配

re.findall()搜索字符串以列表形式返回

re.sub()替换

模式分组:():提取某一个内容

|:或,只匹配在字符串中出现的第一个

模式修正符:re.I:让表达式忽略大小写

re.M:多行匹配

re.L:本地化识别匹配

re.U:根据Unicode字符解析字符

爬虫

分类:通用爬虫(如搜索引擎)、聚焦爬虫(专门抓取某一个网站数据如抢票等)

流程:一、获取URL

二、向URL发送请求并获取响应(需要HTTP协议)

三、如果从响应中提取URL,则继续发生请求获取响应

四、如果从响应中提取数据,则保存数据

网络编程三要素:协议、主机、 端口

协议:

(传输层)TCP协议:传输控制协议。速度慢些 作用:保证传输数据的安全。应用:下载文件、浏览网页。(三次握手)

(传输层)UTP协议:不保证数据传输的可靠性,速度快些

robots协议:判断页面是否可以抓取,但仅仅是互联网中的一种约定.

(应用层)http、https的概念和区别:http: 超本文传输协议,规定传输数据的格式,建立在TCP协议之上.

特点:可靠传输,符合请求响应模型,无状态

https: HTTP + SSL,即带有安全套接字层的超本文传输协议

IP地址:互联网协议地址,网络中计算机设备的唯一编号. 分为IPv4与IPv6. ipconfig查看本机IP.

端口:

0-65535的数字. 1024之前都被操作系统保留,如80:http默认端口;21:ftp默认端口.

url的请求形式:scheme://host[:port#]/path/…/[?query-string][#anchor]

请求消息格式:请求行(请求头的第一行)

请求方式 uri 协议/版本号

请求头(很多名值对,名)

User-Agent:浏览器告知服务器,我是谁

Referer:浏览器告知服务器,我来自哪,防盗链

Cookie:修改之前服务器让浏览器保存的一些数据 名值对

模拟登陆和访问(http.cookiejar库中的CookieJar获取cookie)

保存cookie到文件,使用MozillaCookjar()

(会话技术:服务器解决多次响应之间共享数据的一项技术)

请求空行(回车换行符,分别请求头和请求体)

请求体(浏览器发送给服务器的额外数据)

常见的请求方法(7类)以及响应代码:get(无请求体) post(有请求体)

GET请求参数都显示在URL上,服务器根据该请求所包含URL中的参数来产生响应内容,是从服务器上获取指定页面信息Get请求的参数是URL的一部分。

POST消息长度没限制且以隐式方式发送,通常向服务器提交量大的数据(如请求中包含许多参数或文件上传等)POST请求的参数不在URL中,而在请求体中。向服务器提交数据并获取页面信息。

响应消息格式:响应行(响应头的第一行)

协议/版本号 响应状态码 描述

响应状态码: 1xx (略)

2xx 200服务器正常响应

3xx 302重定向 配合响应头location 服务器告诉浏览器去访问location指定的URL

304访问缓存

4xx 客户端异常 404服务器不存在访问的资源 405请求方式不支持

5xx 服务端异常 500服务器内部错误

响应头(很多名值对,名)

set-cookie:服务器让浏览器存储cookie数据

Content-Type:指定响应体中的数据的格式

响应空行(回车换行符,分别响应头和响应体)

响应体(浏览器发送给服务器的额外数据)

urllib库:

request模块:打开和读取URL

urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False,context=None)

估算网站大小:搜索引擎中搜索site:网址

识别网站所用技术:builtwith

寻找网站所有者:whois

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值