python3学习(五)--函数、全局变量、可变参数和关键字

########################函数##################################
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)

猜你喜欢

转载自www.cnblogs.com/xm-sunnylin/p/9641723.html