函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表): 函数体
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
特性
1、函数必须调用才会执行,调用函数需要写函数名及()
2、函数的返回值,函数需要结果的时候要return
3、函数里面只要遇到return,函数立即结束,后面代码不再执行
4、形参:函数完成其工作所需的一项信息,如 def user(username),username为形参
5、实参:调用函数时传递给函数的信息,我们调用函数时,要将函数使用的信息放在括号内,如 user('linda'),'linda'为实参;
举例
1、关于函数的例子:判断输入数字的是否是小数
S =input("请输入数字:") def is_float(num): num = str(num) if num.count('.') == 1: left,right = num.split('.') if left.isdigit() and right.isdigit(): print("是正小数") elif left.count('-') == 1 and left.startswith('-') and left[1:].isdigit():
#left.count('-1')可以省略不写,因为后面的判断已经可以包含此情况 print("是负小数") else: print("非法小数") else: print("不是小数") is_float(S) #调用函数 is_float(1.5) #是正小数 is_float(-23.2) #是负小数 is_float('-R.5')#非法小数 is_float('-1.3.2')#不是小数 is_float(35)#不是小数
def is_float(num): num =str(num) if num.startswith('-') and num.count('-') == 1:#判断是否以负号开头 num = num.replace('-','')#若是,则将负号替换为空 if num.count('.') == 1 and num[:1]!='.' and num[-1:]!='.':#判断是否包含1个小数点,且开头结尾都不是小数点 num =num.replace('.','')#若是,则将小数点替换为空 if num.isdigit():#判断是否是整数 print('xiaoshu') return True return False print(is_float(1.)) #打印结果为True print(is_float('1.'))#打印结果为False print(str(1.))#打印结果为1.0
2、关于返回值的例子:
#加法的例子
def calc(a,b):
result = a + b
print("result:",result)
return result
calc(1,1) #打印结果为 result:2
print("结果是:",calc(2,2))#打印结果为 result:4 结果是:4
#判断输入的用户名是否在文件内 def write_file(filename,content): with open(filename,'w',encoding='utf-8') as fw: fw.write(content) def read_file(filename): with open(filename,encoding='utf-8') as fr: return fr.read() write_file('smh','user1') print(read_file('smh')) user = input("username:") if user in read_file('smh'): print("exist") else: print("not exist")
#判断是否为小数 #return作用:1、把数据返回;2、结束函数 def is_float(s): s = str(s) if s.count('.') == 1: left,right =s.split('.') #1.74 ['1','74'] if left.isdigit() and right.isdigit(): return True elif left.startswith('-') and left[1:].isdigit() and right.isdigit(): return True return False
3、关于多个返回值的例子
def more(): name = 'xiaohei' age = 18 score =37.5 return name,age,score result = more() print(result)#返回的为元组,('xiaohei', 18, 37.5) print(type(more()))#<class 'tuple'> mingzi,nianling,chengji = more()#函数里定义里几个,就用几个来接收 print(mingzi)#打印结果为:xiaohei print(nianling)#打印结果为18 print(chengji)#打印结果为37.5
4、关于默认值的例子
#函数越短越好,一个函数只实现一个功能,比较直观 def register(name,sex='女'): print("[%s %s]写入数据库"%(name,sex)) register('liela')#打印结果为:[liela 女]写入数据库 register('london','男')#打印结果为:[london 男]写入数据库 def register1(name,sex='女'): s = "[%s %s]写入数据库"%(name,sex) return s print(register1('Anglababy','lady'))#打印结果为:[Anglababy lady]写入数据库
5、关于打开、读取文件的例子
#一个既能读又能写文件的函数 def op_file(file_name,content=None): if content: # 有content,写文件 with open(file_name,'w',encoding='utf-8') as fw: fw.write(content) else: with open(file_name,encoding='utf-8') as fr: return fr.read() result = op_file('users') print(result) op_file('user2.txt','xiaoming')
#操作json import json def op_file_json(file_name,dic=None): if dic: # 有content,写文件 with open(file_name,'w',encoding='utf-8') as fw: json.dump(dic,fw) else: with open(file_name,encoding='utf-8') as fr: return json.load(fr)