代码改变世界

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)