函数简介
一、函数
函数就是一个功能,一个方法,简化代码。函数是用来提高代码的复用性的。
#一个函数只做一件事
#重复的代码就是低级的
#实现同样的功能,代码越少越好
函数必须得调用才能执行。
1、函数的简单介绍,如下
1 def say(name):# 函数,形参,形式参数,变量 2 print(name)# 函数体 3 x = 'yhx' 4 say(x)#实参,实际参数
2、函数之必填参数、位置参数
位置参数的形参与实参不一致时,以实参为准
1 def say(name,sex='男'):# 函数,形参,形式参数,变量 2 # 必填参数 位置参数 3 # 默认值参数 非必填参数 4 print('%s哈哈哈%s'%(name,sex)) # 哈哈哈 5 # 函数体 6 x = 'nn' 7 say(x) 8 say(x,'女') #实参,实际参数 9 # 函数必须得调用才会执行
3、函数的特点
#在函数里面的变量全都是局部变量,它只能在函数里面使用,函数执行结束那么没有这个变量
#返回值
# 如果需要用到函数的处理结果的话,那么就写return,不需要的话,那就不用写
#函数里面如果碰到return,函数立即结束
1 # 计算两个数字相乘 2 def calc(a,b): 3 res = (a*b) # res是局部变量,只在函数体内有效 4 print(res) # 所以输入结果要写在函数体内,可输出执行结果 5 cf = calc(3,9)
使用return:
1 # 计算两个数字相乘 2 def calc(a,b): 3 res = (a*b) # res是局部变量,只在函数体内有效 4 return res# 函数体外要调用这个结果,则需要return 5 cf = calc(3,9) 6 print(cf) # res这个变量是在函数体内的,无法在函数体外直接调用,故此处输出应写cf
4、默认值参数
content参数有默认值,默认就为None
如下代码,如果传给了我参数的内容,那我就认为是要写的,如果没传,那就是要读的
#默认值参数 def op_file(file_name,content=None): print(content) if content: write_file(file_name,content) else: result = read_file(file_name) return result print( op_file('1.txt') ) op_file('1.txt','sdfdssgsdgsdg')
5、函数返回值
如果一个函数没有写返回值的话,返回的就是None
如果函数有多个返回值,那么返回的是一个元组
def test(): print('hello') def test2(): return 1,2,3 #如果一个函数没有写返回值的话,返回的就是None #如果函数有多个返回值,那么返回的是一个元组 a,b,c = test2()
6、练习
(1)
1 def my(): 2 for i in range(100): 3 print(i) 4 if i==2: 5 return 6 print(my()) 7 # 运行结果: 8 # 0 9 # 1 10 # 2 11 # None
(2)写一个校验输入的字符串是否为小数的程序
1 # 0.12 -12.9 2 # (1) 只有一个小数点,判断小数点个数 3 # (2) 正小数的情况下,小数点左边和右边都是整数的话,才合法 4 # (3) 负小数的情况下,小数点右边是整数,左边必须以‘-’开头,且只有一个负号才合法 5 # -5.4 6 # ['-5','4'] 7 # [1:] 8 9 def check_float(s): 10 s = str(s) 11 if s.count('.') == 1: 12 s_list = s.split('.') 13 # 5.3 [5,3] 14 # -98.37 [-98,37] 15 left = s_list[0]# 小数点左边‘-98’ 16 right = s_list[1]# 小数点右边 17 if left.isdigit() and right.isdigit():# 这里是正小数的 18 return True 19 elif left.startswith('-') and left.count('-') == 1 and right.isdigit(): 20 return True 21 return False 22 print(check_float(1.8)) 23 print(check_float(-1.8)) 24 print(check_float('1.8')) 25 print(check_float('-1.8s'))
(3)
1 def myfile(name,content = None): 2 with open(name,'a+') as f: 3 f.seek(0) 4 if content:# 如果有content参数,则进行写 5 f.write(content) 6 else:# 如果没有content参数,则进行读 7 return f.read() 8 myfile('hh','dhjksdefe')# 会将dhjksdefe写入文件 9 a = myfile('hh')# 实参 hh指的是一个文件名 10 print(a)# 会读取文件内容,并输出显示
(4)
1 # import json 2 # 3 # def json_file(name,d=None): 4 # pass 5 # 6 # print(json_file('tt')) 7 # 运行结果:None 8 9 def say(): 10 pass 11 print(say()) 12 # 运行结果:None
(5)将校验密码的代码写成函数,如下
def check_password(password):#校验密码是否合格,必传参数,位置参数 password_set = set(password) if password_set & set(string.digits) and password_set & set(string.ascii_lowercase) \ and password_set & set(string.ascii_uppercase): print('合法') return True else: print('不合法') return False
(6)把文件操作,用函数实现
# with open('f','w',encoding='utf-8') as fw: # fw.write(xxx) def write_file(file_name,content): with open(file_name,'w',encoding='utf-8') as fw: fw.write(content) def read_file(file_name): with open(file_name,encoding='utf-8') as fr: result = fr.read() return result # write_file(content='1234',file_name='a.txt') # write_file('a.txt',content='absdfs') # write_file('a.txt','12235236')