#变量时,如果是大写的那这个变量就是一个常量#可以把文件名及路径定义一个变量
# #-------------------------------函数-------------------------------
def my():
#pass#函数内容是函数体
#name='python'#函数内的变量是局部变量
return name
# #-----------------默认函数-------------------------
def sjk(ip,port=3306):#函数形参里可以设置默认的,如def sjk(ip,port=3306),如果实参里有值优先用实参里的值
print(ip,port)
#sjk('110.1.1.1',8888)
res=sjk('110.1.1.1',8888)
print(res)
# #---------return有两个作用,一个是结束函数,一个是返回结果,如果函数里遇到return立即结束和beark一样------------
def my2():
for i in range(50):
return i #如果函数里遇到return立即结束,return下面有再多的也不会运行。
print(my2())
res=my2()
print(res)
# #-------------return其他用法--------------------
def my3():
a=1
b=2
c=3
return a,b,c
b,c,d=my3()
s=my3()
print(b,c,d)#如果函数定义了多个变量,那输出的就是元素,可以定义多个变量,比如a,b=1,2 这样定义的就是a=1 b=2 是一样的
print(s)#如果函数定义了一个变量,那输出的是一个元组
# #---------------------------------------------
def my4 (s:str,d:dict):#这种形式不是必须的,只是提示型,实际不穿这种类型也不会报错。比如s=123 d='abddd'
print(s)
print(c)
my4(123,'abc')
# #----------如果为空就写入-------------
def opdd(file,dic=None):
if dic:
with open(r'D:\users.txt',encoding='utf-8') as fw:
json.dump(dic,fw)
else:
f=open(r'D:\users.txt',encoding='utf-8')
cont=f.read()
if cont:
res = json.loads(cont)
else:
res={}
f.close()
return res
#-------------------------全局变量--------------------
name='wangwang'#全局变量,全局变量定义到函数的上面,这才是全局变量,所有函数都可以用。局部变量只能函数使用。
names=[]
def get_name():
global name#global,可以局部变量进行说明,变为全局变量,可供其他函数调取,只有str int 和元组才要声明。list和字典不需要声明,都可以供其他函数使用。
name='haigonggong'#局部变量。如果有局部变量,只会取局部变量,当没有局部变量的时候才会去全局变量,
names.append('abc')#list和字典不需要声明,都可以供其他函数使用。
print('函数里面的name',name)
def get_name2():
print('函数外面的name',name)#输出wangwang。因为函数调取顺序先读的 get-name2
get_name2()
get_name()
print(name)
print(names)
#----------递归函数------------
#递归最多递归999次,递归就是自己调用自己,与循环一样的效果。
count=0
def say():
global count
count+=1
print('say')
print(count)
say()
say()
#---------递归演示-----------
def test1():
num = int(input('please enter a number:'))
if num%2==0:#判断输入的数字是不是偶数
return True #如果是偶数的话,程序就退出了,返回true
print('不是偶数请重新输入!')
return test1()#如果不是偶数的话继续调用自己,输入值
print(test1())#调用test
#----递归演示-------------
def sjk1(ip,user,db,password):
print(ip)
print(user)
print(db)
print(password)
sjk1(ip='123.123',user='nini',db='nihoa',password='abc123')
sjk1('123.123','nini',db='nihoa',password='abc123')#可以不加变量名称,一一对应的,但是要按照顺序,也可以混搭带有变量名的
#---------------可变参数--------------
def my(name,sex='娘'): #name位置参数,是必填的。 #sex 是默认参数
def d_sms(*num):#1个*是可变参数,把元素放到元组里
#可变参数,参数组
#1。不是必传的,2.他传入的元素全部放到元组里,3.不限制参数个数,4.用在参数比较多的情况下。一般用(*args)
print(num)
d_sms(1)
d_sms()
d_sms(6,3,4,5,6,7)
#-----------关键字参数---------------
def d_sms2(**num1):#2个*是关键字参数,把元素放到字典里
# 可变参数,参数组
# 1不是必传的,2.他传入的元素全部放到字典里,3.不限制参数个数,4.用在参数比较多的情况下。一般用(**kwargs)
print(num1)
d_sms2()
d_sms2(abc='ddd')
d_sms2(aaa='bbb',ccc='ddd')
#_------------函数不常用方法--------
def my(name,cy='china',*args,**kwargs):
#1、位置参数,2.默认值参数,3,可变参数,4.关键字参数
print(name)
print(cy)
print(args)
print(kwargs)
my('小刚','北京','南京','aaaaaa',ccc='你你你',bbb='嘎嘎嘎')
#函数,方法,实现特定功能的一坨代码
#提高代码的复用性
guan()#函数名+()才能调用
import json
with open('a.txt') as f:
res = json.load(f)
with open('b.txt') as f:
res = json.load(f)
with open('c.txt') as f:
res = json.load(f)
#调用函数
# def my():
# print('函数')
# my()
import json
# def my(:
# print('函数')
#函数里面定义的变量,就是局部变量,局部变量只能在函数里面使用
#一旦出了函数外面之后,就不能使用了
def get_f(file_name):#形参
#入参:传入一个文件名
#出参:转成内容转成字典返回。
with open(file_name,encoding='utf-8') as f:#文件名定义#wiht。as自动判断什么时候关闭文件,不用在写close了
res= json.load(f)#函数里面定义的变量,就是局部变量,局部变量只能在函数里面使用
return res #增加return返回值之后外部就可以使用了#,处理后拿到返回值。return
#一个函数只做一件事。
abc=get_f(r'D:\users.json')#实参
# print(abc)
#函数里可以有多个参数,函数里面可以其它函数,如果有需要调用用函数返回值的时候才用return
def xie(name,cont):#函数存在多个参数
with open(name,'w',encoding='utf-8') as fa:
json.dump(cont,fa,ensure_ascii=False,indent=4)
# fa.write(json.dump(cont))
d={'nanme1':'gagaga'}
d2={'nanme2':'gagaga'}
xie(r'D:\users.json',d)
xie(r'D:\users.json',d2)