一、函数基本定义
定义:
函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只要调用其函数名即可。
特性:
1.减少重复代码
2.使程序变的可扩展
3.使程序变得易维护
二、函数的定义
def 函数名(参数1,参数2):
'''函数注释'''
print(‘函数体’)
return 返回值
定义:def 关键字开头,空格之后接函数名和括号,紧接着跟一冒号
def 是固定的定义语法。
def sayhi(): print("hello world!") sayhi() def calc(x,y): res = x**y return res print(calc(4,5))
函数名:函数名是包含字母,数字,下划线的任意组合,但不能以数字开头。取名尽量有意义。
函数调用返回值=函数名(参数1,参数2)#函数名后面加括号。
定义一个求计算字符串长度的函数。假如我们的len()函数现在不能用了,那么我们就需要定义一个函数,求字符串的长度。如果我们一次一次的去写相同的代码,会显得很low,这时候我们的函数就能用上了。
def length(): s = '你好' length = 0 for i in s: length += 1 return length print(length())
三、函数的参数
形参变量
(函数定义时候定义的参数)只有在被调用时才分配内存单元,在调用结束时,即刻释放所有分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
实参
(函数调用时传进来的参数)可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使用参数获得确定值。
默认参数
默认参数一定要跟在位置参数后面。
def stu_info(name,age,course,gender='male'): print("----注册学生信息------") print("姓名:",name) print("年龄:",age) print("性别:",gender) print("课程:",course) stu_info('alex',18,'python') stu_info('alex',18,'python',gender='femal')
关键参数
关键参数必须跟在位置参数后面
def stu_register(name, age, course='PY' ,country='CN'): print("----注册学生信息------") print("姓名:", name) print("age:", age) print("国籍:", country) print("课程:", course) #调用可以这样 stu_register("王山炮",course='PY', age=22,country='JP' ) #也可以这样 stu_register('王山炮',22) #但绝不可以这样 stu_register("王山炮",course='PY',22,country='JP' ) #当然这样也不行,这样相当于给age赋值2次,会报错! stu_register("王山炮",22,age=25,country='JP' )
非固定参数(动态参数)
按位置传值多余的参数全都由args统一接收,保存成一个元组的形式。
按关键字传值接受多个关键字参数,由kwargs接收,保存成一个字典的形式。
'''拿报警发邮件的举例''' def send_alert(msg,*users): #(['alex','peiqi','egon'],)把列表打包成一个元素 --->*['alex','peiqi','egon']---->('alex','peiqi','egon') for u in users: print("报警发给",u) #如果参数中出现形参(*users),传递的参数就可以不再是固定个数,传过来的错有参数打包成元组 #传参方式一: send_alert('服务器down了','alex','peiqi','egon') #传参方式二: send_alert('服务器down了',*['alex','peiqi','egon']) '''求多个数字的和''' def calc(a,b,*args): sum = a+b for i in args: sum += i return sum print(calc(1,2,3,4,5))
'''**kwargs接收的未定义的关键字参数''' def func(name,*args,**kwargs): print(name,args,kwargs) func('alex',22,'tesla',add='山东',num=1234) #*args接收了22,tesla,**kwargs接收了add和num d = {'degree':'primary school'} func('alex',**d) #**kwargs接收了所有的字典 def f(a,b,*args,defult=6,**kwargs): '''位置参数,*args, 默认参数,**kwargs''' # print(a,b,args,defult,kwargs) return a,b,args,defult,kwargs print(f(1,2,34,56,7,8,9,0,name='alex',age='333')) #传参数的时候:必须先按照位置传参数,再按照关键字传参数
四、函数返回值
1,return的作用:结束一个函数的执行。函数在执行过程中只要遇到return语句,就会停止执行并返回结果。也可以理解成return语句代表函数的结束。
2,如果未在函数中指定return,那么这个函数的返回值为None
3,函数只能返回一个值。如果有多个值(用‘,’隔开),返回为一个元组
def func(): a = 111 b = [1, 2, 3] c = {'a': 15, 'b': 6} # return a#返回一个值 return a,b,c#返回多个值,变量之间按逗号隔开,以元组的形式返回 print(func())
定义一个列表,返回列表最后一个元素
#方法一 def func(): list=['hello','egon',11,22] return list[-1] print(func()) #方法二 def func_1(): list=['hello','egon',11,22] return list a,b,c,d = func_1() print(d)
五、小结
1,定义:def 关键字开头,不能改变。
2,参数:括号来接收参数,如传入多个参数,用逗号隔开
参数可以定义多个,也可以不定义
参数有很多种,如涉及到多种参数时可以使用*args和**kwargs 所有的参数都跟在位置参数后面。
3,注释:函数第一行语句应该添加注释
4,函数体:函数内容以冒号起始,并且严格按照缩进。
5,返回值:return [表达式] 结束函数。不带return、只写一个return、只写return None时都返回None
def 函数名(参数1,参数2,*args,默认参数,**kwargs): """注释:函数功能和参数说明""" 函数体 …… return 返回值