集合、三元运算符、监控日志、函数和积累
一、集合
集合也是一种数据类型,特点:无序和不重复
set1={1,2,34,4,56,77,8}
set2={2,4,5,78,9}
1、交集:print(set1.intersection(set2)) 或 print(set1 & set2)
2、并集:print(set1.union(set2)) 或 print(set1 | set2)
3、差集:print(set1.difference(set2)) 或 print(set1 - set2)
4、对称差集:print(set1.symmetric_difference(set2)) 或 print(set1 ^ set2)
5、创建:set3=set()
添加:set1.add(88) 或 set1.update([11,23,45])
删除:set1.remove(34) #若元素不存在会报错
set1.pop() #随机删除一个元素
set1.discard(77) #若是元素不存在,不做处理
二、三元运算符
程序的简化写法
L=[] #第一种写法
for i in range(1,11):
if i%2==0:
L.append(i)
print(L)
L=[] #第二种写法
L=[i for i in range(1,11) if i%2==0]
print(L)
三、监控日志
import os
os.system('ipconfig') #用来执行系统命令(如:window下的ip查询)
import os,time while True: ips=[] #存放所有的ip地址 with open('access.log','a+') as fr: fr.seek(0) for line in fr: ip=line.split()[0] ips.append(ip) fr.seek(0) fr.truncate() ipset=set(ips) #存放的是去重之后的ip地址(set去重) for ip in ipset: if ips.count(ip)>200: print('攻击你的ip的是:%s'%ip) # os.system('iptables -I INPUT 1 -p tcp -s %s -j DROP') # centos版本的linux下,封ip命令 time.sleep(60) #注:日志文件有空格的话,会报错
四、函数
函数就是把一组代码合并到一起,实现某种功能,需要时可直接调用。
参数可以有也可以没有;
参数分为:必填参数;默认值参数;可变参数(接收的是元组);关键字参数(接收的是字典)。
其中可变和关键字参数不是必填的,关键字参数有两种填写方式(1)**{'a':'hi'},(2)a='hi'
注:如果四种参数类型联用的话,参数接受顺序为:必填-默认-可变-关键字参数,否则会报错。
def function(name,age,country='china',*args,**kwargs): print(name) print(age) print(country) print(args) print(kwargs) dict={'fruits':'apple','id':9001} function('xiaoming','18','shanghai','python','java',**dict) function('xiaohong','18','shanghai','python','java',fruits='apple',id=9001)
函数碰到return,立即结束这个函数;调用函数后,返回计算的结果;函数可以没有返回值,如果没有返回值得话,默认返回None;如果这个函数的处理结果还需要用到别的地方,则需要给函数返回值;如果函数return多个值的话,会放到一个元组里面。
def add(a,b): return a+b,a+a res=add(60,90) print(res)
判断小数
def is_float(s): s=str(s) if s.count('.')==1: left=s.lstrip().split('.')[0] right=s.split('.')[1] if left.split().count('-')==1 and left.split()[0]=='-': #判断负小数,判断左边第一个字符是'-',也可用left.startswith('-') if left[1:].lstrip().isdigit() and right.isdigit(): return True else: return False elif left.isdigit() and right.isdigit(): #判断正小数 return True else: return False else: return False print(is_float('1.2')) print(is_float(' 1 .2')) print(is_float('1. 2')) print(is_float(' - 1.2'))
全局变量与局部变量
如果想在函数里面修改全局变量的值,需要先用global关键字声明;要修改的全局变量是int、string类型,必须要声明;如果是list、dict的话,要修改则不能加global
五、积累
1、获取在用python命令运行python文件,传入的参数
(1)test.py 写入如下语句
import sys
print(sys.argv)
(2)在命令行中执行python test.py i love python
输出为列表:['test.py','i','love','python']
2、判断文件是否存在:import os
if os.path.exists('test.py'): print('ok')
else: print('error')
3、字符串转化为字典:首先字符串为字典形式的,如,'{'name':'apple','id':2}'
eval('{'name':'apple','id':2}') 若为eval('')则会报错