【安装包下载地址】
https://www.python.org/
【文件首部/编码声明】
#!/usr/bin/env pythonzone[0] = 'China'
zone[:1] = ['China']
zone[:2] = ['China', 'USA']
zone[-1] = 'England'
zone[-2:] = ['USA', 'England']
zone[0::2] = ['China', 'England'] # 以 2 为步长从第 0 个元素到最后一个元素进行取值
len(zone) = 3【杂项】
删除自定义变量myVar globals().pop('myVar')
Windows清屏 os.system('cls') #需要先执行命令import os导入os模块
Linux清屏 os.system('clear')
name = raw_input('Name is? ')
age = int(raw_input('Age is? '))
print 'the content is %s, %d years old.' %(name, age)
# 列表生成表达式使用中括号[]
range(6) # 生成 [0, 1, 2, 3, 4, 5]
range(1, 9, 2) # 生成 [1, 3, 5, 7]
[x * x for x in range(1, 4)] # 生成 [1, 4, 9]
[x * x for x in range(1, 4) if x % 2 == 1] # 生成 [1, 9]
[x + y for x in '12' for y in 'ab'] # 生成 [1a, 1b, 2a, 2b]
[x + '=' + y for x, y in {'x':'A', 'y':'B', 'z':'C'}.iteritems()] # 生成 ['y=B', 'x=A', 'z=C']
[s.upper() for s in ['hell', 'heaven', 'god']] # 生成 ['HELL', 'HEAVEN', 'GOD']
# 生成器表达式使用小括号()
for y in (x * x for x in range(4)) :
print y
2)方法二
if a > b :
....
elif a == b :
....
else:
....
2)条件语句二
if a :
....
3)循环语句一
names = ['Zhao', 'Qian', 'Sun']
for man in names :
print man
4)循环语句二
num = 0
for x in [1, 2, 3, 4, 5] :
num = num + x
5)循环语句三
for x in range(6) :
num = num + x
6)循环语句四
for count, val in enumerate(['a', 'b', 'c']) :
print count, val
7)循环语句五
for x, y in [(1,2), (3,4), (5,6)] :
print x, y
8)循环语句六
for key in {'a':1, 'b':2, 'c':3} :
print key
9)循环语句七
num = 0
for x in [1, 2, 3, 4, 5] :
num = num + x
def my_function(x=0) : # 0是参数 x 的默认值
print "this is my_function(%d)" %(x)
y = 2 * x
return x, y # 返回多个值,实际上返回的是元组(x, y)
2)空函数
def nop():
pass
3)可变参数函数一:
def my_function(numSet=[7,8,9]): # 参数传值,调用形式为 my_function([1,2,3])
for x in numSet:
print x
return len(numSet)
4)可变参数函数二:
def my_function(*numSet): # 参数传址,调用形式为 my_function(1,2,3)
for x in numSet:
print x
5)匿名函数
map(lambda x: x + 1, [1, 2, 3])
f = lambda x: x * 2
f(3) = 6
f = abs
f(-2) = 2
2)重定义函数名
abs = 5
abs(-2) # 会报错。要恢复 abs 为绝对值函数需要重启 python
3)作为入口参数
def my_function(a, b, fn) :
return fn(a + b) * fn(a)
4)作为入口参数的经典示例
# 下列这些以函数作为参数的函数又称为高阶函数
map(fn, [x1, x2, x3, ...]) = [fn(x1), fn(x2), fn(x3), ...]
map(abs, [-1, -2, -3]) = [1, 2, 3]
map(str, [12, 34, 56]) = ['12', '34', '56']
map(lambda x: x + 1, [1, 2, 3]) = [2, 3, 4]
reduce(fn, [x1, x2, x3, x4, x5, ...]) = fn(...fn(fn(fn(fn(x1, x2), x3), x4), x5), ...)
reduce(add, [1, 2, 3, 4]) = add(add(add(1, 2), 3), 4) = 10
reduce(lambda x, y: x + y, [1, 2, 3]) = ((1 + 2) + 3) = 6
filter(my_isOdd, [1, 2, 3, 4, 5, 6, 7, 8, 9]) = [1, 3, 5, 7, 9]
sorted([4, 2, 3, 5, 1]) = [1, 2, 3, 4, 5]
sorted([4, 2, 3, 5, 1], my_reversed) = [5, 4, 3, 2, 1]
5)作为返回值
if __name__ == '__main__' : # 直接运行模块时,__name__ 的值是 '__main__'
print 'Running independently.'
else:
print 'Running by import.'
2)第三方库
# 捕获异常后会运行异常处理,并停止执行后续代码
......
try: # 尝试运行可能出错的代码
print 'trying...'
result = 20 / int( input )
print 'result:', result
except ValueError, e: # 如果出现数值错误
print 'ValueError:', e
except ZeroDivisionError, e: # 如果出现除数错误
print 'ZeroDivisionError:', e
else: # 如果没有出现错误
print 'No error occured!'
finally: # 无论是否出错都会运行的代码
print 'This is finally statement.'
print 'Done!' # 如果捕获到错误,这句打印不会被执行
2)错误日志记录
# 捕获异常后会将异常记录到 log 日志,并继续执行后续代码
import logging
......
try:
print 'trying...'
result = 20 / int( input )
print 'result:', result
except ZeroDivisionError, e: # 如果出现除数错误
logging.exception(e) # 记录错误信息到 log 日志文件,之后继续运行后续代码
print 'Done!' # 即便发生了错误,这句打印仍可执行
3)自定义抛出异常
# 先要自定义一个异常类,设定好继承关系
# 之后就可以抛出该自定义异常
# 优先使用 python 库中的异常类型,只在必要的时候自定义异常类型
class customError(StandardError): # 自定义异常类
pass
if input == none : # 异常产生条件
raise customError('customError occured: value is none.') # 抛出自定义异常
else:
print input
4)向上抛出异常
# 如果当前异常捕获过程中没有合适的异常处理代码,可以将异常抛给上层处理
......
try:
result = 20 / int( Input )
except StandardError, e:
print 'StandardError occured!'
raise # 将异常直接抛给上层
# 另一种方式是像下方注释那样指定一个异常类型抛给上层
# raise ValueError('invalid input value!') # 向上层抛出一个 ValueError 异常
assert result != 0, 'result is 0.' # 如果 assert 后的表达式值为 false 则打印 'result is 0'
# 使用 -0 参数关闭脚本中的断言
# 可以指定 INFO、DEBUG、WARNING、ERROR 四个类别,非常有用
import logging # 导入 logging 模块
logging.basicConfig( level = logging.INFO )
......
div = int( Input )
logging.info('div = %d' %(div)) # 如果出错则添加信息到异常日志
print 20 / div
3)调试器单步调试
# 代码运行到断点处后,可以输入 c 继续执行后续语句,输入 p <变量名> 可查看变量值
import pdb
div = int( Input )
pdb.set_trace() # 设置断点,代码运行至此会暂停
print 20 / div
try:
pf = open('./text.txt', 'r')
content = pf.read().decode('utf-8') # 读取文件内容并解码
except IPError, e:
print 'open file error.'
finally:
if pf:
pf.close() # 普通写法中必须显示关闭文件以释放文件句柄
2)简化写法
# 使用 with 语句的简化写法不必写明关闭文件的操作,而由系统自动完成
with open('./test.txt', 'rw') as pf:
pf.write('China1912')
print f.read()
3)读取文件时解码
import codecs
with codecs.open('./test.txt', 'rb', 'utf-8') as pf: # 读取文件时将内容解码
pf.read(1024) # 读取 1024 字节解码后的数据
import os
os.name # 操作系统的名字,'posix' 表示 Linux/Mac OS,'nt' 表示 Windows
os.uname() # 系统详细信息,Windows 下不可用
os.environ # 操作系统的环境变量
os.getenv('PATH') # 打印环境变量 PATH 的值
os.system('echo hello') # 在当前系统的 shell 中执行 'echo hello' 命令
os.path.abspath('.') # 获取当前目录的绝对路径
os.path.isfile(path) # 检测 path 是否是文件
os.path.isdir(path) # 检测 path 是否是目录
os.path.exists(path) # 检测 path 路径是否存在
os.path.join('/usr/bin/', 'mydir') # 生成一个新的路径 '/usr/bin/mydir'
os.path.chdir(path) # 更改工作目录为 path
os.path.listdir(path) # 列出 path 目录下的所有文件和目录
os.path.getsize(path) # 获取 path 路径指向文件的大小,若 path 指向目录返回 0
os.mkdir('/usr/bin/mydir') # 创建目录 /usr/bin/mydir
os.rmdir('/usr/bin/mydir') # 移除目录 /usr/bin/mydir
os.path.split('/usr/bin/test.txt') # 将路径 '/usr/bin/test.txt' 拆分成元组 ('/usr/bin', 'test.txt'),获得文件名
os.path.splitext('/usr/bin/test.txt') # 将路径 '/usr/bin/test.txt' 拆分成元组 ('/usr/bin/test/', '.txt'),获得文件后缀
os.rename('test.txt', 'prime.txt') # 将文件 test.txt 重命名为 prime.txt
os.remove('test.txt') # 删除文件 test.txt
2)shutil 模块
import shutil
shutil.copyfile('./test.txt', './mydir/newTest.txt') # 复制文件 ./test.txt 到 ./mydir/newTest.txt
shutil.copytree(srcDir, destDir, False) # 将 srcDir 目录树拷贝到 destDir 下,并将所有符号链接指向的文件进行实体拷贝,而不是只拷贝符号链接