########################函数##################################
def my(name): #函数名 # 函数体 name = 'python'#局部变量,出了函数体就无法使用 return name #return后调用 def db_connect(ip,port=3306): print(ip,port) db_connect('118.24.3.40',3307) db_connect('118.24.3.40') import json def op_file_tojson(file_name,dict=None): if dic: with open(file_name,'w',encoding='utf-8') as fw: json.dump(dic,fw) else: f = open(file_name, encoding=utf - 8) content = f.read() if content: res = json.loads(content) else: res = {} f.close() return res #return两个作用: # 1、结束函数,只要函数里面遇到return,函数立即结束运行 # 2、返回函数处理的结果 #没返回值的函数,打印出来就是None了是吧 def my2(): for i in range(50): return i print( my2() ) #调用my2(),打印my2()的返回值。类似于 res=my2() print(res) #打印的是0,说明只循环了一次 def my3(): a=1 b=2 c=3 return a,b,c b,c,d = my3() #数字 print(b,c,d) s = my3() #元组 print(type(s)) def my4(s:str,d:dict): #告诉它应该传什么类型,实际上不传该类型的也没关系 print(s) print(d) my4(123,'abcd') #实际上不传该类型也没关系
#####################全局变量#################################
#全局变量。 #全局变量每个def都能用,且都可以修改,所以建议少用全局变量。 #全局变量占内存。局部变量调用完之后内存就回收了,不会占内存。 import datetime def get_doday(): print(datetime.datetime.today()) name = 'testlin'#全局变量,只有int、元组才需要申明,list不需要申明 name2 = [] def get_name(): global name #将get_name中的局部变量改成全局变量 name = 'testlin1' #局部变量 name2.append('hahaha') print('get_name:',name) print(name2) def get_name2(): print('get_name2:',name) get_name2() get_name() print('函数外面的name:',name) #==========练习1================ money = 500 def test(consume): return money - consume def test1(money): return test(money)+money money = test1(money) print(money) #==========练习2================ def test(): global a a = 5 def test1(): c = a+5 return c res = test1() print(res) #---以上会报错,因为没有调用test(),直接调用test1(),那么不会定义a,报错a未定义 #优化: def test(): global a a = 5 def test1(): c = a+5 return c test() #先调用定义a,才不会报错 res = test1() print(res)
#####################可变参数和关键字#################################
#######可变参数######## def my(name,sex='女'): #name位置参数,必填 #sex 默认值参数,非必填 #可变参数 #关健值参数 pass #phone_num 可能会变成多个,此时使用可变参数 #变量名前面加星号'*' def send_sms(*args): #一个星号传的是元组 #可变参数,参数组 #1、不是必传 #2、他把传入的元素全部放到一个元组里 #3、不限制参数个数 #4、他用在参数比较多的情况 for p in args: print(p) #1、不传参数 send_sms() #2、传1个 send_sms(1311111111) #3、传N个 send_sms(13111111112,12121212121,122222222121) #####关键字参数####### def send_sms2(**kwargs): #两个星号传的是字典,keywordargs #1、不是必传 #2、不限制参数个数 print(kwargs) send_sms2() send_sms2(name = 'xaxa',sex = 'nv') send_sms2(addr = '中国',contry = '北京',c = '大大大',d = 'dddd') def my(name,country='china',*args,**kwargs): #如果四个必须都要,必须按照以下顺序:1、位置参数 2、默认值参数 3、可变参数 4、关键字参数 print(name) print(country) print(args) print(kwargs) my('testlin','Japan','beijing','天通苑',color='红色',age=33)