我的python学习--第四天,,一、首先是对前三天的


一、首先是对前三天的学习内容进行复习

1、python基础的数据结构

数字(int/float,包括整数和浮点数)

布尔(boolean => True/False)

字符串(str,使用‘‘或""括起来)


列表(list)

列表是使用[]括起来的一组数组,在内存中是连续的,可以对其增删改查

字典(dict)

字典是使用{}括起来的k/v键值对,经过哈希计算随机分布在内存中,是无序的,可以对其增删改查

元组(tuple)

元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号()

2、python的语法

定义变量 a=1

if else语句


if 布尔值:

True执行这里

else:

False执行这里


for循环

循环list或者dict


while循环

while 布尔值:

布尔值真,一直执行

break/continue


调试方法(print)


help()函数和dir()函数

help()函数是查看函数或模块用途的详细说明,而dir()函数是查看函数或模块内的操作方法,输出的是 方法列表。


3、list和dict的区别

list有顺序

查找、追加很快,插入、删除很慢,命中cpu缓存的概率大

dict没顺序

查找、修改、删除都很快


dict->list : for key,value in dict.items()

list转成dict : for index,value in enumerate(list)


4、文件读取

open:打开文件

read、readline、readlines:读取文件内容

write、writelines:文件写入

close:关闭文件

tell()和seek()

文件刚打开时,只能在开始的位置,每次read、readline、readlines时都会移动指针到读取数据的地方

tell():返回文件所在指针的当前位置

seek(#,whence=0):从文件中移动#个文件指针,正数则往结束方向移动,负数则向开始方向移动,如果设定了whence参数,就以whence设定的起始位置为准,0表示文件开始处、1表示当前位置、2表示文件结尾处



二、对第三天的统计nginx访问日志,获取访问前十的ip地址,并用html的格式呈现的练习进行优化

#!/usr/bin/python#coding:utf-8res={}‘‘‘f=open(‘access.log‘)#优化前的文件开启,关闭...f.close()‘‘‘withopen(‘access.log‘)asf:#优化后的文件开启,关闭forlineinf:tmp=line.split(‘‘)ip,url=tmp[0],tmp[6]‘‘‘if(ip,url)inres:#优化前的数据统计res[(ip,url)]+=1else:res[(ip,url)]=1‘‘‘res[(ip,url)]=res.get((ip,url),0)+1#优化后的数据统计res_list=res.items()#printres_list‘‘‘#优化前,使用冒泡法进行排序forjinrange(11):foriinrange(len(res_list)-1):ifres_list[i][1]>res_list[i+1][1]:res_list[i],res_list[i+1]=res_list[i+1],res_list[i]‘‘‘res_list=sorted(res_list,key=lambdax:x[1],reverse=True)#优化后使用sorted函数排序i=0html_str=‘<tableborder="1px">‘#res_list.reverse()forrinres_list[:10]:i=i+1#((‘218.200.66.204‘,‘/data/uploads/2014/0707/12/small_53ba21ee5cbde.jpg‘),1),html_str+=‘<tr><td>No%s</td><td>%s</td><td>%s</td><td>%s</td>‘%(i,r[0][0],r[0][1],r[1])html_str+=‘</table>‘html_f=open(‘res.html‘,‘w‘)html_f.write(html_str)html_f.close()



三、函数(第四天重点)


函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。


定义函数的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

任何传入参数和自变量必须放在圆括号中间。圆括号中间可以用于定义默认参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。


语法:

def func_name(parameters):

func_suite

return [expression]

示例:定义一个函数,实现阶乘

deff(num):fact=1ifnum<0:return"Nonegativefactorial"elifnum==0:return1foriinrange(1,num+1):fact*=ireturnfact


参数:

调用函数时使用的函数类型:


必备参数:

调用函数时,必须以正确的顺序传入,并且传入的参数必须与声明的参数一致

>>>defhello(name):...return‘hello‘+name...>>>hello(‘world‘)‘helloworld‘


关键字参数:

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

>>>defhello(name,age):...return‘hello%s,yourageis%s‘%(name,age)...>>>hello(age=20,name=‘Alice‘)‘helloAlice,yourageis20‘


缺省参数:

调用函数时,缺省参数的值如果没有传入,则使用预先定义的默认值。

>>>defhello(name,age=20):...return‘hello%s,yourageis%s‘%(name,age)...>>>hello(‘Bob‘)‘helloBob,yourageis20‘


不定长参数:

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数。

*开头的参数,收集所有剩下的参数(位置参数),适用于元祖

**开头的参数,收集所有剩下的参数(关键字参数),适用于字典

>>>defhello(name,*msg):...return‘hello%s,yourmsgis%s‘%(name,msg)...>>>hello(‘Catalina‘,20,‘Female‘)"helloCatalina,yourmsgis(20,‘Female‘)"


匿名函数:

lambda

语法:lambda [arg1 [,arg2,.....argn]]:expression


示例:写一个函数,求两个数字之和

>>>sum=lambdax,y:x+y>>>printsum(10,5)15


作用域:

一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。函数内部变量,先在函数内部找,找不到才会去全局找,内部变量想修改为全局变量,只需用global声明一下。多个函数之间尽量避免使用全局变量


示例:

#!/usr/bin/python#coding:utf-8total=0#这是一个全局变量defsum(arg1,arg2):total=arg1+arg2#total在这里是局部变量print"函数内是局部变量:",totalreturntotalsum(10,20)print"函数外是全局变量:",total
[root@testpython]#pythonexamp.py函数内是局部变量:30函数外是全局变量:0


将局部变量变为全局变量:

num=100#全局变量deffunc():globalnum#使用global将局部变量定义为全局变量num=200#局部变量printnumfunc()printnum

结果:

[root@testpython]#pythonexamp3.py200200


四、使用函数对‘二‘中的练习进行改造

defoper_file(file_name):#定义函数,根据访问数对ip、url排序res={}withopen(file_name)asf:forlineinf:tmp=line.split(‘‘)ip,url=tmp[0],tmp[6]res[(ip,url)]=res.get((ip,url),0)+1returnsorted(res.items(),key=lambdax:x[1],reverse=True)defget_html(arr):#将排序后的数据写成html格式tmpl=‘<tr><td>No%s</td><td>%s</td><td>%s</td><td>%s</td></tr>‘html_str=‘<h1>IPCOUNTTABLE</h1>‘html_str+=‘<tableborder="1px">‘html_str+=tmpl%(‘‘,‘IP‘,‘URL‘,‘COUNT‘)forindex,valueinenumerate(arr[:10]):html_str+=tmpl%(index,value[0][0],value[0][1],value[1])html_str+=‘</table>‘returnhtml_strdefstart_operate(file_name):#将html格式的数据写入文件res=oper_file(file_name)withopen(‘res.html‘,‘w‘)asf:f.write(get_html(res))start_operate(‘access.log‘)


html文件效果图:

技术分享



我的python学习--第四天

评论关闭