定义:在一个完整的项目中,某些功能会被反复的使用,那么将该功能对应的代码封装成函数,
当要再次使用 这个功能的时候直接使用即可
本质:函数是对某个特殊功能的封装
优点:简化代码结构,提高程序的模块性;提高代码的复用性;
提高代码的可维护性【如果需求发生改变,只 需要更改函数内部】
语法:def 函数名(参数1,参数2,,,):
函数体
return 表达式或者常量或者变量
说明:
- 一个完整的函数由两部分组成:函数的声明和函数的实现;
- def:definition定义,函数以def定义的;
- 函数名:标识符,只需要遵循标识符的规则即可,精良做到见名知意;
- (参数1,参数2,,,):()表示参数的开始和结束,其中参数1,参数2....被称为参数列表,本质上其实就是一个变量,参数列表也可以为空
- 函数体:需要被封装的特殊功能
- return:返回,一般用于结束函数,并且将返回值携带给函数的调用者,不带任何数据的return相当于返回None
函数的简单使用:
简单函数:无返回值的函数。如果在同一个py文件中,出现同名的函数,则后出现的覆盖先出现的函数
#定义一个无参无返回值的函数 def myPrint(): print("hello world") #注意:函数定义好之后,不会自动执行,需要手动进行调用 ''' 调用格式:函数名(参数) 说明:出现在函数声明部分的参数被称为形式参数,简称形参,本质是一个变量 出现在函数调用部分的参数被称为实际参数,简称实参,本质是一个数据 注意:进行传参的时候,实参和形参需要保持匹配 如果形参为空,则调用函数的时候,()也不能省略 函数调用的本质:实参给形参赋值的过程 ''' myPrint()
函数的调用:实参给形参赋值的过程,被称为传参。栈的形式,先进后出,后进先出
def show1(): print("aaaa") show2() def show2(): print("bbbb") show3() def show3(): print("cccc") show1()
执行过程:函数入栈顺序:show1()、show2()、show3()
函数出栈顺序:show3()、show2()、show1()
函数的参数传递:
#定义一个有参数的函数 def myFunc(str,age): print(str,age) s1 = "abc" a1 = 10 myFunc(s1,a1) #注意:形参的数据类型取决于:实参的类型,具体的需求 def myFunc1(str,age,hobby): print(str,age,hobby) myFunc1("abc",10,"book")
- 值传递:传递的是不可变的数据类型,比如:number,string,tuple
def fun1(a): a = 10 temp = 20 fun1(temp) print(temp) #a的值发生改变,对temp的值没有影响
- 引用传递:传递的是可变的数据类型,比如:list,dict,set
def fun2(c): c[1] = 100 d = [10,20,30,40] fun2(d) print(d) #d发生改变
说明:变量中存储的地址