python学习笔记(四)-- 函数、参数类型、递归调用

函数

#定义一个函数,包括函数名,函数体,参数
def calc(a,b):#形参
    return a+b #返回值,函数遇到return自动结束

result = calc(1,3)#函数调用
print(result)

#实例----判断输入的是否是合法的小数
#1、判断是否只有一个小数点
#2、正小数,以小数点进行分隔,左边是一个整数,右边也是一个整数
#3、负小数,右边是整数,左边以负号开头,只有一个负号,负号后面是小数
def check_float(number):
    number = str(number)#转化成字符串
    if number.count('.') == 1:
        left,right = number.split('.')  #用两个变量接收两个元素
        # print(number)
        #判断正小数
        if number[0].isdigit() and number[1].isdigit():
            print("输入的价格正确")
            return True
        #判断负小数
        elif number[0].startswith('-')  and number[0][1:].isdigit() and number[1].isdigit():
            print("输入的价格正确")
            return True
    #除了正小数负小数,其余情况都会走到这里
    return False

局部变量VS全局变量

局部变量--定义在函数里面的变量,只能在函数里面使用,在函数外面不能使用
全局变量--作用于整个程序

数据类型:int str tuple #不可修改的变量需要通过global声明才能在函数里面修改全局变量
数据类型:list dict set #可以修改的变量不需要global,直接可修改
1 #在函数内修改全局变量,需要用global声明
2 money = 500
3 def func():
4     global money#声明全局变量
5     money += 100
6     return money

函数形参有四种类型:

#1、必填参数(位置参数)
#2、默认值参数
#3、参数组
#4、关键字参数
位置参数
1
调用函数的时候,可以全部都用位置参数,位置是一一对应的,必须按照位置来传 2 def xxx(name,age,sex,addr,phone,qq,mail): 3 print(name,age,sex) 4 #位置参数 5 xxx('xiaomi',12,'m','cd',12346,3322323,'11@aa.com')
关键字参数
1
调用函数时,可以位置参数与关键字参数一起使用,位置参数必须在前面 2 def xxx(name,age,sex,addr,phone,qq,mail): 3 print(name,age,sex) 4 #关键字参数 5 xxx('xiaomi',11,'f',addr='cd',phone=13113,mail='fewwef',qq=121212)
默认参数
1
#默认值参数在定义形参时给它赋一个默认值,如果函数调用时没传参数,则用默认值,传了参数则用传入值 2 def op_file(file, content=None): 3 if content: 4 with open("a.txt",'w') as f: 5 f.write(content) 6 else: 7 with open('a.txt') as f: 8 res = f.read() 9 return res 10 op_file('a.txt','hello') 11 print("读文件",op_file('a.txt'))
参数组
1
#参数前面加*,参数是一个元组 2 def send_mail(*names): 3 for name in names: 4 print("给%s发测试邮件!"%name) 5 send_mail() 6 send_mail('xiaomi') 7 send_mail('xiaomi','xiaohei','ewiiew')
1 # 两个*号,关键字传参,参数存成一个字典
2 def xiaomi(**info):
3     print(info)
4 xiaomi()
5 xiaomi(name = '123',addr='233')
#参数例子
def xiaomi(name,age=None,*args,**kwargs):
    print(name)
    print(age)
    print(args)
    print(kwargs)
#传入参数时,顺序是1、位置参数2、默认值参数3、可变参数4、关键字参数
xiaomi('xiaobai',18,'cd','sh',money=500,func='xiaobai')

传入参数为list或者dict

def op_mysql(host,port,user,passwd,db):
    print(host)
    print(port)
    print(user)
    print(passwd)
    print(db)

db_info = ['127.0.0.1','3306','root','123456','szz']
db_info2 = {'host':'127.0',
            'port':'3306',
           'user':'root',
           'passwd':'123456',
           'db':'szz'}
op_mysql(*db_info) #解包,把list元素分别传入函数,也可以是字符串等有下标的数据类型
op_mysql(**db_info2)#把字典元素分别传入函数

函数返回值

return:返回函数结果;函数体内遇到return结束函数

#函数有多个返回值时,返回的是一个元组
def get_file(age,name,addr):
    age += 5
    name = 'szz_' + name
    addr = 'cd_' + addr
    return age,name,addr
res = get_file(19,'xiaobai','ccc')
print(res)
结果:(24, 'szz_xiaobai', 'cd_whc')

定义形参时可以指定参数类型,但并不一定要按照指定的数据类型传参

def add_user(username:str,password:str):#指定参数数据类型
    print('username',username)
    print('password',password)
add_user([12,3,4],1111)

递归调用

#判断输入的数字是不是偶数
def even():
    num = input('请输入一个数字:').strip()
    if int(num)%2 != 0:
        print("请重新输入")
        even()#递归调用自己
even()
原文地址:https://www.cnblogs.com/yanyan-/p/10749191.html