一.python函数分为3种:
1.内置函数:python为我们提供的快捷方式
#1.vars() 当前模块的所有变量,常用的包括下面3个:
1.'__doc__' 表示当前文件的注释的内容,在__doc__变量中
2.'__name__' 表示当前文件的主函数,在__name__变量中
3.'__file__' 表示当前文件的路径,在__file__变量中
#2.reload() ---用于再次导入,而不用import
#3.pow(2,11) ----表示2的11次方
#4.常用的内置函数
len():接收一个序列,返回序列的长度
all():接收一个序列,判断这个常用的序列,序列中所有的值都为真,返回真,否则,一旦有一个为假,为假
用于写web界面,用户输入用户名、密码的一种判定
any():接收一个序列,判断这个序列,序列中的值只要有1个为真就为真,返回真,否则都是假,才为假
========================== >>> li=['1','','3'] #列表里面有一个元素为空 >>> all(li) #有一个为空就为假 False >>> any(li) #只要有1个是真就为真 True >>> lt=['1','2','3'] >>> all(lt) #全部为真就为真 True
#5.ascii、数字、字符的转换
ord() 接收ACSSI一个字符,返回数字 ========================== >>> ord('A') 65 chr() 接收数字,返回ACSSI字符 ============================== >>> chr(65) 'A' >>> chr(62) '>'
oct()
bin()
#6.enumerate() ---指定数字的起始值
================================== >>> for k,v in enumerate(li): #后面一个参数不指明,默认从0开始 ... print k,v ... 0 1 1 2 2 3 >>> for k,v in enumerate(li,2): #后面一个参数指明从2开始计数 ... print k,v ... 2 1 3 2 4 3
2.自定义函数
1.def---定义函数的关键字
2.函数名---方便通过函数名调用该函数
3.参数---声明后不自动执行,只有调用后才执行
4.函数的参数
分3种:
#1普通参数
#2默认参数
1.默认参数只能放在最后面
2.默认参数可以有多个
======================================================================== eg: def email(arg,subject="jachy报警系统"): #后面一个参数即为默认参数,调用的时候可用可不用 ................... email(arg,subject="jachy业务系统") #调用默认参数一定要指明 email(arg) #调用
#3动态参数
1.可以接收多个参数;
2.传序列时,内部自动构造元组;
3.如果传的序列,可以使用*参数,避免内部构造元组
===================
def func(*arg): #*arg即动态参数,将参数转化为一个元组供函数内部使用
pass
==================
eg: >>> def func(*arg): #动态参数的声明方式 ... print arg ... ------------------- >>> func() () >>> func(1) (1,) >>> func(1,"alex") (1, 'alex') >>> func(1,"alex",333) (1, 'alex', 333)
=======动态参数1:参数加1个* ===========
>>> li=[1,2,3,4] >>> func(li) ([1, 2, 3, 4],) >>> func(*li) #加*避免构造再次在内部元组 (1, 2, 3, 4) >>> func(11,22,33) (11, 22, 33)
========动态参数2:参数为2个*=============
>>> def func(**kwargs): #2个*在内部构造字典 ... print kwargs ... >>> func(k1=123) {'k1': 123} >>> func(k1=123,k2=321) {'k2': 321, 'k1': 123} -----------也可以直接传字典--------- >>> dic={"k1":123,"k3":321} >>> func(**dic) #先构造字典,再传入进去 {'k3': 321, 'k1': 123}
===========上两个动态参数的结合=================
>>> def func(*args,**kwargs): ... print args ... print kwargs ... >>> func(1,2,3) (1, 2, 3) {} >>> func(k1=123,k3=321) () {'k3': 321, 'k1': 123} >>> func(1,2,3,k1=123,k3=321) (1, 2, 3) {'k3': 321, 'k1': 12}
5.函数的返回值
3.导入函数
4.主函数(换句话说,函数其实就是按功能划分的代码块)
格式:
=============================================== if __name__ == "__main_": #表示此文件是程序的主文件,然后此函数是主函数 xx代码xx_ ==================================================
二.文件打开的方式
1.obj_file=file('路径','模式')
2.obj_file=open('路径','模式') #推荐用这种方式
3.方式(或模式):
r(默认),
w ,重写文件,在打开文件的同时,把原文件清空掉重写.如果不存在,就会在打开时临时创建
a,以追加的方式写到文件最后,可读,可写,
r+:可读可写
rb:处理二进制文件
rU:将文件中的\n,\r全部转化成\n,U只能跟r结合
4.操作功能
obj.seek()
obj.seek(5)----表示从第5个字节开始读
obj.seek(0)----表示从第0个字节开始读
obj.tell()---返回当前指针的位置
obj.truncate()----根据指针位置向后截断,只修改前面几个
eg: obj_file=file('路径','模式') print obj_file.tell() #读取文件指针位置,此时在0 obj_file.close() print obj_file.tell() #读取文件指针位置,此时在最后 eg ============= #!/usr/bin/env python # -*- coding:utf-8 -*- file_obj=open('log','r+') file_obj.seek(8) print file_obj.tell() print file_obj.read() print file_obj.tell() file_obj.close() eg: ========= file_obj=open('log','r+') file_obj.write('111') #向文件最开始处向后写,边写边覆盖 file_obj.truncate() #然后写完之后,从这里开始截断,后面的全部删掉 file_obj.close()
三、with关键字--为了避免打开文件后忘记关闭,可以通过管理上下文,即:
eg:
with open('log','r') as f: <====>f =open('log','r')
修理
...
这种方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
eg:用于修改nginx的配置文件 with open('log1','r') as obj1, open('log2','w') as obj2: #同时打开2个文件:log1,log2,一个读,一个写 for line obj1: #读源配置文件 new_line=line.replace('10.4.3.1','10.4.3.2') #将前面一个参数替换后面的一个参数 obj2.write(new_line) #将读取的内容写入到新的配置文件中 pass