日期和时间
time calendar 模块,可用于格式化日期和时间。
time.time() 获取当前时间戳,1970年前的不行。获取到的是秒数。
python 函数一般用一个元组装起来的9组数字处理时间。比如 time.loacltime(time.time())
就会返回。0到8的元素分别是:年月日时分秒,星期几,当天是今年的第几天,夏令时。
time.asctime()
可以把时间元组转化为形如 Thu Apr 7 10:05:21 2016
的较简单的可读时间模式。
time.strftime()
可以格式化时间。如 time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
.
ymdHMS:年月日时分秒。
%y:两位的年份。
%Y:四位的年份。
%H:24h制小时。
%I:12h制小时。
aAbB:简化/完整的星期/月份名。
其他用不太到先略去~
calendar 可以获取某月日历。如 calendar.month(2016, 1)
.
以下输出2016年1月份的日历:
January 2016
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
函数
形如:
def functionname( parameters ):
"函数_文档字符串" # 文档说明,加不加都行
function_suite
return [expression]
函数传不可变变量时,是传入的拷贝的参数。传可变变量是直接对原变量操作。
参数可以顺序不一致,解释器会根据名称匹配参数:
#可写函数说明
def printinfo( name, age ):
"打印任何传入的字符串"
print "Name: ", name
print "Age ", age
return
#调用printinfo函数
printinfo( age=50, name="miki" )
默认参数:没有被传入的参数的初值设置。
def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print "Name: ", name
print "Age ", age
return
不定长参数:
# 可写函数说明
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print "输出: "
print arg1
for var in vartuple:
print var
return
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )
匿名函数: lanbda 函数,只是一个表达式。
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print "相加后的值为 : ", sum( 10, 20 )
return, 全局变量,局部变量,作用域不加赘述。
模块
.py 结尾的 python 文件,包含了对象定义、语句。能更有逻辑的组织代码段。
前面已经知道 import 即可引入,且写多少次也只会引用一次。
只导入一部分:from modname import name1, name2……
。
from modname import *
导入包中所有项目,不宜过多使用。
导入搜索顺序:先搜索当前目录,然后在 shell 搜索,最后查看默认路径。
dir(modname)
可以查看模块所有内容名称。
导入后,模块顶层部分的代码只会被执行一次,如果想多次执行可以 reload(modname)
。
包是一个文件夹,其中包含了模块,子包等。其中必须存在 init.py 文件,哪怕其内容为空。 这个文件用于标识当前文件夹是一个包,也会在 import 时 执行。
然后其他 py 文件里通常放一些功能函数。
IO
最简单: print()
输入: raw_input()
input()
,input 可以接收表达式并计算结果。
打开文件
file object = open(file_name [, access_mode][, buffering])
access_mode 是打开方式,如 r 只读,w 只写,r+ 读写,w+ 读写如果不存在则新建。
buffering 是是否有寄存,以及其大小。
属性 | 描述 |
file.closed | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
file.flush() | 立刻刷新缓冲区,写入文件 |
fo.close() 刷新缓存区里还未写入的内容,并关闭该文件。
fo.read([count]) 读取 count 个字。readline([size]) 读 size 行。
fo.write(string) 追加到文件结尾,不会自动加 \n。
读写后指针会继续刚才的位置读写,tell() 方法可以查看其当前位置。seek(offset, [from]) 是将指针从给定位置移动 offset 个距离,比如指针回到文件最开头就是 seek(0,0)
重命名:os.rename(current_file_name, new_file_name)
删除文件:os.remove(file_name)
创建目录:os.mkdir(dirname)
查看当前目录:os.getcwd()
改变当前目录,进入新的目录:os.chdir(newdir)
删除当前目录:os.rmdir('dirname')
异常处理
try…except
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
finally:
<语句> #无论如何都执行
名字里写异常名字。可以写多个,不写就是只要发生异常就执行。
数据是可以带进的参数.
# 定义函数
def temp_convert(var):
try:
return int(var)
except ValueError, Argument:
print "参数没有包含数字\n", Argument
# 调用函数
temp_convert("xyz")
raise
raise 可以手动触发异常。比如 raise Exception, "Invalid Level!"
就会触发名为 Exception 的异常,且传入参数为 “Invalid Level!”
自定义异常
通过创建异常类(以一个现有类为基类)。
class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg
try:
raise Networkerror("Bad hostname") # 参数被赋给 e.args
except Networkerror,e:
print e.args