闲得没事干 又没心思深入研究其他东西 找了个折中的办法 看点新玩意儿 事实证明还是成功的 这次是Python 看的是http://sebug.net/paper/python/index.html 《简明Python教程》 只当扩充眼界 说实话 你让我Python搞个实际可用的东西 我依旧无能为力 悲催吧
简单把笔记整理一下 跟我认知中相同的部分都略过了
* Python中 字符串 '...' "..."是一样的 '''...''' """..."""这样的三引号代表多行字符串
* 自然字符串用 r"...\n" 这样\n不会被转义
* Unicode字符串 u"..."
* 在行末加入\ 表示下行继续
* 通过raw_input()获取输入
* 注释语句用#
* Python中的if语句 if-elif-else
* Python中的while语句 while...else(可选)..
* Python中的for语句 for...in.. 注意Python没有for(;;) for in类似于foreach/for(i:I)这样的形式
扩展for i in range(1,5) ----[1,2,3,4]
* 以上程序块不是通过{} 而是通过缩进 在判断语句后跟的是:即
if(...):
...
while(...):
...
else:
... 这样的形式
* break终止循环 不会执行可选else中的内容
* 函数定义 def function():
* 代参数的 def function(a,b=5); #这个还带默认参数 默认参数必须在参数表最后 (a=5,b)这样是错误的
* 全局变量 global x (否则内部变量都会被作为私有变量处理)
一个函数定义例子:
def f(a,b=5,c=10)
f(3,7) ---> a=3,b=5,c=10
f(25,c=24) ---> a=25,b=5,c=24
f(c=20,a=100) ---> a=100,b=5,c=20
* retun None(None就是常见的null)
* 关于DocString 文档字符串
def a():
'''A........
........
.......。'''
....
文档字符串是一个多行字符串(三引号)
大写开始,句号结尾
第二行为空行
第三行开始是描述介绍
当调用print a.__doc__时 会被打印出来
* 使用sys模块
import sys 或者 from sys import *(感觉类似java中引用package包)
* 自己定义模块 mymodule.py (其实就是使用其他py)
def sayhi():
...
version='0.1'
使用
import mymodule
mymodule.sayhi()
print mymodule.version
* 数据结构部分
* 列表list
用[]包含 [a,b,c] 有append del len(list) sort等方法
* 元组
用()包含 (a,b,c) 空元组a为 a() 特别注意 元组 b 要写成 b(1,) 最后个逗号必须
* 列表和元组的区别 列表是可变的 元组是固定的
* 元组的打印方法
print "&s is &d years old" % (name,age)
(好吧 这个不是类似于C了么)
* 数据字典
ab={a:1,
b:2,
c:3}
取值方法 ab["a"]
* 数据词典打印
for name,address in ab.items():
print "&s at &s" % (name,address)
* 另一种打印
if "aaa" in ab: #检查是否存在
print ab["aaa"]
* 序列 序列下标从0开始 0,1,2,3......
下标支持负数 0,1,2........-3,-2,-1(最后一个为-1)
* 序列切片操作 str[1:3] 1-3(这是下标 截取了1,2两个元素 末尾元素不在其中)
其他一些切片str[:-1] str[1:] str[:]
* 切片操作是copy了一个新的对象(不是赋值 赋值是产生一个参考,仍然指向同一个元素) (好吧 又来搞这个问题了)
* Python中一切都是对象 一个整数也是一个对象
* self参数 表示自己 定义函数时其实都有一个self 比如count(self) 当定义参数列表 最好第一个为self 之后为自己的 而无参也最好写个self
self类比下类似于this
* 初始化方法
def __init__(self) 当类对象建立时会被执行
同样可以类比构造函数
* 同理还有__del__(self..) (析构)等方法
* _aaa 表示这是一个私有变量(默认规则 当做命名规则吧 不是系统认定)
* __aaa 声明一个私有变量 这个是系统认定的 不做声明时都是共有public的
* 继承
class Super
class Chile(Super) 注意(...)其实是一个元组 也就是 可以多重继承 class a(b,c,d)
* 输入输出 raw_input / print
* 文件
f = file("urlPath",'w') #'w'是模式 常用的有'r'读(默认),'w'写,'a'追加
f.write(...)
f.close()
f.readline() 都是常用方法
* 存储器pickle 有一个cPickle 是用c写的 速度上更快
这是一个持久化对象 使用方法:
import cPickle as p
shoplist=['apple','mango','banana']
f=file(shoplist,'w')
p.dump(shoplist,f) #存操作
store=p.load(f) #取操作
* Python中的异常处理
try:
...
except EOFError:
...
except:
...
finally:
...
else:
...
其实是一样的
* 抛出异常 raise xxxExeption() (等同于java的throw)
后面的部分就是系统模块的东西 基本就是个list
* 命令行参数 sys.argv 该列表中至少包含一个项目,即当前运行程序的名称,作为sys.argv[0]
* os模块
os.sep 路径分割符(根据系统各不相同 如linux是'/' windows是'\\')
os.name 平台名称 windows--nt linux--posix
os.getcwd 当前目录(Python脚本工作目录)
os.getEnv os.putEnv 环境变量
os.listdir 返回所有目录和文件
os.remove 删文件
os.sytem 运行shell
os.linesep 终止符 windows--'\r\n' linux--'\n' mac--'\r'
os.isfile os.isdir 是否为文件/目录
os.path.split 返回目录名和文件名 例如 c:\\abc\bc\abc.txt 返回c:\\abc\bc 和 abc.txt
* Python中的更多内容
* 特殊方法
比如 __init__ , __del__
还有 __getitem__() 使用x[key]索引操作
__str__() 即toString
__lt__(self,other) 小于操作 compare?
__len__(self) 序列对象内置的len方法
* 列表综合
得到一个新的列表 包含原列表中所有大于2的元素 将其乘2后存储
listone=[2,3,4]
listtwo=[2*i for i in listone if i>2]
最终得到listtwo是[6,8]
* 函数中接收元组,列表(作参数)
def(a,*b)
其中*b就是一个元组 所有多余的参数都被认为是元组b中的元素
def(a,**b)
**b表示字典 所有多余参数被认为是key/value 放在b中
* lambda形式
用于创建新的函数对象,并在运行时返回他们
def make_repeater(n):
return lambda s:s*n #跟一个表达式 并且只能跟表达式
twice = make_repeater(2)
print twice('word')
print twice(5)
打印结果是 wordword和10
lambda表达式不懂 求科普
* exec和eval
吐槽:js中听过这两个强大的东西
exec 执行存储在字符串或文件中的Python语言
exec 'print "aaa"' 输出 aaa
eval 计算存储在字符串中的有效表达式
eval ('2*3') 输出 6
* assert 用于声明某个条件是真的
当assert失败,引发一个AssertionError
assert也不是非常了解 求科普
* repr 取得对象的规范字符串表示 比如取得打印时的样子
反引号也有同样的作用`i`
一般的 有eval(repr(object))==object
同样这里的结果可以通过__repr__设置
附件是笔记 用notepad++写的 为了有语法高亮着色 保存成py文件了 txt一样看