(四)函数一
程序员文章站
2022-04-20 10:37:41
函数用途:去除重复代码,增加代码的可维护性 定义函数:def 函数名(): 【定义函数时不会执行】 调用函数:函数名() 【调用函数时才执行】 文档说明:第一行用字符串说明 形参:定义函数时的参数 实参:调用函数时的参数 传参的作用:同一个函数可以执行出不同的效果 1 def text(形参1,形参 ......
函数用途:去除重复代码,增加代码的可维护性
定义函数:def 函数名(): 【定义函数时不会执行】
调用函数:函数名() 【调用函数时才执行】
文档说明:第一行用字符串说明
形参:定义函数时的参数 实参:调用函数时的参数
传参的作用:同一个函数可以执行出不同的效果
1 def text(形参1,形参2): 2 """文档说明""" 3 pass 4 5 text(实参1,实参2) 6 help(text) # 产看文档说明
PS:位置与个数必须一一对应
参数的类型:
1、缺省参数(为形参赋值):带有默认值的参数。调用函数时,如果没有为缺省参数赋值,则为默认
缺省参数必须再形参列表最后
1 def printinfo(name, age=35): # age=35 :缺省参数 2 # 打印任何传入的字符串 3 print("name: %s" % name) 4 print("age %d" % age) 5 6 # 调用printinfo函数 7 printinfo(name="miki") # 在函数执行过程中 age去默认值35 8 printinfo(age=9 ,name="miki")
2、位置参数:形参和实参需要一一对应的传递
3、关键字参数(命名参数):指定要传递的形参名字(可以无序,在实参里使用)
4、不定长参数:用一个星号,由元组来接收 (*args);用两个星号,,由字典来接收(**kwargs)
如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面, 但如果有**kwargs的话,**kwargs必须是最后的
1 def functionname([formal_args,] *args, **kwargs): # 不定长参数 2 """函数_文档字符串""" 3 function_suite 4 return [expression]
注意:
加了星号(*)的变量args会存放所有未命名的变量参数,args为元组
而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.
返回值的作用:调用者需要使用函数结果(知道其结果)
返回值:
1、return:会立即终止函数,回到函数调用的地方,多个return只执行第一个
2、None:没有数据,函数没有返回值
3、不同的分支上允许存在多个return返回。
ps: 函数里return什么都不写,专门用于终止函数
return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据 那么默认是元组
函数类型分四种:
-
无参数,无返回值
-
无参数,有返回值
-
有参数,无返回值
-
有参数,有返回值
函数的嵌套:
一个函数里面又调用了另外一个函数
def testB( ): print('---- testB start----') print('这里是testB函数执行的代码...(省略)...') print('---- testB end----') def testA( ): print('---- testA start----') testB( ) print('---- testA end----') testA( ) # 执行
{如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次 函数A执行的位置}
局部变量:
定义:在函数内部定义的变量,其作用范围仅限这个函数内部,只能在函数内使用,函数外部是不能使用的
全局变量:
定义:在函数外定义的变量,能够在所有的函数中进行访问
{在函数里为全局变量,实际上创建了一个行的局部变量}
global:在函数里声明,修改全局变量
# 在一个函数里,全局变量与全局变量不能同名
打包、拆包:
打包:把多个值放在一个数据里
拆包:把一个拆分成多个值
除了对元组拆包之外,还可以对列表、字典等拆包
拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会异常
>>a, b = (11, 22) >> a = 11, b = 22
交换两个变量的值:a,b = b,a
附:1、传递实参时,在列表或元组前写一个星号,可以讲列表或元组拆分成单独的位置参数传递
2、传递实参时,在字典前写两个星号,则会讲字典拆分成单独的关键字参数传递