疯狂的Python
2016-01-25 20:13:31 17 举报
AI智能生成
疯狂的Python,是一段充满活力和创造力的代码。它如同一只顽皮的猴子,跳跃在编程世界的枝头,时而翻滚,时而攀爬。它的逻辑清晰,结构紧凑,仿佛一首优美的交响乐。它的执行速度迅疾,效率极高,让人惊叹不已。疯狂的Python,不仅仅是一段代码,更是一种艺术,一种哲学。它教会我们如何用最简单的方式解决问题,如何用最优雅的方式表达思想。疯狂的Python,是我们追求卓越,挑战极限的象征。
作者其他创作
大纲/内容
高级动态编程语言
import py_compile
py_compile.compile(\"hello.py\")
生成hello.pyc字节码
预编译
python -O -m py_compile hello.py
生成hello.pyo
优化代码
a=\"123\"
b=\"123\"
4416957416
id(a)
id(b)
可以看到变量a、变量b指向同一个内存空间
id函数返回变量内存地址
变量
1.5
3.0/2
1.0
3.0//2
整除运算符
//
逻辑与
and
逻辑或
or
逻辑否
not
in
not in
成员测试
is
is not
同一性测试
运算符和表达式
1,导论
范围:-2147483648~2147483647
int
任意大的整数均可存储
long
数字
\"bcd\"
a[1:4]
\"dcb\"
切片结果默认从左往右,如果步长为负数,则结果从右往左
a[-2:-5:-1]
a=\"abcde\"
字符串
不可变
元组()
list.append()
添加
list.remove()
删除
列表[]
len()
连接2个序列
+
a=\"ab\"
\"ababab\"
a*3
重复序列元素
*
True
'c' in a
判断元素是否出现在序列中
返回最大值
max()
返回最小值
min()
比较2个序列的值是否相同
基本操作
序列
key不可变
dict.pop()
dict.clear()
字典
copy.copy
copy.deepcopy
深拷贝、浅拷贝
2,数据类型
fo=open(filepath)fo.read()fo.close()
open()
fo=file(filepath)fo.read()fo.close()
file()
r只读
r+读写
先删除原文件,再重新写入如果文件不存在则创建
w写入
w+读写
在文件末尾追加新的内容如果文件不存在则创建
a写入
a+读写
b
U
mode
文件读写
dir(file)
读取所有数据
read()
write()
writelines(sequence_of_strings) - NoneWrite the strings to the file.
writelines()
close()
读取一行内容
readline()
返回一个列表列表中每个元素代表文件中的一行
readlines()
表明文件对象可被迭代
next()
offset表示偏移量
相对文件开始位置偏移
0
相对文件当前位置偏移偏移
1
相对文件末尾位置偏移
2
whence
seek()
提交更新
flush()
文件对象方法
dir(os)
os.mkdir(\"test\")
os.mkdirs(\"a/b/c\")
os.listdir(\".\")
os.getcwd()
ow.chdir(\"/\")
os.path.isdir(\"\")
os.path.isfile(\"\")
把目录的绝对路径与文件名拼成文件的绝对路径
os模块
返回一个iterator
每个元素由3部分组成:目录子目录文件名
os.walk(path)
目录遍历
文件与目录
raise NameError(\"...\")
抛出异常
异常处理
rpm -q MySQL-python
import MySQLdb
MySQL
Hello jane
p = Person(\"jane\")p.sayHello()
定义
Hello janejane is studing
s = Student(\"jane\")s.sayHello()s.study()
继承
面向对象
6,高级功能
疯狂的Python
if-elif-else
for iterating_var in sequence
3,流程控制
a=(\"name\
\"name : jane\"
如果元组元素个数与函数参数个数一致,则可以在传递参数时在元组变量前加*,这样元组元素的值就会按顺序赋值给函数参数
f(*a)
元组参数
a={\"age\
\
如果字典元素的key值与函数的形参名是一一对应,则可以在传递参数时在字典变量前加**,这样字典元素的值就会按key的值赋值给对应函数的形参
f(**a)
字典参数
()
{}
f(1)
冗余参数
快速定义单行最小函数从lisp借鉴而来
雏形
可以接收任意的参数
lambda
返回变量的内存地址
id(变量名)
把字符串或数字转换成整数
int(object)
返回变量的类型
type(变量名)
a=[\"name\
b=[\"jane\
[(\"name\
zip
得到a除b的商、余
返回True or False用来判断参数是否是个函数
callable(f)
返回True or False判断变量是否是某个类型的对象
内置函数
list
tuple
string
序列分类
filter
name=[\"koma\
zip,以长度最短的序列为准
map,以长度最长的序列为准长度不够的以None补齐
map
从sequence中依次取2个值传递到function中计算把计算结果与sequence中下一个元素传递到function中计算只到sequence中只剩下1个值
((((1+2)+3)+4)+5)
计算1+2+...+100
a=range(101)
5050
级数
计算5!
120
阶乘
可以用来计算级数,阶乘...
reduce
序列处理函数
所有的.py文件都可称之为模块
当模块被直接执行,则__name__为__main__
当模块被其它模块调用,则__name__为模块文件名
__name__模块名
python的模块可以按目录组织成包
创建一个名字为包名的文件夹
在该文件夹下创建一个__init__.py文件
根据需要在文件夹下存放脚本文件、已编译扩展及子包
import 包名.模块1 包名.模块2 包名.模块3
import as
from import
步骤
包
模块
4,函数
常用来指定一个字符集
[abc]
[a-z]
[^ab]
r\"...\"表示是一个正则表达式规则字符串
import reres=r\"t[oc]p\"s=\"tbp tcp tip top tvp tsp\
[]
行首
^
行尾
$
元字符
p_r=re.compile(\"t[oc]p\
如果某个正则表达式要匹配很多次则最好先进行编译,这样速度更快
re.IGNORECASE忽略大小写匹配
compile编译
从字符串最开始的位置匹配如果匹配到,则返回SRE_Match对象否则返回空
p_r=re.compile(\"jane\")
s=\"jane koma troy\"p_r.match(s)
None
s=\"koma jane troy\"p_r.match(s)
match()
扫描字符串如果匹配到,则返回SRE_Match对象否则返回空
p_r=re.compile(\"jane\")s=\"koma jane troy\"p_r.search(s)
search()
找到匹配的所有字符串,并把它们作为列表返回
p_r=re.compile(\"jane\")s=\"jane koma jane troy\"p_r.findall(s)
findall()
找到匹配的所有字符串,并把它们作为迭代器返回
finditer()
字符串的正则表达式替换
\"jane koma\"
s=\"jane koma\"s.replace(r\"j..e\
str.replace()不支持正则表达式
\"hello koma\"
s=\"jane koma\"p_r=re.compile(\"j..e\
sub()
字符串的正则表达式分割
str.split()不支持正则表达式
s=\"jane+koma-troy\"re.split(r\"[\\+\\-]\
split()
常用函数
使 . 能匹配包括换行符等在内的所有字符
默认情况下 . 不能匹配换行符p_r=re.compile(\"baidu.com\")p_r.findall(\"baidu\com\")
['baidu\com']
p_r=re.compile(\"baidu.com\
使匹配对大小写不敏感
多行匹配,影响 ^ 和 $
找出字符串中所有以 jane 开头的行注:默认情况下 . 不能匹配换行符
s=\"\"\"hello janejane hellohello jene hellojane hello hehe\"\"\"
p_r=re.compile(\"^jane.+\")p_r.findall(s)
p_r=re.compile(\"^jane.+\
正则表达式也可以换行,使用res的verbose状态,使正则表达式看起来更清晰
匹配电话号码
['028-3546728']
r=\"\"\
编译标志
当正则表达式中有分组时findall()会优先返回分组数据
正则表达式得到邮箱前缀
email=\"abc123@qq.com\"
['abc123@qq.com']
默认情况下re.findall(r\".+@.+\
['abc123']
有分组时re.findall(r\"(.+)@.+\
分组\"(\" \")\"
拿到百度贴吧页面中的大图
urllib.urlopen(url).read()得到html网页内容
大图都以http://imgsrc.baidu.com/forum/开头,利用re.findall()有分组时返回分组的数据即可拿到大图的url
urllib.urlretrieve()可以下载图片文件到本地
关键点
import urllibimport redef getHtml(url): page = urllib.urlopen(url) html = page.read() return htmldef getImageList(html): r = r'src=\"(http://imgsrc.baidu.com/forum/.+?)\
code
小爬虫
5,正则表达式
0 条评论
回复 删除
下一页