1. 数据类型
Python是动态语言,运行期确定类型,但是是强类型语言,类型确定后不可改变
不支持行内赋值
1.1 List
list = [“a”, “b”, “c”] #help(list)各元素的数据类型可以不同
list.append(1) #追加一个元素
list.remove(“a”) #移除元素值为”a”的元素
list[0 ] #”a”
list[-1] # “c”
lsit[0:-1] #[“a”, “b”]
list[:1] #[“a”]
list[1:] #[ “b”, “c”]
del list[0] #删除元素
list.extend(list2) #追加一个list
list2 = list #列表赋值类似指针
del list[0]
list2 #[ “b”, “c”]
但是如果:
list2 = list[:] #复制
del list[0]
list2 #[ “b”, “c”]
list的解析
for elem in list:
#代码
1.2 Dictionary
dictionary = {“key1”:”value1”, “key2”:”value2”}
key不可变,value可变,类型也可变
del dictionary[“key1”] #删除元素
dictionary.items() #[(“key1”,”value1”),( “key2”,”value2”)]
dictionary的解析
(k,v)for k, v in dictionary.items()
1.3 Truple
Truple = (1,2,3)
元素不能修改,但是读取速度快,可以作为dictionary的key(因为不可变,list不可),可以和list相互转换
# 注释
print #打印,逗号隔开 例如“%s = %s”%(k,v) %与c相同
data = input(“说明”) #输入
** #幂运算符
Sleep(seconds)
2.语法
if表达式:
#代码
elif 表达式:
#代码
else:
#代码
while 表达式:
#代码
for in:
#代码
for num in range(0,100): #range [)
print num
for char in [“a”, “b”]:
print char
过滤列表 for in if
and与
or 或
and or: 有点类似c中的bool?a:b
3.函数
def function(paramter): #parameters以逗号隔开, 可以使用默认值,规则同C
“””doc string “”” #可以不用给出,用来说明函数可以做什么,键入函数名时的提示工具
#代码 return 可返回一个值
def func(a, b=0, c=1):
#代码
可以有如下调用调用
func(0)
func(0, 1)
func(0, c=2)
func(c=2, a = 1)
函数局部变量和全局变量
函数中的局部变量会屏蔽全局变量, 使用global
age = 0
def setAge():
global a
a = 2
locals 返回列表, 元素为dict, 值为: 局部变量明 = 值
type函数:返回变量类型 type(1) #<type ‘int’>
dir函数: 返回对象的属性和方法列表
callable函数: callable(x) 如果x时可调用的(方法),则返回True
getattr函数: getattr(object, property)返回object的方法或属性的引用.
lambda函数: 内联单行函数
例如 lambda x: x*2 #参数为x, 返回x*2
str(obj) 返回obj对象的字符串,如果x为空,则返回”None”
4.类
4.1 类定义
class classname(superclass): #继承
classdata = {} #一个类属性, 它在创建任何类实例之前就有效了.相当于java/c++的static data
def _init__(self, parameters): #构造
self.data = {} #数据属性,像局部变量一样,当你首次赋给它值时产生.
superclass.__inti__(self) #要调用父类的函数
def __del__(self):
superclass.__del__(self) #析构
obj = classname() #定义对象
如果一个 Python 函数,类方法,或属性的名字以两个下划线开始 (但不是结束),它是私有的;其它所有的都是公有的。
所有的专用方法 (像 __setitem__) 和内置属性 (像 __doc__) 遵守一个标准的命名习惯:开始和结束都有两个下划线. 它是公有的.
严格地说,私有方法在它们的类外是可以访问的,只是不容易处理。在 Python 中没有什么是真正私有的;在内部,私有方法和属性的名字被忽然改变和恢复,以致于使得它们看上去用它们给定的名字是无法使用的.你可以通过 _MP3FileInfo__parse 名字来使用 MP3FileInfo 类的 __parse 方法.
4.2 userdict封装类
是一个有着像字典一样的行为方式的类.
一些方法:
clear 方法删除它的所有关键字和关键字相应的值.
update 方法是一个字典复制器:它把一个字典中的键和值全部拷贝到另一个字典.
__setitem__ 设置关键字触发__setitem__ 方法
__getitem__ 获取关键字触发__ getitem __ 方法
__repr__ 是一个专用的方法,在当调用 repr(instance) 时被调用。repr 函数是一个内置函数,它返回一个对象的字符串表示。它可以用在任何对象上.
__cmp__ 在比较类实例时被调用。通常,你可以通过使用== 比较任意两个Python对象
__len__ 在调用 len(instance) 时被调用。
__delitem__ 在调用 del instance[key] 时调用
5.异常
KeyError 使用不存在的字典关键字
ValueError 搜索列表中不存在的值
AttributeError 调用不存在的方法
NameError 引用不存在的变量
TypeError 未强制转换就混用数据类型
IOError 文件打开异常
ImportError 模块导入异常
try:
except:
#处理之后将正常继续,从 try...except 块的下一行代码/finally开始.
finally:
raise Exception(“description”) #抛出异常
6.文件读写
f = open(filename, mode, bufferparameter) #可以接收三个参数:文件名, 模式(r w a b)和缓冲区参数(可选)
f.tell() #打开文件中的当前位置
f.seek(-128, 2) #0表示移动到一个绝对位置0 (从文件起始处算起),1 表示移到一个相对位置 (从当前位置算起),还有 2 表示相对于文件尾的位置。因为我们搜索的
tagData = f.read(128) #readline读一行 readlines读全文到一个列表,每一行为列表元素
f.write('line 2')
f.close()
f.closed #False or True
7.模块Module
以.py结尾, 每一个模块都是对象, python的任何东西都是对象
__name__ == “__main__”模块被运行,否则模块被import
import othermodule #模块导入,需要使用othermodule. 调用othermodule中的属性或方法
from …import othermodule #将其他模块中的属性导入到自己模块
7.1 OS模块
>>> os.path.join("c:\\music\\ap\\", "mahadeva.mp3") #把一个或多个部分路径名连接成一个路径名.
"c:\\music\\ap\\mahadeva.mp3"
>>> os.path.expanduser("~") #将对使用 ~ 来表示当前用户根目录的路径名进行扩展
'c:\\Documents and Settings\\mpilgrim\\My Documents
>>> (filepath, filename) = os.path.split("c:\\music\\ap\\mahadeva.mp3") #分割路径
('c:\\music\\ap','mahadeva.mp3')
>>> (shortname, extension) = os.path.splitext(filename) #分割文件名
('mahadeva'',‘.mp3')
>>> os.listdir("d:\\") #返回目录的内容的 list
['$RECYCLE.BIN', 'CCShare', 'Info.csv', 'Info.xls', 'Program Files', 'share', 'sina.html', 'SoftWare', 'System Volume Information', 'Users', 'Work']
os.path.isdir(dirpath)
os.path.isfile(filepath)
os.path.normcase(f) #根据操作系统的缺省值对大小写进行标准化处理
os.system(command) #执行系统命令
os.sep #会根据你的操作系统给出目录分隔符
7.2 Time模块
time.strftime('%Y%m%d%H%M%S') #得到当前时间
8.正则表达式
所有和正则表达式相关的功能都包含在 re 模块中.
8.1 紧凑正则表达式
string$ 以string 结尾
^string 以string开头
r”\bstring\b” \b为边界,string为单独出现的字符串 r表示字符串中所有字符都不转义,否则必须为\\bstring\\b
string?string?string? string是可选匹配,最多可以匹配三次
(A|B|C) 这个语法的含义是“精确匹配A、B 或者 C 其中的一个
例如: '^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$'
{n,m}
例如: '^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'
\d{3} \d:(0,9)任何一个数字,{3}精确匹配三个数字
r'^(\d{3})\D+(\d{3})\D+(\d{4})\D+(\d+)$' \D 匹配任意字符,除了数字位,+ 表示1个或者多个,*表示0个或者多个
>>> phonePattern = re.compile(r'^(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') (1)
>>> phonePattern.search('80055512121234').groups() (2) ('800', '555', '1212', '1234')
8.2 松散正则表达式
pattern = """
^ # beginning of string
M{0,3} # thousands - 0 to 3 M's
(CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
# or 500-800 (D, followed by 0 to 3 C's)
(XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
# or 50-80 (L, followed by 0 to 3 X's)
(IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
# or 5-8 (V, followed by 0 to 3 I's)
$ # end of string
"""
忽略注释,换行,空白,回车,制表符. 如果正则表达式中包含上述字符,需要在前面加上\进行转义.当使用松散正则表达式时,最重要的一件事情就是:必须传递一个额外的参数 re.VERBOSE,该参数是定义在 re 模块中的一个常量,标志着待匹配的正则表达式是一个松散正则表达式。正如你看到的,这个模式中,有很多
re.search(pattern, 'M', re.VERBOSE)
8.3 re模块方法
re.sub(regex, newstr, str) 在str中用newstring替代regex
re. search (regex, str) 在str中寻找regex
9.HTML处理
9.1 SGMLParser
1 from sgmllib import SGMLParser
2
3 class BaseHTMLProcessor(SGMLParser):
4
5 def reset(self):
6
7 SGMLParser.reset(self)
8
9 def handle_data(self, text):
10
11 # called for every block of text in HTML source
12
13 def start_pre(self, attrs):
14
15 # called for every <pre> tag in HTML source
16
17 def end_pre(self):
18
19 # called for every </pre> tag in HTML source
20
21
22
23 from sgmllib import SGMLParser
24
25 class URLLister(SGMLParser):
26
27 def reset(self):
28
29 SGMLParser.reset(self)
30
31 self.urls = []
32
33 def start_a(self, attrs):
34
35 href = [v for k, v in attrs if k=='href']
36
37 if href:
38
39 self.urls.extend(href)
9.2 urllib
1 >>> import urllib
2
3 >>> sock = urllib.urlopen("http://diveintopython.org/")
4
5 >>> htmlSource = sock.read()
6
7 >>> sock.close()
8
9 >>> print htmlSource
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?