本笔记来源于以下:
《Head First Python》
有效使用IDLE
TAB:提供建议
Alt-P:回退到IDLE中之前输入的代码语句
Alt-N:移到下一个代码语句
BIF
BIF会自动导入到__main__
命名空间,但是有它们自己的命名空间,这个命名空间为__builtins__
dir(__builtins__)
:可以看到python提供的内置方法列表
print()
:把消息显示到标准输出(通常是屏幕,在python中,是指"sys.stdout",可以从标准库的"sys"模块导入),会模仿python解释器实际存储列表数据的格式来显示数据,所得到的输出不再做进一步处理,只是告诉数据在内存中的样子
print('norwegian', file=out)
len()
:得出列表中有多少个数据项
isinstance(names, list)
:允许检查某个特定标识符是否包含某个特定类型的数据
list()
:工厂函数,创建一个新的空列表
range()
:返回一个迭代器,根据需要生成一个指定范围的数字
enumerate()
:创建对数据的一个编号列表,从0开始
int()
:将一个字符串或另一个数转换为整数
id()
:返回一个python数据对象的唯一标识
next()
:返回一个可迭代数据结构(如列表)中的下一项
open()
:打开一个磁盘文件,创建一个迭代器从文件读取数据,一次读取一个数据行
type()
:查看标识符是哪种数据类型
input()
:接收键盘输入,把输入的内容作为一个字符串返回给代码,而且已经去除了尾部的所有换行符
in = open('in.txt')
# 使用访问模式w时,如果这个文件已存在,会清空它现有的内容
out = open('out.txt','w')
# 追加到一个文件,使用访问模式a
aout = open('out.txt', 'a')
# 打开一个文件来完成写和读(不清除),使用w+
in_and_out = open('in_and_out.txt', w+)
# 如果想打开一个文件完成写,但是不存在,首先会创建这个文件,然后再打开文件进行写
locals():返回当前作用域中定义的所有名的一个集合
标准库
glob()
适合处理文件名列表
import glob
data_files = glob.glob("data/*.txt")
cgitb()
允许在浏览器中查看CGI编码错误
import cgitb
cgitb.enable()
列表使用方法
声明:cast = ["Palin", 'Jones']
访问:cast[1]
在列表末尾增加一个数据项:cast.append("Gill")
从列表末尾删除数据:cast.pop()
在列表末尾增加一个数据项集合:cast.extend(['chap', 'gill'])
在列表中找到并删除一个特定的数据项:cast.remove('chap')
del items[1]
在列表中某个特定的位置前面增加一个数据项:cast.inserst(0, 'chapman')
在列表中删除并返回列表最前面的数据项:pop(0)
列表可以包含混合类型的数据
for 循环处理任意大小的列表
for 目标标识符 in 列表:
列表处理代码
需要说明的是:列表处理代码成为“组”,目标标识符类似于代码中的任何其他名。迭代处理时,相应的会把列表中的各个数据值分别赋至目标标识符,修改该值并不会改变真正的值。
元组:('a', 'b')
列表推导
以下两种等价
clean_mikey = []
for each_t in mikey:
clean_mikey.append(sanitize(each_t))
clean_mikey = [sanitize(each_t) for each_t in mikey]
列表切片
james[0:3]
函数的使用方法
定义方法:
def 函数名(参数):
函数代码组
注释代码
如果使用了一个三重引号,而没有将它赋至一个变量,三重引号之间的所有内容都被认为是一个注释
"""This is the
include a
you code."""
“#”符号,从这一点直到当前行末尾的所有内容都是注释
a = 1 #blabla
模块的使用方法
查看python模块放在计算的什么位置
import sys
print(sys.path)
安装模块到本地副本中
-
首先为模块创建一个文件夹
创建了文件夹后,将模块文件复制到这个文件夹中。
-
在新文件中创建一个名为“setup.py”的文件
这个文件包含了有关发布的元数据
# 从python发布工具导入"setup"函数 from distutils.core import setup setup( name = 'nester', version = '1.0.0', # 将模块的元数据与setup函数的参数关联 py_modules = ['nester'], author = 'hfpython', author_email = 'hfpython@headfirstlabs.com', url = 'http://www.headfirstlabs.com', description = 'A simple printer of nested lists', )
-
构建一个发布文件
在上述文件夹中打开一个终端窗口,键入命令
python3 setup.py sdist
-
将发布安装到python本地副本中
python setup.py install
发布工具创建了一个pyc文件,是解释器第一次执行模块代码时,它会读入代码,并转换为一种中间字节码格式,最终所要执行的就是这些字节码,可以让程序运行更快。
-
导入模块并使用
# the first method import nester cast = ['a', 'b'] # 如果想指示另外一个模块命名空间的某个函数,就需要用该模块的命名空间名对这个函数的调用加以限定 nester.print_lol(cast) # the second method from nester import print_lol cast = ['a', 'b'] print_lol(cast)
from module import function
形式会把当前命名空间中已定义的名字被导入的名字重写
切换当前工作目录
# 从标准库中导入os
import os
# 当前工作目录是什么
os.getcwd()
# 切换为包含数据文件的文件夹
os.chdir('../HeadFirstPython/chapter3')
os.getcwd()
文件操作
readline():从一个打开的文件读取一行数据
seek():用来将文件“退回”到起始位置
the_file = open('a.txt')
print(the_file.readline(), end='')
print(the_file.readline(), end='')
the_file.seek(0)
for each_line in the_flie:
print(each_line, end='')
the_file.close()
用with处理文件
不再需要操心关闭打开的文件,因为Python解释器会自动考虑这一点,以下两个代码是等同的,with语句利用了一种名为上下文管理协议的技术
try:
data = open('its.txt', 'w')
print("it's..", file=data)
except IOError as err:
print("File error: " + str(err))
finally:
if 'data' in locals():
data.close()
try:
with open('its.txt', 'w') as data:
print("it's...", file=data)
except IOError as err:
print("File error: " + str(err))
python 字符串
split()
str.split((str="", num=string.count(str)):返回一个字符串列表,这会赋至一个目标标识符列表,也叫多重赋值。
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
num – 分割次数。默认为 -1, 即分隔所有。
(role, line_spoken) = each_line.split(':')
(role, line_spoken) = each_line.split(':', 1)
find()
找出一个字符串中的子串,如果无法找到,返回-1。如果可以找到,会返回该子串在原字符串中的索引位置
strip()
从字符串中去除不想要的空白符
line_spoken = line_spoken.strip()
strip()方法会创建一个新的字符串,其中去除了原字符串中前面和后面的空白符,这个新字符串再赋至line_spoken,取代之前所指示的数据
upper()
s.upper()
处理异常
python的异常处理机制允许错误出现,但监视它的发生,然后给你一个机会来恢复
try/except/finally机制
try:
# 代码
except:
# 错误恢复代码
finally:
# 无论出现什么错误都必须运行
data = open('a.txt')
for each_line in data:
try:
(role, line_spoken) = each_line.split(':', 1)
print(role, end='')
print(line_spoken, end='')
except:
pass
data.close()
特定指定异常
try:
data = open('a.txt')
for each_line in data:
try:
(role, line_spoken) = each_line.split(':', 1)
print(role, end='')
print(line_spoken, end='')
except ValueError:
pass
data.close()
except IOError:
print('The data file is missing!')
产生一个异常并由except组处理时,python解释器将一个异常对象传入这个except组。
except IOError as err:
print('File error: ' + str(err))
pickle
用dump保存,用load恢复,必须以二进制访问模式打开这些文件
import pickle
try:
with open('man_data.txt', 'wb') as man_data, open('other_data.txt') as other_data:
pickle.dump(man, man_data)
pickle.dump(other_data, other_data)
except IOError as err:
print("File Error: " + str(err))
except pickle.PickleError as perr:
print("Pickling error: " + str(perr))
import pickle
try:
with open("my_data.pickle", 'wb') as my_data:
pickle.dump([1, 2, 'three'], my_data)
with open('mydata.pickle', 'rb') as my_restore_data:
a_list = pickle.load(my_restore_data)
print(a_list)
except IOError as err:
print("File Error" + str(err))
方法串链
data.strip().split(',')
排序
sort()
原地排序,是指按指定的顺序排列数据,然后用排序后的数据替换原来的数据。
data.sort()
sorted()
复制排序,是指按指定的顺序排列数据,然后返回原数据的一个有序副本。
data2 = sorted(data)
降序排序只需要传入参数reverse=True
集合
创建集合
# set()是工厂函数,会创建一个新的集合
distances = set()
distances = {10.5, 11, 8, 10.6, 10.6}
distances = set(james)
字典
创建字典
clease = {}
palin = dict()
类
类中定义的每个方法都必须提供self作为第一个参数
类中的每个属性前面都必须有self,从而将数据与其实例关联
class Athlete:
# self参数可以帮助标识要处理哪个对象实例的数据
def __init__(self):
# The code to initialize a "Athlete" object.
class Athlete:
def __init__(self, value=0):
self.thing = value
def how_big(self):
return(len(self.thing))
d = Athlete("Holy Grail")
d.how_big()
# python执行的代码是
Athlete.__init__(d, "Holy Grail")
Athlete.how_big(d)
继承
class NamedList(list):
def __init(self, a_name):
list.__init__([])
self.name = a_name
johnny = NamedList("John")
johnny.append("Bass Player")
johnny.extend(['Composer', 'Arranger', "Musician"])
python字符串
字符串替换
template = "hello %s , your website is %s " % ("大CC","http://blog.me115.com")
print(template)
template = "hello {0} , your website is {1} ".format("大CC","http://blog.me115.com")
print(template)
字符串命名格式化符替换
template = "hello %(name)s ,your name is %(name), your website is %(message)s" %{"name":"大CC","message":"http://blog.me115.com"}
print(template)
template = "hello {name} , your name is {name}, your website is {message} ".format(name="大CC",message="http://blog.me115.com")
print(template)
模板方法替换
from string import Template
tempTemplate = Template("Hello $name ,your website is $message")
print(tempTemplate.substitute(name='大CC',message='http://blog.me115.com'))
from string import Template
tempTemplate = Template("There $a and $b")
d={'a':'apple','b':'banbana'}
print(tempTemplate.substitute(d))
类属性
@property
def top3(self):
return(sorted(set([self.sanitize(t) for t in self]))[0:3])
print(athletes[athlete_name].top3)
web开发
静态内容:比如一个HTML文件、图像或存储在Web服务器硬盘上的任何其他内容。
动态内容:内容必须动态生成,Web服务器会运行一个程序来生成Web相应。
通用网关接口(Common Gateway Interface,CGI):生成动态内容的过程的标准,符合这个标准的程序通常称为CGI脚本。
MVC设计模式
模型:存储(以及有时处理)Web应用数据的代码
试图:格式化和显示Web应用用户界面的代码
控制器:将Web应用“粘合”在一起并提供业务逻辑的代码
文件夹结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5GVCTDpT-1631013801983)(C:\Users\10933\Desktop\Webapp.png)]
python自己的web服务器
# 导入HTTP服务器和CGI模块
from http.server import HTTPServer, CGIHTTPRequestHandler
# 指定端口
port = 8080
# 创建一个HTTP服务器
httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
# 显示友好消息
print("Starting simple_httpd on port: " + str(httpd.server_port))
# 启动服务器
httpd.serve_forever()
访问表单数据
# 导入cgi库
import cgi
# 获取所有表单数据并放在一个字典中
form_data = cgi.FieldStorage()
athlete_name = form_data['which_athlete'].value
启用CGI跟踪来帮助解决错误
CGI标准指出服务器端程序(你的CGI脚本)生成的任何输出都会由Web服务器捕获并发送到等待的Web浏览器,也就是说会捕获发送到STDOUT(标准输出)的所有内容。
但是CGI脚本上产生一个异常时,Python就把错误消息显示在STDERR(标准错误输出)上。CGI机制会忽略这个输出,因为它想要的只是CGI脚本的标准输出。
但是Python的标准库提供了一个CGI跟踪模块(名为cgitb),启用这个模块时,会在Web浏览器上显示详细的错误信息。
import cgitb
cgitb.enable()
移动开发
安卓手机如何使用Google Play
数据库
“数据库”:一个或多个表的集合
“表”:一个或多个数据行的集合,每个数据行包括一个或多个行
“SQL”:全名是“结构化查询语言”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKk9Iyy4-1631013801988)(C:\Users\10933\Desktop\数据库操作流程.png)]
# 导入库
import sqlite3
# 建立与数据库的连接,其中test.sqlite磁盘文件用来保存数据库和数据库表
connection = sqlite3.connect('test.sqlite')
# 创建数据游标
cursor = connection.cursor()
# 执行一些SQL操作
cursor.execute("""SELECT DATE('NOW')""")
# 提交所做的修改,使得修改永久保留
connection.commit()
# 完成时关闭连接
connection.close()
import sqlite3
connection = sqlite3.connect('coachdata.sqlite')
cursor = connection.cursor()
cursor.execute("""CREATE TABLE athletes (
id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
name TEXT NOT NULL,
dob DATE NOT NULL )""")
cursor.execute("""CREATE TABLE timing_data (
athlete_id INTEGER NOT NULL,
value TEXT NOT NULL,
FOREIGN KEY (athlete_id) REFERENCES athletes)""")
connection.commit()
connection.close()
cursor.execute("INSERT INTO athletes (name, dob) VALUES (?,?)", (name, dob))
cursor.execute("SELECT id from athletes WHERE name=? AND dob=?", (name, dob))
# 返回下一个数据行
cursor.fetchone()
# 返回多个数据行
cursor.fetchmany()
# 返回所有数据
cursor.fetchall()
关闭连接时,游标也会撤销