函数的定义
函数是对程序逻辑化进行构架或者过程化的议程编程方法。可复用性强,可以调高代码的重复利用率
定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用其函数名
特性
- 减少重复代码
- 使程序变得可扩展
- 使程序变得可维护
语法:
def func(): # 定义函数名
''' 注释 '''
print("hello,word")
founc() # 调用函数
为什么要使用函数?
def write_msg():
with open("写文件.txt",'a+') as f:
f.write('函数测试
')
def fount1():
print('fount1')
write_msg()
def fount2():
print("fount2")
write_msg()
def fount3():
print('fount3')
write_msg()
fount1()
fount2()
fount3()
从上述中看出,只需要修改write_msg就可以被一直调用。避免重复写
函数可以带参数:
# 下面这段代码
a,b=5,8
c = a ** b
print(c)
#改成函数
def founc(x,y):
c = a**b
print(c)
return founc
c = founc(5,8)
print(c)
函数的参数
参数可以让你的函数更灵活,不止能做死动作,还可以根据调用时传参数的不同来决定函数内部的执行流程
-
形参变量
只能在被调用时才分配内存单元,在调用结束时,即刻释放分配的内存,因此,形参只在函数内部有效。
函数调用结束返回的主调用函数后则不能再使用该形参变量 -
实参
可以是常量,变量,表达式,函数等,无论实参是何种类型的量,在调用时,他们必须有确定的值,以便把这些值传给形参。
因此预先赋值,输入等办法使参数活的确定值
def founc(x,y): # 形参
mult = x*y
return mult
c = founc(a,b) #实参
print(c)
默认参数
将变化很小的值设置成默认参数,可以提高效率(比如,统计全国人口登记,国籍,都是中国,就可以设置成默认参数)
默认参数,要写在位置参数后面。
def info(name, age, sex, country='CN'): # 默认参数
''' print students info'''
print("The Students info:")
print(name, sex, age, country) # 函数体
info("zk", 22, 'male') # 默认参数可以不写
info('stain', 24, 'male', 'English') # 如果不是默认参数,可以自己更改
info('tanhui', 21, 'feale', 'CN')
输出信息为:
The Students info:
zk male 22 CN
The Students info:
stain male 24 English
The Students info:
tanhui feale 21 CN
关键参数
传参数的时候,不想按照顺序,就可以用关键参数,只需指定参数名就行(指定参数名的参数就叫关键参数)。
关键参数要在位置参数之后
def stu_info(name,age,hobby='playgames',country='cn'):
print('info of students')
print('姓名',name)
print("年龄:",age)
print("国籍:",country)
print("爱好:",hobby)
stu_info("zk",hobby='watch TV',age=22,country='CN')
stu_info('zk',hobby='games',22,country='cn') # 不能这样写,位置参数要在前面
stu_info('zk',22,hobby='games',age=21,country='cn') # 参数重复
非固定参数-动态参数
- *args 元组形式
当你的函数在定义时不确定传多少参数,就要用动态参数
*若果参数中出现 args,传递的参数就不再是固定的数,传进来的所有参数变成一个元组
def send_msg(msg,*args): # *args 会把参入的参数变成一个元组 一般都要写在最后,如果不在最后,后面的参数都要写关键参数
'''给多个用户发送信息'''
for i in args:
print('seed msg to->',i)
# 方式一
send_msg('你中奖了','zk','th','mm')
# 方式二
send_msg('你中奖了',*['xiaos','hc','mjh']) # 直接在列表前加* 可以把列表的元素都传进去,不加会把列表当一个元素传进去。
输出
seed msg to-> zk
seed msg to-> th
seed msg to-> mm
- **kwargs 字典形式
def func(name, *args, **kwargs):
''' *args传入是元组, **kwargs是字典'''
print(name, args, kwargs)
func('zk', 22, 'vfx', 'efx', addr='anhui', num=1983232)
# 输出 zk (22, 'vfx', 'efx') {'addr': 'anhui', 'num': 1983232}
# 如果直接传字典,需要前面加 **
dic = {"stu":'hhc','stu2':'ccz'}
func('th',**dic) # 输出 th () {'stu': 'hhc', 'stu2': 'ccz'}
函数返回值
函数外部的代码想要获取函数的执行结果,就可以在函数里用 return语句把结果返回
def stu_register(name,age,job):
print(name,age,job)
if age > 22:
return False
else:
return True
status = stu_register('zk',23,'vfx')
print(status)
- return 代表一个函数的结束,如果未在函数中指定return,那么这个函数的返回值为None
- 返回值可以是任意的数据类型,如果return 返回2个值,返回是元组,如果加[],返回是列表
- 函数可以有返回值,必须有变量接收,也可以没有返回值,不写,默认返回None
- return 返回一个值(变量)
- return 返回多个值,多个值用逗号分开,以元组形式返回。
def num():
a = 100
b = ['a','b','c']
c = {'a':'b','c':'d'}
# return a # 返回一个值
# return a,b,c # 返回一个元组
return [a, b, c] # 返回一个列表
print(num())