概述
06.28
1 Python中标识符有字母数字下划线;不能用数字开头,区分大小写.
1.1 以下划线开头的标识符代表不能直接访问的类属性,需要通过类提供的借口进行访问不能用form xx import * 而导入;
1.2 以双下划线开头的代表类的私有成员;
1.3以双下划线开头和结尾的代表Python里特殊方法专用的标识
如__init__()代表构造函数;
1.4可以一行显示多条语句,用;隔开就好
2 Python中没有大括号,靠缩进来写模块,同一模块缩进相同
3 Python中用/将一行语句显示为多行;如果语句中有括号就不需要了
4 Python的引号,可以使用单双三引号,三引号可以由多行组成,特定的地方被当做注释(注释也可以用'#'开头);
5 raw_input("nnPress the enter key to exit.") 等待用户输入
6 print输出是换行的如果不让换行的话需要在变量结尾加上,即可
7 缩进相同的玉足语句构成代码块.
8 变量无需声明,内存中创建的变量信息包括标识、名称和数据,不赋值不能使用,只分配空间,复制之后才会创建
9 赋值 按照正常人的理解就是对的
10 Python的标准数据类型: Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictoonary(字典)
11 数字数据类型用于存储数值,如果改变会分配新的对象;Python支持四种不同的数字类型:int long(使用大写的L来显示长整型) float complex
12 字符串下标从0开始; s[1,5] 包括前边界,不包括后边界;list 类似
13 元组:不能二次赋值,相当于只读列表,使用()分割
14 字典是无需的对象集合,通过键存取;元组和列表是通过偏移存取,使用{}包裹,由索引key和它对应的值组成;
15 Python的数据类型转换:
相当于构造,用的时候查吧 不知道base是什么东西
16 Python的位运算符:将数值全部转为二进制 & 都为1 结果是1
| 一个为1 结果就是1
^ 互异时为1
~ 取反
>> << 右移和左移 符合二进
17 Python的逻辑运算符: and x and y 如果x为false 返回False 否则返回y的值
or x or y 如果x非0 返回x 否则 返回y
not 反向
18 Python的成员运算符: a in b 和 a not in b 返回值也是布尔值
19 Python身份运算符: is 和 is not 使用id()获取对象的内存地址值
20 Python的运算符优先级
运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not or and 逻辑运算符
21 Python会为每个出现的对象分配内存,哪怕值完全相同 较小的int值类似于java 会只分配一次
22.使用def定义函数,不需要返回值,其他格式和java类似
23. 在python中,strings,tuples,和numbers是不可更改的对象,而list,dict等则是可以更改的对象;传递参数的时候类似于引用类型和实际类型
24.python中的参数:
1.关键字参数 和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
2.必须参数 在调用方法时必须传递的参数,不传会报错
3.默认参数 在不传递时使用卡默认值
4.不定长参数 参数列表有普通和不定长两种,传入的符合哪种用哪种 没有命名
25.匿名函数:
lambda 参数 参数 参数 :表达式 可以通过赋值为匿名函数起名
26. return 语句 函数的返回值
27.变量作用域
L(Local) 局部作用域
E(Enclosing) 闭包函数外的函数中
G(Global) 全局作用域
B(Built-in) 内建作用域
x=int(2.9) 内建作用域
g_count=0 全局作用域
def function():
o_count=1 闭包函数外的函数中
def inner():
i_count=2; 局部作用域
28.global和nonlocal关键字
当在局部修改全局变量时 要使用global关键字;
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
要修改前台作用域(enclosing作用域,外层非全局作用域)中的变量需要用nonlocal;
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
29.数据结构:
1.列表:很多方法类似于java中的list
del 语句可以依照索引而不是值来删除一个切割或整个列表;
2.元组和序列 由若干逗号分隔,括号包裹
==使用enumerate()函数同时得到索引位置和对应值;两个或者更多的序列可以使用zip()组合;使用reversed()函数反向遍历,使用sorted()函数返回一个已经排序的序列,不修改原值;
3.集合:无序不重复元素的集;基本功能包括关系测试和消除重复元素;使用大括号包裹,创建空集合使用set();
==遍历:可以使用items()方法同时解读出
30.模块:
1、import sys 引入 python 标准库中的 sys.py 模块;这是引入某一模块的方法。
2、sys.argv 是一个包含命令行参数的列表。
3、sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表。
4.import 模块名
5.from 模块名 import 函数名
6.模块被第一次引入时,主程序将运行,如果想组织这种情况,使用_name_属性;
if __name__ == '__main__':
print('程序自身在运行')
else:
print('我来自另一模块')
7.dir()函数;找到模块内定义的所有名称,以字符串列表形式返回;
8.导包的时候,如果_init_.py中存在yi9ge较_all_的列表变量,才会把包下所有的模块导入,如果不存在,只会导入包含内容 有可能会执行_init_.py中的内容;
31.输出:表达式语句和print()还有使用文件对象的write()方法;
1.str.format()函数格式化输出值
print('{}网址: "{}!"'.format('菜鸟教程', 'www.runoob.com'))
2.str()或者repr()将输出的值转为字符串;
32.open()将会返回一个file对象,open(文件名称,文件打开模式---默认只读)
33.文件的读取:文件名.read(size);如果size被忽略或者是为负,将会读取整个文件;readline()读取一行,返回值为读取到的内容;readlines(sizeint)返回所有行,如果设置sizeint,读取指定长度将内容按行分隔;
34.write(str),将str写如文件,并返回写入的内容;tell(),返回文件对象当前所处的位置,从文件头开始算起的字节数;seek(偏移量,从什么位置开始--默认是0从文件头开始--1标识当前位置--2标识文件结尾;);close()释放资源,其他方法isatty() 和 trucate();
35pickle模块实现序列化和反序列化: pickle.dump(数据,文件对象);
36.文件对象的方法:读写查找,特殊方法有file.isatty():如果文件连接到一个终端设备返回true,否则返回false,什么叫连接到一个终端设备?file.truncate([size])从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
37.OS提供更多的对文件和目录的处理方法;
38.编译错误和运行异常,和java类似:多出一个else语句,只在try字句中没有发生异常的情况下执行与java中的finally块不一样!通过raise抛出异常,也可以自定义异常,也有finally最终执行块;使用关键词with在代码执行完毕之后进行清理任务(比如文件关闭);
39.Python中类的继承是允许多继承的,其他的与java类似,构造方法_init_(),可以传参,self(不是python的关键词)代表的是对象,而不是类本身;类的方法中必须包括self,且为第一个参数,self代表的是类的实例;两个下划线 开头的是私有的,只能在内部通过对象调用;
40.标准库概览
OS中有用的方法:
1.引包 import os
2.方法
os.getcwd() 返回当前目录
os.chdir() 修改当前工作目录
os.dir() 返回文件列表
os.help() 帮助
3.shutil模块中有操作文件的方法
4.glob 提供函数用于从目录通配符搜索中生成文件列表
5.sys模块有argv变量 链表的形式存储一些经常调用的命令行参数;
还有stdin,stdout,stderr属性,及时在stdout被重定向之后,后者也可以用于显示警告和错误信息
6.re模块为高级字符串处理提供了正则表达式;
7.math模块为浮点运算提供了对底层C函数库的访问,random提供了生成随机数的工具
8.访问互联网的urllib.request和发送邮件的smtplib
9.datatime模块处理日期和时间
10.zlib提供压缩
11.timeit可以测试解决同一问题不同方法性能
12.doctest提供测试方法;unittest可以在一个独立的文件里提供一个更加全面的测试集;
41.正则表达式:
re.match(正则表达式,要匹配的字符串,标志位--用于控制正则表达式的匹配方式);职匹配字符串的开始,匹配成功返回对象,不成功返回none;
group(num)和groups():匹配对象函数来获取匹配表达式。
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print ("matchObj.group() : ", matchObj.group())
print ("matchObj.group(1) : ", matchObj.group(1))
print ("matchObj.group(2) : ", matchObj.group(2))
else:
print ("No match!!")
以上实例执行结果如下:
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
re.search扫描整个字符串并返回第一个成功的匹配,语法同match;
re.sub用于替换字符串中的匹配项;
re.sub(正则,要替换的,被替换的,替换几个)
07.12
Python的CGI编程:
语言是互通的,使用print()向客户端写html代码,和之前初学Servlet的时候是一样的;
Python的数据库连接:
1. 使用的是PyMysql,首先获取连接,然后获取游标,执行语句;在执行语句的时候通过变量来给sql语句中传递参数;
2. 查询的时候是用fetchone()和fetchall()获取数据.使用rowcount获取影响行数;
3.增删改的时候,需要在执行sql之后进行commit()操作,出现错误回滚,控制事务;
4.数据库操作错误:
Warning 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。
Error 警告以外所有其他错误类。必须是 StandardError 的子类。
InterfaceError 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。
DatabaseError 和数据库有关的错误发生时触发。 必须是Error的子类。
DataError 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。
OperationalError 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。
IntegrityError 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
InternalError 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。
ProgrammingError 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。
NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。
Python的网络编程:
1.两个级别访问的网络服务:
低级别的网络服务支持基本的Socket,提供了标准的BSD Sockets API,可以访问底层操作系统的Socket接口的全部方法;
高级别的网络服务模块SocketServer,提供服务中心类,简化网络服务器开发;
2. Socket:套接字,被用来发送或者应答请求,实现主机之间或者一台计算机上的进程之间的相互通信;
Socket()函数:
socket.socket(family(套接字家族可以使AF_UNIX或者AF_INET),type(可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM),不填默认为0);
Python使用SMTP发送邮件:
1. 类似于socket的用法,smtplib.SMTP(服务器主机,端口号,服务器地址)
2. 设置之后可以使用对象.sendmail(发件人,收件人,信息(构成))
#!/usr/bin/python3
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 第三方 SMTP 服务
mail_host="smtp.XXX.com" #设置服务器
mail_user="XXXX" #用户名
mail_pass="XXXXXX" #口令
sender = 'from@runoob.com'
receivers = ['429240967@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("菜鸟教程", 'utf-8')
message['To'] = Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print ("邮件发送成功")
except smtplib.SMTPException:
print ("Error: 无法发送邮件")
3. 发送附件的时候,需要创建MIMEMutipart()
#!/usr/bin/python3
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
sender = 'from@runoob.com'
receivers = ['429240967@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
#创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("菜鸟教程", 'utf-8')
message['To'] = Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
#邮件正文内容
message.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain', 'utf-8'))
# 构造附件1,传送当前目录下的 test.txt 文件
att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att1)
# 构造附件2,传送当前目录下的 runoob.txt 文件
att2 = MIMEText(open('runoob.txt', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="runoob.txt"'
message.attach(att2)
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message.as_string())
print ("邮件发送成功")
except smtplib.SMTPException:
print ("Error: 无法发送邮件")
07.17
Python的多线程:
Python3线程中常用的两个模块是:_thread和threading(推荐使用);
1._thread提供了低级别的、原始的线程以及一个简单的锁;
_thread.start_new_thread ( function, args[, kwargs] );
function - 线程函数。
args - 传递给线程函数的参数,他必须是个tuple类型。
kwargs - 可选参数。
2.threading模块除了_thread中的方法外,还有threading.currentThread()--返回当前线程变量;threading.enumerate()--返回一个包含正在运行的线程list;threading.activeCount():返回正在运行的线程的数量;
3.同样提供Thread类的方法:run(),start(),jion(time):等待之线程终止;
4.同步锁:threading,lock(),返回对象(同时会有线程参数组,必须添加进去才能使用)有两个方法,获得锁是acquire(),释放锁是release()
5.线程优先级队列:
Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO队列Queue,LIFO队列LifoQueue,和优先级队列PriorityQueue.
创建对象:workQueue=queue.Queue();
Python解析XML:
Python中的Json数据解析:
json.dumps():对数据进行编码
python的原始类型与json类型转换:
dict===object
list,tuple==array
str=string
int,float,int- & float-derived Enums=Number
true=true
false=false
none=null
json.loads():对数据进行解码
json解码为python类型转换对应表:
object=dict
array=list
string=str
number(int)=int
number(real)=float
true=true
false=false
null=none
Python3中的日起和时间:time和calendar模块可以用于格式化日起和时间,时间间隔是以秒为单位的浮点小数.
1.time模块
常用函数:time.time()获取当前时间,使用time.localtime()将当前时间转换为时间元组struct_time,获取可读的时间模式time.asctime()将非格式化时间转换过来;使用time.strftime()方法来将日期格式化成各种格式;
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
2.calendar模块
3.datetime模块
07.20
Python爬虫编写:
实质就是利用http请求和响应读取网页内容;要注意编解码,注意传递参数时需要进行url编码
-----关于pass------
没有逻辑,为了防止语法错误,不能不写!
while 1:
pass
-----关于with------
基本的with表达式格式 with EXPR(任意表达式) as VAR(可选): BLOCK
过程:1.执行EXPR,获取一个上下文管理器
2.上下文管理器的__exit()__方法被保存起来用于之后的调用
3.调用上下文管理器的__enter()__方法
4.如果with表达式中含有asVAR,nameEXPR的返回值被赋值给VAR
5.执行BLOCK中的表达式
6.调用上下文管理器的__exit()__方法,如果发生异常,那么异常的type,value和traceback将作为参数传递给__exit()__,否则传递三个none
-----关于编码问题-----
什么编什么解,在使用python爬虫时,利用httpresponse返回的HTML的内容是经过ISO8859-1编解码之后,使用UTF-8编码之后的内容;使用utf-8解码之后,可以的到正常的Unicode字符,这些字符如果要打到控制台上,必须使用GBK编码,Win7的CMD,默认codepage是CP936,即GBK的编码,因为内容中含有一些GBK无法显示的字符,所以会出现‘gbk’ codec can’t encode character异常!
最后
以上就是机灵奇异果为你收集整理的Python初级笔记的全部内容,希望文章能够帮你解决Python初级笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复