python生成递归json_python函数、递归、json模块操作
一、修改文件
修改文件方法:简单粗暴直接,步骤以下:
#1、打开一个文件,获取到文件的内容
#2、对内容进行修改
#3、清空文件的内容
#4、把新的内容写入到文件
代码示例:
f=open('username','a+')
f.seek(0)
all_str=f.read()
new_str=all_str.replace('123456','79910')
f.seek(0)
f.truncate()
f.write(new_str)
f.close()
#把每行的内容加上str,代码示例:
f=open('username','a+')
f.seek(0)
all_str=''
fors inf:
new_s='syz'+s
all_str=all_str+new_s
f.seek(0)
f.truncate()
f.write(all_str)
f.close()
f =open('username', 'a+')
f.write()#只能写字符串
f.writelins()#会帮助循环一次
# fw = open('username','w')
# fw.write('hhhh')
# fw.flush() #强制把缓冲区里面的数据写到磁盘上
#打开两个文件
#a文件
#写一行到b文件
#a.txt a.txt.bak
#删掉a文件,b文件名改成a文件名
#with打开不用关文件
#花替换为flower
importos
withopen('words',encoding='utf-8') asfr,open('.words.bak','w',encoding='utf-8') asfw:
forline infr:
new_line=line.replace('花','flower')
fw.write(new_line)
os.remove('words')#删除文件
os.rename('.words.bak','words')#改名
二、函数
概念:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率、代码可扩展。
函数代码结构:
def say(): #函数名
print('hello')#函数体
#函数不调用是不会被执行的
调用函数时用函数名+括号的格式
# say() #调用函数
1、函数的参数
函数在调用的时候,可以传入参数,有形参和实参
形参:
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。
实参:
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。函数调用结束返回主调用函数后则不能再使用该形参变量。
def calc(a,b): #形参, 形式参数
#位置参数,必填参数
res = a * b
print('%s * %s = %s'%(a,b,res))
# calc(7,8) #实参,实际参数
2、参数组:
参数组的参数处用“*args”表示。参数组特点:(1)参数是非必填的;(2)没有限制参数的个数;(3)传过来的参数放到args参数里,不限格式
def syz(*args):#参数组
username=args[0]
pwd=args[1]
age=args[2]
print(args)
syz('liubei','2423','2323')
执行结果:
('liubei', '2423', '2323')
如果定义函数时,写成 def syz(a,*args),则a是必传参数,*args是非必填的
def syz(a,*args):#参数组
print(args)
syz('liubei','2423','2323')
执行结果:
('2423', '2323')
3、关键字参数
关键字参数用“**kwargs”表示。特点:(1)参数是非必填;(2)没有限制参数个数;(3)所传参数必须是字典格式。
def syz2(**kwargs):#关键字参数,参数放到字典里面
print(kwargs)
syz2()
syz2(name='nhy',age=38)
syz2(name='nhy',age=38,addr='回龙观',home='河南')
代码执行结果:
如果def syz2(time,**kwargs),则time参数必传。其中,time='20180912'是第一个参数time的值,因此输出kwargs时,没有time这一项
def syz2(time,**kwargs):#关键字参数,参数放到字典里面
print(kwargs)
syz2(name='nhy',age=38,addr='回龙观',time='20180420')
代码执行结果:
{'age': 38, 'addr': '回龙观', 'name': 'nhy'}
4、函数的返回值:
每个函数都有返回值,如果没有在函数里面指定返回值的话,在python里面函数执行完之后,默认会返回一个None,函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元组中,返回的是一个元组。
为什么要有返回值呢,是因为在这个函数操作完之后,它的结果在后面的程序里面需要用到。
函数中的返回值使用return,函数在遇到return就立即结束。
操作文件的函数,如果传内容参数,则将对应内容写入文件。没有传内容,就读取文件原来的内容,代码示例:
def op_file(file_name,conent=None):
#默认值参数,它是非必填的
f = open(file_name,'a+',encoding='utf-8')
f.seek(0)
if conent:#不为空代表写
f.write(conent)
f.flush()
else:
all_users = f.read()
return all_users #调用完函数之后,返回什么结果
f.close()
# res = op_file('a.txt')
# print(res)
def haha():
#函数里面遇到return函数就立即结束了
for i in range(5):
print(i)
if i==3:
return #只写一个return的话,就返回None
# res = haha()
# print(res)
检查输入的密码是否符合要求,密码包含大小写字母、数字、特殊字符,长度6-11之间
import string
def check(pwd):
#长度6-11
#字母和数字吧
if len(pwd)>5 and len(pwd)<12:
if set(pwd) & set(string.ascii_letters) and set(pwd) & set(string.digits):
print('密码合法')
else:
print('密码不合法')
else:
print('密码不合法')
# res = check('asd1234') #函数里面如果没有return的话,默认返回None
案例:判断是否为小数:
#需求分析:
#1、 小数点个数 .count()
#2、按照小数点进行分割 1.98 [1,98] s.87 98.s1
#3、正小数:小数点左边是整数 右边也是整数 .isdigits()
#负小数:小数点左边是以负号开头,但是只有一个负号,右边也是整数 -9.85
defis_float(s):
s=str(s)if s.count('.')==1:#小数点个数
s_list = s.split('.')
left= s_list[0] #小数点左边
right = s_list[1] #小数点右边
if left.isdigit() and right.isdigit(): #正小数
returnTrueelif left.startswith('-') and left.count('-')==1 and\
left.split('-')[1].isdigit() and\
right.isdigit():#判断合法负小数
returnTruereturn False
三、变量
局部变量和全局变量
局部变量意思就是在局部生效的,出了这个变量的作用域,这个变量就失效了
全局变量的意思就是在整个程序里面都生效的,在程序最前面定义的都是全局变量,全局变量如果要在函数中修改的话,需要加global关键字声明,如果是list、字典和集合的话,则不需要加global关键字,直接就可以修改。
#如果要改全局变量的话,那你要先声明一下,你修改值是全局变量
def sayName():
global name
name = '刘伟'
print('name1',name)
def lw():
age = 28
return age
def setName():
global name
name = '刘备'
# sayName()
# setName()
# print('name2',name)
一个函数中使用多个变量
def op_mysql(host,port,username,password,db,charset,sql):
print('连接数据库')
op_mysql(
'192.168.1.1',
3306,'root','123456','jxz','utf-8','select')
op_mysql(
host='192.168.1.1',
db='sfsdf',
charset='sdfsdf',
sql='select * from user;'
)
四、递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归调用的意思就是,在这个函数内部自己调用自己,就有点循环的意思。
def test1():
num = int(input('please enter a number:'))
if num%2==0:#判断输入的数字是不是偶数
return True #如果是偶数的话,程序就退出了,返回true
print('不是偶数请重新输入!')
return test1()#如果不是偶数的话继续调用自己,输入值
# print(test1())#调用test
#少用递归,递归最多递归999,递归的效率不高。
i = 0
def test():
global i
i+=1
print(i)
test()
test()
递归调用的特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
五、json数据解析
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。
Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:
json.dumps():对数据进行编码。把python的数据类型变成json串
json.loads(): 对数据进行解码。把json串变成python的数据类型
json.dumps与 json.loads 实例:
importjson#json串是一个字符串#把json串转换成字典
f = open('product.json',encoding='utf-8')#res = f.read()#product_dic = json.loads(res) #把json串变成python的数据类型#print(json.load(f)) #传一个文件对象,它会帮你读文件
d ={'zll':{'addr':'北京','age':28},'ljj':{'addr':'北京','age':38}
}
fw= open('user_info.json','w',encoding='utf-8')#dic_json = json.dumps(d,ensure_ascii=False,indent=4) #字典转成json,字典转成字符串#fw.write(dic_json)
json.dump(d,fw,ensure_ascii=False,indent=10) #操作文件
将数据类型为字典的变为json串写入文件,将文件中的json串变为字典,读取出来,代码:importjsondef op_data(filename,dic=None):if dic:#写入进去
with open(filename,'w',encoding='utf-8') as fw:
json.dump(dic,fw,ensure_ascii=False,indent=4)else:
with open(filename,encoding='utf-8') as fr:returnjson.load(fr)
FILE_NAME= 'user_info.json'all_users=op_data(FILE_NAME)for i in range(3):
choice= input('输入,1注册,2、删除')if choice=='1':
username= input('usenrame:')
pwd= input('pwd:')if username not inall_users:
all_users[username]=pwd
op_data(FILE_NAME,all_users)elif choice=="2":
username= input('usenrame:')
all_users.pop(username)
op_data(FILE_NAME, all_users)
六、内置函数
print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真
print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真
print(bin(10))#十进制转二进制
print(bool(None))#把一个对象转换成布尔类型
print(chr(69))#打印数字对应的ascii
print(ord('E'))#打印字符串对应的ascii码
s='nhy'
d={}
print(dir(d))#打印传入对象的可调用方法
exec('def a():print("我是a")')#执行python代码
a =eval('1+2') #也是用来执行python代码的,只能执行一些简单的代码,比如运算,[] {}
print(a)
print(filter(lambdax:x>5,[12,3,12,2,1,2,35]))#把后面的迭代对象根据前面的方法筛选
print(map(lambdax:x>5,[1,2,3,4,5,6]))
print(max(111,12))#取最大值
print(min((1,2,3)))#取最小值
print(abs(-1))#取绝对值的
print(round(11.119999,3))#取几位小数
print(sorted([2,31,34,6,1,23,4]))#排序
python生成递归json_python函数、递归、json模块操作相关推荐
- [Python] 生成迭代器 iter() 函数
Python 生成迭代器 iter() 函数 功能: 函数用来生成迭代器. 语法: iter(object[, sentinel]) object – 支持迭代的集合,对象,比如list,元组等. s ...
- python自动解析json_Python语言解析JSON详解
本文主要向大家介绍了Python语言解析JSON详解,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. JSON 函数使用 JSON 函数需要导入 json 库:import jso ...
- python decimal类型转化_python的json模块,针对decimal类型直接dumps报错
主要涉及的代码 def _iterencode(o, _current_indent_level): if isinstance(o, basestring): yield _encoder(o) e ...
- python 递归函数例子_python函数递归的几个例子
斐波那契数列1,1,2,3,5,8,13,21--#!/usr/bin/env python# encoding: utf-8def fib(n):if n == 1 or n == 2:return ...
- python生成伪随机数的扩展库_python模块介绍-random:生成伪随机数
概述 这个模块实现的伪随机数生成器. 对于整数,从区间选取.对于序列,随机元素. 在实线的,有功能来计算均匀分布,正态分布(高斯) ,对数正态分布,负指数,γ和β分布.对于生成的角度分布,冯·米塞斯的 ...
- python中的替换函数_python:替换模块类中的函数
我试图替换类中定义的函数,以便在不更改实际代码的情况下修改其函数(如内部工作). 我以前从来没有这样做过,因此在更换它时遇到一些问题. 更改代码会让我访问python库中的包,这不是一个很好的选择. ...
- python 多层嵌套 json_python解析多层json操作示例
本文实例讲述了python解析多层json操作.分享给大家供大家参考,具体如下: 原始文件内容: { "MaskPolygonItem": { "0": { & ...
- python中的decode函数在哪个模块_python3 中encode 和decode的使用方法。
编码: 将文本转换成字节流的过程.即Unicode----------->特定格式的编码方式,产生特定的字节流保存在硬盘中(一般为utf-8格式). 解码: 将硬盘中的字节流转换成文本的过程.即 ...
- python3 json模块操作
背景 json 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成. 一般表现形式是一个无序的 键值对 的集合. 资料: 官方文档: https://docs.python.org ...
最新文章
- R语言ggplot2可视化移除数据中的NA值再可视化实战:消除图形中非常突出的NA柱状图、使用subset函数、使用drop_na函数
- php画中画,画中画功能 怎么将两个视频叠加播放,制作成画中画效果
- php计算200以内偶数的和并输出_如何用PHP实现数组中偶数位置元素大于奇数位置元素?...
- Java是先难后易吗_在解决问题的时候,是先难后易还是先易后难?
- 详解spring boot mybatis全注解化
- xCodeGhost 事件专题总结
- lucene in ation 第三章(1) sear…
- 长度测试仪:可测量网线/电话线/光纤等的长度
- RNA-seq 详细教程:分析流程介绍(1)
- 微信登录开发-java
- 收集需求的方法:群体创新技术
- 视频尺寸修改的小方法,同时处理多个视频,新媒体必备
- 技术人如何打造个人品牌,提高身价?
- 噢!查重原来是这样实现的啊!
- 杨米尔斯理论讲了什么
- mysql入门到精通_Mysql从入门到精通全文整理
- angular ui-grid 表格插件配置项
- WinForm(十五)窗体间通信
- 8-2 MVC(六大思维)
- HTML5期末大作业:购物商城网站设计——尤洪购物商城-功能齐全(30页) HTML+CSS+JavaScript 学生DW网页设计作业成品 实训大作业