python学习随笔记2
2018-06-12 09:38 小娜_8337 阅读(215) 评论(0) 收藏 举报11、读取json文件
import json with open('file.txt','r+',encoding='utf-8') as f: str = f.read() #读取文件 dic = json.loads(str) #将字符串转为字典 dic = json.load(f) #不用read文件,直接拿数据转为字典 str = json.dumps(dic)#将字典转为字符串 f.write(str) #将字符串写入文件 json.dump(str,f,indent = 4) #将字符串直接写入文件,缩进4个字符
12、集合
集合天生去重,无序 用{}表示
空字典定义:dic = {} 但空集合定义:null_set = set()
list1 = [1,1,2,3,4,5,] list2 = [2,3,6,7] list转为集合 list1 = set(list1) list2 = set(list2) list1 & list2 #交集 list1.intersection(list2) #交集 list1 | list2 #并集 list1.union(list2) #并集 list1-list2 #差集 list1.difference(list2) #差集,list1有list2没有 list1.issubset(list2) list1是不是list2的子集 list1.issuperset(list2) list1是不是list2的父集 list1 ^ list2 对称差集 list1.symmetric_difference(list2) #对称差集,list1和list2互相没有的 list1.pop() #随机删除 list.remove(33)#删除不存在的会报错 list.discard(33)#删除不存在的不会报错
13、函数
函数是一种简化的方法
def say(name,sex='男'):#形参,sex不传则默认传男 print('%s say %s hahah'%(name,sex)) say('lily','女')#实参
常亮一般用大写定义
FILE_NAME = 'goods.json'
全局变量:函数之外定义的变量
局部变量:函数之内定义的变量,出了函数就不能用了
函数内用到全局变量需要用global来声明
def test(): global name#用的是全局变量的name name = '小白' print(name)#在函数内找不到name,则去全局变量中找
list和字典这种可变变量无需声明
d = {'name':'abc'}#字典和list可变的变量,则不需要grobal来声明
def hhh():
d['sex'] = 'nv'
print(d)
hhh()
可变参数:参数前加*为可变参数,可变参数不必填,不限制参数个数,可变参数放到元祖里面,习惯用*args命令,一般放到最后面
def send_mail(*args): for e in args: print('给xxx发邮件了%s'%e) send_mail('niuhanyang@163.com') send_mail('niuhanyang@163.com','lxy@163.com')#可传多个参数 send_mail()#也可不传参数
def run(name,*args): print(name) print(args) run('lcs',29,'beijing','tiantongyuan')#args为(29,'beijing','tiantongyuan')
函数返回多个值,用一个变量接收,则存到到元祖里
def nhy(): name = 'nhy' sex = 'nan' age = 18 return name,sex,age#return 多个值,一个变量接收的话返回到元祖里 res = nhy()
a,b,c = nhy()
#可用多个变量接收 print res
关键字传参,不需要按顺序
def op_db(ip,port,db,user,passwd,sql): print('连接mysql操作数据库') pass op_db(db='jxz',ip='192.168.1.1',port=3306,user='ln',passwd='a123',sql='insert dxx') #位置参数和关键字参数一起用的话,关键字参数必须放后面 op_db('192.168.1.1',3306,db='jxz',user='ln',passwd='a123',sql='inseff')
递归函数:函数自己调用自己,最多循环999次
def add(): print('haha') add()
递归需要有一个明确的结束条件
def my2(): num = input('输入一个数字:') num = int(num) if num%2 != 0: print('请输入偶数') return my2() else: print('是偶数') my2()
列表推导式(列表生产式)
res = [1,23,4,24,3] res= [str(i).zfill(2) for i in res] print(res) ou = [i for i in range(0,101,2)] print(ou)
内置函数方法
print(max(range(1,28)))#取最大值 print(min(range(28)))#取最小值 print(sum(range(1,101)))#求和 msg = 'hello' name = input('www:') print(dir(msg)) print(sorted('33d4565')) #字符串排序返回列表 print(sorted('aasde',reverse=True))#将序排列 print(chr(97))#返回对应ascii码 print(ord('a')) print(round(5.597,2))#保留小数,会自动的四舍五入 print(eval('1+1')) #执行python代码,只能执行简单的python代码 exec()#执行复杂的python代码
枚举方法
stus = ['雷振华','胡婷','商杰','涛涛'] for i,e in enumerate(stus): print(i,e)
zip方法
stus = ['雷振华','胡婷','商杰','涛涛'] sex = ['nan','nv','nv','nan','dd'] age = [12,3,2,44] for name,s,a in zip(stus,sex,age): print(name,s,a)
map和filter方法
map和filter都是循环帮你调用函数
import time,os def makdir(dir_name): if not os.path.isdir(dir_name): os.mkdir(dir_name) return True dirnames = ['android', 'ios', 'tomcat', 'java', 'python'] # map(makdir, dirnames) #放到生成器里面,前面参数为方法,后面参数为可迭代的 res = list(map(makdir,dirnames))#list才开始调用函数 print(res)
#生成器为了节省空间 #每次循环按照规则去生成一个数据,内存中只有一个数据,非整个list,增加了cpu计算时间 all_data = (timestampToStr(int(time.time())-86400*i) for i in range(10))#用小括号是生成器,用[]返回list for a in all_data: print(a) print(all_data) nums = (str(i).zfill(2) for i in range(10))#生成器 nums1 = [str(i).zfill(2) for i in range(10)]#list
map和filter区别
def my(num): if num%2 == 0: return True res = list(filter(my,range(10)))#将函数处理结果为False过滤了,真的话,把传入的值保存下来 res2 = list(map(my,range(10)))#返回的是函数返回值
print('res',res)
print('res2',res2)

浙公网安备 33010602011771号