一、简介
image在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满足下述条件的程序实体:
- 在运行时创建
- 能赋值给变量或数据结构中的元素
- 能作为参数传给函数
- 能作为函数的返回结果
在 Python 中,所有函数都是一等对象,是面向对象程序设计最基本的单元
二、什么叫函数
1、定义
函数就是把完成特定功能的一段代码封装起来。给该功能起一个名字(函数名)
在一个完整的项目,某些特定的功能如果被返回使用,那么我们就可以把这些代码封装成函数,当我们要去使用的时候直接调用函数即可
2、优点
- 函数能提高应用的模块性,
- 方便管理和维护,便于复用
Python提供了许多内建函数,比如print() input()。但也可以自己创建函数,这被叫做用户自定义函数。
三、函数的使用
3.1、定义函数
1、语法格式
def 函数名( 形参列表… ): #函数体 return [expression]
2、语法结构图
image
3、说明
-
def
是定义函数的关键字。 - 函数名是这个函数的符号(引用),调用这个函数的时候我们需要函数名。
- 函数名后的圆括号是必须的。
- 形参列表表示我们可以定义多个形参,必须放在()中间,接受函数调用时传递过来的参数。形参不是必须的,根据需要决定是否需要定义形参
- 圆括号后面必须有一个分号
:
- 函数体缩进四格,封装功能代码块,
- return [表达式] 结束函数,不是必须的,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
- 当一个文件定义多个函数的时候,函数与代码之间空两行
4、举个栗子
- 定义无参数无返回值的函数
def show(): "函数_文档字符串" print("自定义函数") print("我是函数内的代码2")
- 定义有参函数,无返回值的,形参在函数内部可以作为普通变量使用
def add(a, b): #空四格 print(a + b)
- 定义无参数有返回值的函数
def get_name(): name = '隔壁老王' return name
- 定义有参数有返回值的函数
def add(n1, n2): num = n1 + n2 return num
5、函数命名规则
- 可以由字母,下划线,和数字组成
- 数字不能开头
- 不能与关键字重名
- 函数名一般以动词开头
- 多个单词小写使用下划线拼接:get_name,set_name,is_delete
6、函数返回值
- 无返回值
- 不写retrun
- 仅retrun 不带返回值
- 使用retrun 返回 None类型(返回对象)
- 返回一个对象
- 返回多个对象,其实就是返回一个元组,本质是还是一个对象
3.2、函数调用与引用
1、说明
定义函数的目的是为了让函数做一些事情。但是函数如果仅仅定义不会自己去执行。
时刻记住一句话,函数只有被调用才能被执行!
所以想要函数执行,必须显示的去调用函数。
在使用函数的时候,一定要保证声明在前,调用在后!
2、语法格式
函数名(实参)
3、举个栗子
- 调用无参函数
def show(): print("自定义函数") print("我是函数内的代码2") show()
- 调用有参的函数
def add(a, b): print(a + b) add(1, 2)
- 调用有参的函数并返回数据
def add(n1, n2): num = n1 + n2 return num number = add(1,2) print(number)
- 在函数调用时也可以使用*语法,来分解参数的集合
def func(a,b,c,d): print a,b,c,d func(*(1,2,3,4)) func(1,*(2,3),**{'d':4}) func(1,c=3,*(2,),**{'d':4})
4、注意事项
- 函数的引用
所谓的函数的引用其实就是将一个函数对象赋值给变量,一个函数个可以赋值给多个不同变量 - 栗子1
def func(): print('函数引用') func1 = func func2 = func func3 = func # 实际就是想相当于func() func1() func2() func3()
四、 参数详解
1、说明
除了支持正常的参数外,Python函数还支持数量可变的参数。这些参数有主要有三种类别
完整的语法
def fun(position_arg, keyword_args,defalut_args, *tuple_args, **dict_kw_args): pass
简要说明:
position_arg
位置参数(必须参数)。必须参数必须以对应的关系一个一个传递进入函数,函数调用时传递的实参必须和函数定义时的形参一一对应,不能多也不能少,顺序也得一致
keyword_args
关键字参数。指的是调用的时候可以使用参数名的方式传入,特点是传入的时候可以不需要按着顺序出传入
defalut_args
默认值参数 ,非必传参数 声明了默认值的参数
*tuple_args
可变长度参数,特点,只能接收未命名的参数,把这些参数先封装到一个列表或元组中
**dict_kw_args
可变长度参数,特点是将参数放入字典中
2、 默认参数值
2.1、说明
这允许用户为函数的参数定义一些默认值。这种情况下,可以以更少的参数来调用该函数,而函数调用时未提供的参数,Python会使用默认提供的值作为这些参数值
2.2、举个栗子
- 栗子1
def show_args(arg, agr1,def_arg=1, def_arg2=2): return "arg={}, def_arg={}, def_arg2={}".format(arg, def_arg, def_arg2)
2.3、调用方式(三种)
- 只提供非缺省位置参数值
def show_args(arg, def_arg=1, def_arg2=2): return "arg={}, def_arg={}, def_arg2={}".format(arg, def_arg, def_arg2) show_args("普通参数") #指定参数名称 show_args(arg="普通参数")
- 提供的值覆盖一些默认的参数值,包括非缺省位置参数
def show_args(arg, def_arg=1, def_arg2=2): return "arg={}, def_arg={}, def_arg2={}".format(arg, def_arg, def_arg2) show_args("普通参数", "默认参数1")
- 为所有参数提供值,可以用这些值覆盖默认参数值
def show_args(arg, def_arg=1, def_arg2=2): return "arg={}, def_arg={}, def_arg2={}".format(arg, def_arg, def_arg2) show_args(arg="普通参数", "默认参数1", "默认参数2")
2.4、注意事项
- 必选参数在前,默认参数在后
- 有默认值的参数在调用的时候是非必要的
3、关键字参数(kwarg)
3.1、说明
关键字参数是实参里面的概念,以“kwarg=value”的形式使用关键字参数也可以调用函数。其中kwarg指函数定义中使用的参数名称,在调用函数的时候声明某个参数是属于某个关键字的。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
举个栗子
- 栗子1
def f(name,age): print(name,age) f(name="小明",18)
4、默认值参数
4.1、说明
默认参数是在函数声明的时候,可以给某个参数指定默认值,这样的参数叫做默认值参数。如果在调用函数的时候,默认参数没有接收到对应的实参,那么就会将默认值赋值给这个参数
4.2、举个栗子
- 栗子1
def f(name,age,sex="男"): print(name,age,sex) f(name="小明",18)
5、不定长参数(*args)
5.1、说明
通常情况下, 定义函数的时候, 我们只能定义有限的形参个数, 实参个数通常情况下也要和形参来定义.
如果我们想传递任意多个参数给函数, 只能把这些参数先封装到一个列表或元组中, 然后再传进去. 比较麻烦.
python 提供了可变参数, 可以接受任意多个参数, 然后函数内部会自动的把这些参数封装在一个元组中, 供函数内部使用,注意*args只能接受位置参数
5.2、举个栗子
- 栗子1
def fun(*args): print(args) fun("小明",18,"male")
- 栗子2
def fun(*args): return args fun("小明",18,"male")
5.3、注意事项
- 函数的形参中最多只能定义一个可变参数, 定义多个可变参数会出现语法错误.
- 可变参数一般作为形参中的最后一个参数.
- 如果可变参数不是最后一参数, 则给可变参数后的参数赋值的时候只能使用关键字参数赋值
6、不定长参数( **kwargs)
6.1、说明
但是上面的args只能接收未命名的参数,那假如有类似于关键字参数的不定长参数该怎么办呢?python里面使用(变量名)来接收不定长的命名变量参数。同样,python里面也约定俗成使用kwargs接收不定长命名参数。**kwargs接收了不定长参数之后,将这些参数放到一个字典里面,可以通过key获取到相应的参数值
6.2、举个栗子
- 栗子1
def f(**kwargs): print(kwargs) f(name="小明",age=18,sex="male")
五、综合
1、说明
假如一个函数使用了上面所有种类的参数,那该怎么办?为了不产生歧义,python里面规定了假如有多种参数混合的情况下,遵循如下的顺序使用规则
def fun(必须参数,默认参数,*args,**kwargs): pass
2、举个栗子
- 栗子1
def f(*args,**kwargs): print(args) for i in kwargs: print("%s:%s"%(i,kwargs[i])) f(*[100,200,300],**{"a":'abc',"b":31231})
3、注意事项
函数在执行过程中只要遇到return语句,就会停止执行并返回结果,也可以理解为 return 语句代表着函数的结束 如果未在函数中指定return,那这个函数的返回值为None,return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出
网友评论