函数
#定义一个函数,包括函数名,函数体,参数 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()