集合、三元运算符、监控日志、函数和积累

 

一、集合

集合也是一种数据类型,特点:无序和不重复  

  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('')则会报错

 

posted on 2017-06-09 15:36  笔-记  阅读(234)  评论(0编辑  收藏  举报