-
按照过程编写代码,一般功能都是一次性的,非常不好维护,把功能封装集成,方便二次开发和维护
-
语法定义:在Python中,定义一个函数要使用
def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。def func_name(arg):#函数名,参数 statement #要执行的代码 return value #返回结果,不写返回值默认返回None
-
函数参数:
-
形参:就是个变量名
-
实参:变量名引用实际传进去的值
def func(a):#形参 pass return a a = 3 #实参
-
-
参数探究:
-
必备参数:在形参确定的情况下,实参按照参数顺序传参。
def func(a,b): print(a+b) a = 5 b = 3 func(a) 8
-
默认参数:也叫缺省参数,在函数定义时,指明一个形参的默认值,就可以不给这个具有默认值的形参传递实参了。当你给一个具有默认参数的形参传递一个实参,那么会覆盖掉原有的默认值。缺省参数的定义顺序一定是从右向左,从后向前。
缺省参数的定义顺序一定是从右向左,从后向前
-
命名参数:参数太多的情况下,记不住顺序就会用到命名传参。
-
-
-
不定长参数:不定长传参可接受空值
-
元组不定长:*args表示元组形式传参
def func(*args): print(args) print(*args) func('d',[1,2],{'k':5}) ('d', [1, 2], {'k': 5}) d [1, 2] {'k': 5}
-
字典不定长:**kwargs字典传参
def func(**kwargs): print(kwargs) #不定长传参(命名传参)成字典 #print(**kwargs) 直接报错 不让你用 func(a={'name':'小明','sex':'man'},b=2,c=3) {'a': {'name': '小明', 'sex': 'man'}, 'b': 2, 'c': 3}
-
联合使用:
def func(*args,**kwargs): print(args,kwargs) args = [1,2] kwargs={'f':3} func(*args,**kwargs) (1, 2) {'f': 3}
-
-
参数解构:参数解构发生在函数调用时,可变参数发生函数定义的时候。参数解构分为两种形式,一种是必备参数解构,另一种是不定长参数解构。
-
必备参数解构:*号会自动把对应索引位置上的实参传进来
def func(a,b,c): print(a,b,c) lst = [1,2,3] func(*lst) 1 2 3
-
不定长参数解构:**把key对应value值传进来,key必须和形参相同
def func(a,b,c): print(a,b,c) lst = {'a':2,'b':3,'c':6} func(**lst) 2 3 6
-
-
函数作用域
-
局部变量:生存在函数运行期间,函数运行完就死了
def func(): a = 1 #局部变量 pass
-
想要局部变量存活下来,一个办法把它赋给返回值,另一种是使用global声明局部变量变为全局变量。
def func(): global a a = 1 pass print(a) 1
-
-
全局变量:存活在整个程序
-
不可变数据局部变量改变不会影响到全局变量
a = 'd'#全局变量 def func(): a = 'l' print('内',a) func() print('外',a) 内 l 外 d
-
可变数据局部变量改变会影响到全局变量,也可以说可变数据就是全局的。
a = [1,2] def func(): a[0] = 'l' print(a) func() print(a) ['l', 2] ['l', 2]
-
局部变量与全局变量只是变量名的地址不同,值地址相同
a = 1 def function(): a = 1 print(id(a)) function() print(id(a)) 1800823008 1800823008