前言
函数是我们所熟知的,在python中函数的定义格式如下:
def 函数名(形式参数):
函数体
函数的封装就是实现代码块的复用,python内置了一些基础的函数,开发者也可以自己定义函数,函数只能先定义,再进行调用。
一、函数调用的步骤
1、程序遇到函数调用的情况时,暂停执行
2、将实际参数值传递给函数参数
3、执行函数体语句
4、返回值并继续向下执行
二、参数的打包和解包
打包
参数的打包指的是多个参数可以同时处理,也叫可变长度参数, 可变长度参数在定义函数时主要有两种形式*parameter和**parameter,前者用来接受任意多个参数并将其放在一个元组当中,后者接收多个关键参数组成键值对并将其放在字典当中。
打包为元组
1
2
3
4
5
|
def demo( * p): print (p) demo( 1 , 2 , 3 , 4 , 5 , 6 ) #结果 ( 1 , 2 , 3 , 4 , 5 , 6 ) |
打包为字典
1
2
3
4
5
|
def demo( * * p): print (p) demo(x = 1 ,y = 2 ,z = 3 ) #结果 { 'x' : 1 , 'y' : 2 , 'z' : 3 } |
#参数的打包就是将形参设为*参数名形式,实参为多个参数,这是后会将多个参数处理为元组或字典的可迭代对象,是把个体打包为整体。
解包
与参数的打包相对应,参数的解包同样也有s和**s两种形式,调用含有多个位置参数的函数时,可以使用列表,元组,集合等可迭代对象作为实参,在实参名前面加一个,Python会自动对其进行解包,并把序列中的值分别传递给多个形参变量。
1
2
3
4
5
6
|
def demo(a,b,c,d): print (a + B * c / d) list1 = [ 1 , 2 , 3 , 4 ] demo( * list1) #结果 2.5 |
如果实参是一个字典,可以使用**参数名的形式对其进行解包操作,会把字典转换成为类似关键参数的形式进行参数传递。对于这种形式的序列解包,要求实参字典中的所有键必须是函数形参的名称,或者与函数中两个型号的可变长度参数相对应。
1
2
3
4
5
6
|
s = { 'a' : 1 , 'b' : 2 , 'c' : 3 } def demo(a,b,c = 4 ) print (a,b,c) demo( * * s) #结果 1 2 3 |
三、变量的作用域
变量的作用域就是变量能够作用的空间
变量按照作用域划分:全局变量,局部变量
全局变量:在函数体外定义的变量为全局变量
全局变量在函数内外都能够使用,但在函数内不能直接修改全局变量, 如果在函数内修改全局变量,必须添加 global 关键字(python不推荐在函数内修改全局变量的值)
局部变量:在函数内定义的变量为局部变量
局部变量是在函数内定义的变量,在函数体外局部变量是无效的
在函数内定义的局部变量和函数外定义的全局变量是两个概念(变量同名)
1
2
3
4
|
a = 1 def sum () a = 3 #这里函数外的a和函数内的a是两个变量 |
四、变量的文档注释和变量名
1、函数doc文档
函数doc文档是用于描述函数功能,是函数内的特殊注释
1
2
3
4
5
|
def sum (a,b): ''' 返回两个数的和 ''' return a + b |
2、函数名的获取
__name__方法
1
2
3
|
>>> print ( print .__name__) print >>> |
3、函数doc文档的获取
__doc__方法
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://blog.csdn.net/zhangjiachen2001/article/details/121482318