您的位置:首页 > 编程语言 > Python开发

python深入(函数,文件操作)

2015-11-14 11:00 721 查看
一、内建函数
1、数学运算类
abs(x)#求绝对值
divmod(a, b)#分别取商和余数
float([x])#将一个字符串或数转换为浮点数。如果无参数将返回0.0
int([x[, base]])#将一个字符转换为int类型,base表示进制
long([x[, base]])#将一个字符转换为long类型
range([start], stop[, step]) #产生一个序列,默认从0开始
oct(x)#将一个数字转化为8进制
hex(x)#将整数x转换为16进制字符串
chr(i)#返回整数i对应的ASCII字符
2、集合操作类
format(value [, format_spec])#格式化输出字符串,如“I am {0},I like {1}”
iter(o[, sentinel])#生成一个对象的迭代器,第二个参数表示分隔符
max(iterable[, args...][key]) #返回集合中的最大值
min(iterable[, args...][key])#返回集合中的最小值
dict([arg])#创建数据字典
list([iterable]) #将一个集合类转换为另外一个集合类
str([object]) #转换为string类型
sorted(iterable[, cmp[, key[, reverse]]])#队集合排序
xrange([start], stop[, step]) #返回一个xrange对象
3、逻辑判断
all(iterable)#集合中的元素都为真的时候为真,若为空串返回为True
any(iterable)#集合中的元素有一个为真的时候为真,若为空串返回为False
cmp(x, y)#如果x < y ,返回负数;x == y, 返回0;x > y,返回正数
4、反射
hash(object)#如果对象object为哈希表类型,返回对象object的哈希值
id(object)#返回对象的唯一标识
len(s) #返回集合长度
eload(module) #重新加载模块
type(object)#返回该object的类型
5、io操作
input([prompt]) #获取用户输入,使用raw_input该函数将不会捕获用户的错误输入
file(filename [, mode [, bufsize]]) #
open(name[, mode[, buffering]]) 打开文件,推荐使用open
raw_input([prompt]) #设置输入,输入都是作为字符串处理
二、文件操作
1、打开模式列表
#w 以写方式打开,
#a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
#r+ 以读写模式打开
#w+ 以读写模式打开 (参见 w )
#a+ 以读写模式打开 (参见 a )
#rb 以二进制读模式打开
#wb 以二进制写模式打开 (参见 w )
#ab 以二进制追加模式打开 (参见 a )
#rb+ 以二进制读写模式打开 (参见 r+ )
#wb+ 以二进制读写模式打开 (参见 w+ )
#ab+ 以二进制读写模式打开 (参见 a+ )
#"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)rU,r+U
2、文件对象方法
file.close() # 关闭文件
file.fileno() # 返回文件的描述符
file.flush() # 刷新文件的内部缓冲区
file.isatty() # 判断file是否是一个类tty设备
file.next() # 返回文件的下一行,或在没有其他行时引发StopIteration异常
file.read(size=-1) # 从文件读取size个字节,当未给定size或给定负值的时候,读取剩余的所有字节,然后作为字符串返回
file.readline(size=-1) # 从文件中读取并返回一行(包括行结束符),或返回最大size个字符
file.readlines(sizhint=0) # 读取文件的所有行作为一个列表返回
file.xreadlines() # 用于迭代,可替换readlines()的一个更高效的方法
file.seek(off, whence=0) # 在文件中移动文件指针,从whence(0代表文件起始,1代表当前位置,2代表文件末尾)偏移off字节
file.tell() # 返回当前在文件中的位置
file.truncate(size=file.tell()) # 截取文件到最大size字节,默认为当前文件位置
file.write(str) # 向文件写入字符串
file.writelines(seq) # 向文件写入字符串序列seq;seq应该是一个返回字符串的可迭代对象
3、文件读取
f = open('tpm.txt')
# read方式读取
s = f.read()
print(s, '\n\n\n')
print(f.tell())
#上面读取完后指针移动到最后,通过seek将文件指针移动到文件头
f.seek(0)
#使用readline每次读取一行
while(True):
line = f.readline()
print(line)
if(len(line) == 0):
break
f.close()
#为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log','r') as f:
with open('log1') as obj1, open('log2') as obj2:
pass
二、函数
1、定义和使用函数
def 函数名(参数):
函数体
3、参数
形参:在定义函数的同时定义变量,如下例的a,b。
实参:供形参使用的值叫做实参,入下例的3,4。
def printMax(a, b):
if a > b:
print a, 'is maximum'
else:
rint b, 'is maximum'
printMax(3, 4)
4、局部变量
#当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对
于函数来说是 局部 的。这称为变量的 作用域
使用global可将局部变量定义为全局变量
例:
def func():
global x
print 'x is', x
x = 2
print 'Changed local x to', x
x = 50
func()
print 'Value of x is', x
结果:
x is 50
Changed global x to 2
Value of x is 2
5、参数
关键参数
#如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——
这被称作 关键参数
我们使用名字(关键字)而不是位置,来给函数指定实参。这样做有两个优势一,由于我们不必担心参数的顺序,使用函数变得更加简单了。二、假设其他参数
都有默认值,我们可以只给我们想要的那些参数赋值。下列中的b=5,c=10为默认参数,在不填写时为默认值。
例子:
def func(a, b=5, c=10):
print 'a is', a, 'and b is', b, 'and c is', c
func(3, 7)
func(25, c=24)
func(c=50, a=100)
输出:
a is 3 and b is 7 and c is 10
is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50
动态参数:
例1:
def func(*args):
print args
执行1:func(11,33,4,4454,5)
执行2:li = [11,2,2,3,3,4,54] func(*li)
例2:
def func(**kwargs):
print args
执行1:func(name='lxb',age=21)
执行2:dic = {'name':'lxb', age:21, 'gender':'male'} func(**dic)
执行3:
def func(*args, **kwargs):
print args
print kwargs
6、返回值
#return 语句用来从一个函数 返回 即跳出函数。我们也可以从函数 返回一个值 。
def maximum(x, y):
if x > y:
return x
else:
return y
print maximum(2, 3)
三、内置函数
1、nmap #遍历序列,对序列每个元素进行操作,最终获取新序列。
#每个元素增加100
li=[11,22,33]
new_list=map(lambda a:a+100,li)
#两个序列相加
li=[11,22,33]
li1=[1,2,3]
new_list=map(lambda a,b:a+b,li,li1)
2、filter #对序列中的每个元素进行筛选,最终获得符合条件的序列。
new_list=filter(lambda arg:arg>12,li)#获取大于12的序列
3、reduce #对序列内所有元素进行累计操作
li=[11,22,33]
result=reduce(lambda arg1,arg2:arg1+arg2,li)
# reduce的第一个参数,函数必须要有两个参数
# reduce的第二个参数,要循环的序列
# reduce的第三个参数,初始值(可为空)
四、yielod生成器
range和xrange的区别
rangge会在内存中创建所有指定的数字,而xrange,只有在迭代循环,才去创建每个数组
自定义range
def nrange(num):
temp = -1
while True:
temp = temp + 1
if temp >= num:
return
else:
yield temp #记忆此时内容并退出函数
五、冒泡算法
按从小到大对列表[13,22,6,99,11]进行排序
思路相邻两个值进行比较,较大的值放在右侧,依次进行比较。
li = [13, 22, 6, 99, 11]

for i in range(1,5):
for m in range(len(li)-i):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
六、装饰器
1、手工装饰
import time
#装饰器是一个函数,而其参数为另一个参数
def timeit(func):
def wrapper(): #在内部定义了一个函数,封装添加的功能
start = time.clock() #放一些在执行函数前的代码
func() #执行原始函数
end = time.clock() # #放一些执行函数后的代码
print 'used:', end - start
return wrapper #返回封装函数,封装函数已包含函数执行前后执行的代码
@timeit #等于foo=timeit(foo),即装饰器返回的是封装函数
def foo():
print('in foo()')
foo() #执行封装函数,即执行的不是原函数而是封装后的函数
print(foo.__name__) #被修饰后函数名变为wrapper
2、使用functools装饰器装饰
#函数是有几个特殊属性比如函数名,在被装饰后,上例中的函数名foo会变成包装函数的名字wrapper,
#它能将装饰过的函数的特殊属性保留。
import functools
def timeit(func):
@functools.wraps(func)
def wrapper():
start=time.clock()
func()
end=time.clock()
print 'used:', end - start
return wrapper
@timeit
def foo():
print 'in foo()'
foo()
print foo.__name__ #函数名还是之前的函数名foo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学 python 绝对值