提升代码的可读性,减小代码的冗余,方便调用和修改,组织结构清晰
def funcname(): #def 是关键字,后跟函数名(): 子代码 #函数要执行的代码 return #return返回值,没有时默认为none
def funcname(参数1,参数2): #参数个数能够为一个和多个 函数体 return
def func(x,y): res=x+y return res f=func(1,2) print(f)
一)、实际参数:函数
一、按照位置传递给相应的参数
def func(x,y): res=x+y return res f=func(1,2) print(f)
二、按照关键字传值,将再也不受位置的限制
def func(x,y): res = x+y return res func(y=2,x=1)
三、按位置传值和按照关键字传值混用 1)按位置传值必须在关键字传值的前面 2)对于一个形参只能赋值一次
二)、形式参数:code
一、位置参数:必须传值的参数 二、默认参数:定义时赋值的参数就是默认参数,默认参数必须放在位置参数的后面,有默认参数时,能够不传递参数 三、*args:动态参数,一个*时能够随意传递位置参数,打印结果是把参数做为一个元组输出
def f1(*a): print(a, type(a)) f1(123, 456, 789, [1, 2, 43]) 打印结果 (123, 456, 789, [1, 2, 43]) <class 'tuple'>
四、动态参数**,传参时必须key,value的形式传递,最后会生成一个字典的形式
def f2(**a): print(a, type(a)) f2(k1=123, k2=456) 打印结果为 {'k1': 123, 'k2': 456} <class 'dict'>
五、能够同时接受单个参数和key/value参数
def f3(*a, **aa): #会把全部的位置参数做为一个元组,key/value参数做为一个字典 print(a, type(a)) print(aa, type(aa)) f3(11, 22, 33, k1=123, k2=456) 打印结果为 (11, 22, 33) <class 'tuple'> {'k2': 456, 'k1': 123} <class 'dict'>
六、把列表,元组,字典传入函数
def f4(*args): print(args, type(args)) li = [11, 22, 33, 44] f4(li, 123) # 直接列表的名字,会把列表当作一整个元素当作函数生成后的元组的一个元素 f4(*li) # 使用*列表,会把列表内的每一个元素当作函数生成后的元组的每一个元素,相似于循环生成元组,元组列表相似 打印结果为 ([11, 22, 33, 44], 123) <class 'tuple'> (11, 22, 33, 44) <class 'tuple'>
七、把字典传入函数
def f5(**kwargs): print(kwargs, type(kwargs)) dic = {"k1": 123} f5(**dic) # 将字典传入到函数,须要使用双星号(**) 打印结果为 {'k1': 123} <class 'dict'>
八、混合使用
def f6(x, *args, **kwargs): print(x) print(args) print(kwargs) f6(1, 2, 3, 4, 5, k="a", v="z") 打印结果为 1 (2, 3, 4, 5) {'v': 'z', 'k': 'a'}
总结:形式参数的传入顺序: 位置参数-----*args-----**kwargs----默认参数class
函数的返回值是return,函数不加return时默认的返回值是None,return能够返回任意值,也能够多个值,return后不跟参数默认返回的是None
def func(x,y): print(x,y) res=x+y return res f=func(1,2) #函数遵循先定义后调用原则,函数的调用就是func(1,2) 函数名加(),函数的执行结果,须要在调用时赋值给变量,而后print print(f) 执行结果为 1 2 #函数执行时内部代码的执行结果 3 #3即为函数的执行结果,函数的执行结果是返回给函数自己的