首页 > 代码库 > 20170604第四讲

20170604第四讲

1、

#函数是把一组代码合到一起,可以实现某种功能,需要再用到这个功能的话,直接调用这个函数就行了
#函数、方法
#my_open
#fw = open(‘a.txt‘,‘a+‘)
#fw.seek(0)

# 函数名
all_users = {} # 用来存放所有的用户名和密码
# def read_users(file_name):
# #形式参数,其实就是一个变量
# print(‘file_name‘,file_name)
# with open(file_name) as fr:
# for line in fr:
# up = line.strip().split(‘,‘) # 分隔账号密码
# s_username = up[0] # 账号
# s_pwd = up[1] # 密码
# all_users[s_username] = s_pwd

def reg(name,age,sex=‘男‘):
#age、name必填参数,位置参数
#sex是默认值参数,不是必传
print(‘hello %s,age is %s,sex is %s‘%(name,age,sex))
# reg(age=‘吴冰‘,name=38,sex=‘未知‘)
# hello(‘孙燕姿‘)
def post(*args):
#可变参数,也叫参数组,也不是必填的,它接收到的是一个元组
#它把调用函数时穿进去的每一个参数都放到一个元组里
print(args)
# post(‘001‘,‘denglu‘,‘http://www.baiudd.com‘,‘post‘,‘a=1‘)
# post(‘001‘,‘denglu‘)
# post(‘001‘,‘denglu‘,‘post‘)
# post(‘001‘)
# post()
def other(name,age,country=‘china‘,*args):
print(name)
print(age)
print(country)
print(args)
# other(‘wubing‘,‘999‘)

d = {‘age‘: 18, ‘name‘: ‘吴冰‘}
def kw(**kwargs):
#关键字参数,接收的是一个字典,调用得用xx=11,也不是必填的
#传入字典调用的时候就得写**{‘age‘: 18, ‘name‘: ‘吴冰‘}
print(kwargs)
# kw()

def other2(name,country=‘china‘,*args,**kwargs):
#如果必填参数、默认值参数、可变参数和关键字参数你要一起用的话
#必须参照必填参数、默认值参数、可变参数和关键字参数的顺序接收,否则就会报错
print(name)
print(country)
print(args)
print(kwargs)
# other2(‘wubing‘,‘xxx‘)
# other2(‘wubing‘,‘beijing‘,‘python‘,‘changping‘,user=‘niuhanyang‘)

#关键字参数调用
def write(filename,model,ending,user,os,money,other):
print(filename)
print(model)
print(ending)
print(user)
print(os)
print(money)
print(other)
# write(os=‘Windows‘,user=‘wubing‘,model=‘w‘,filename=‘a.txt‘,
# ending=‘utf-8‘,money=9999,other=‘xxxxx‘
# )
# write(‘a.txt‘,‘w‘,money=99,os=‘windos‘)
# write(os=‘windos‘,‘a.txt‘)

#函数的返回值
def plus(a,b):
#1、函数碰到return,立即结束这个函数
#2、调用完函数之后,返回计算的结果
#3、函数可以没有返回值,如果没有返回值的话,默认给你返回None
#如果这个函数的处理结果咱们需要在别的地方用到,那你就得给函数返回值
#如果函数return多个值的话,那么它会把多个值放到一个元组里面去
c = a+b
return c


score1 = 50
score2 = 90
def echo():
return score1,score2

#1、判断小数
# 1.92
# -1.988

def is_float(s):
‘‘‘
这个函数是用来判断传入的是否为小数,包括正小数和负小数
:param s: 传入一个字符串
:return: True or False
‘‘‘
s = str(s)
if s.count(‘.‘)==1:#判断小数点个数
sl = s.split(‘.‘)#按照小数点进行分割
left = sl[0]#小数点前面的
right = sl[1]#小数点后面的
if left.startswith(‘-‘) and left.count(‘-‘)==1 and right.isdigit():
lleft = left.split(‘-‘)[1]#按照-分割,然后取负号后面的数字
if lleft.isdigit():
return True
else:
return False
elif left.isdigit() and right.isdigit():
#判断是否为正小数
return True
else:
return False
#全局变量和局部变量
# score3 = [1,2,3,4,5]
# score3 = {"id":1}
score3 = 100
def my_open():
#在函数里面定义变量叫局部变量,它只能在函数里面用
#出了该函数外,就不能使用了
#在函数外面定义的变量,是全局变量,在函数内也可以使用
#如果想在函数里面修改全局变量的值,那么要先用global关键字声明
#要修改全局变量是int、string的话,必须得写global
#如果是字典和list的话,要修改的话,不能加global
fw = open(‘a.txt‘,‘a+‘)
fw.seek(0)
print(‘score3‘,score3)
d={‘id‘:2}
d[‘price‘]=99

def hh():
print(‘修改商品...‘)
def cc():
print(‘添加商品...‘)
def query():
print(‘查询商品。。。‘)
menu= {
‘1‘:hh,
‘2‘:cc,
‘3‘:query
}
chioce = input(‘输入编号‘)
menu[chioce]()

2、监控日志

import 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()
print(‘ips,长度:‘,len(ips))
ip_set = set(ips)#存放的是去重之后的ip地址
print(‘去重之后的ip_set的长度:‘,len(ip_set))
for ip in ip_set:
if ips.count(ip)>200:
print(‘已经把%s加入黑名单‘%ip)
# os.system(‘iptables -I INPUT 1 -p tcp -s %s -j DROP‘%ip)
time.sleep(60)
#set是集合,集合是天生去重

# d = {"id":1,"price":2}
# l = [1,2,3,4,4,5,5]
# s = set(l)#强制类型转换,把list转成集合
# for i in s:
# print(i)


3、三元运算符


a = 1
b = 2
#下面这个
c = a if a>1 else b

#和下面是一样的效果
if a > 1:
c = a
else:
c = b

s=[]
nums = list(range(1,11))
for i in nums:
if i%2==0:
s.append(i)
print(s)
ss = [i for i in nums if i%2==0]
print(ss)
#这两种是一样的

4、集合



#1、
#集合也是一种数据类型,一个类似列表东西,
# 它的特点是无序的,不重复的,也就是说集合中是没有重复的数据

#定义集合
nums = [1,1,1,1,23,4,56]
num_set = set(nums)
#通过强制类型转换,来定义集合
num_set1 = {1,2,3,4,5,6}


list1 = {1, 2, 3, 4, 5, 6, 9}
list2 = {2, 3, 4, 6, 1}
list3 = {1, 2, 3}
# print(list1.intersection(list2))
# 取交集,也就是取list1和list2中都有的
# print(list1 & list2)# 取交集
# print(list1.union(list2)) # 取并集,也就是把list1和list2合并了,然后去除重复的
# print(list1 | list2)# 取并集
# print(list1.difference(list2)) #取差集 在list中存在,在list2中没有的
# print(list1 - list2)
# print(list3.issubset(list1))#判断list3是不是list1的子集
# print(list1.issuperset(list3))#判断list1是不是list3的父集
# print(list1.isdisjoint(list3))#判断list1和list3是否有交集
# print(list1.symmetric_difference(list2))
# #对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉
# print(list1 ^ list2)
list1.add(888)#添加元素
list1.update([777,666,666])
list1.remove(777)#删除元素,如果元素不存在会报错
list1.pop()#删除一个随机的元素,并返回删除的元素
list1.discard(‘dddd‘)#如果删除的元素存在,删除,不存在不做处理

20170604第四讲