[toc]
python基础十一 函数
1.函数的作用
封装代码,大量的减少重复代码,重用性高
2.函数的定义
def 函数名():
函数体
def 是一个关键字,申明要定义一个函数
():是固定写法
函数体中写的是需要用到的重复代码
3.函数的调用
函数名()
4.函数的返回值
#函数返回值总结
函数体中不写return默认返回None,或者写了return不写值返回的也是None
return 能够返回任意数据类型(python中所有对象)
return 能够返回多个数据类型,以元组的形式接收
return 能够终止函数,return下方的代码不执行
return 将返回值返回给调用者
//return示例
def func():
a = 10
return a
a = func()
print(a)
5.函数的参数
5.1位置参数
//函数参数示例
def hehe(app): //形参数
print ("打开:",app) //注意必须用逗号隔开
hehe("微信") //实参
执行结果返回如下:
打开: 微信
//位置参数示例
def ball(web, players, age, addr): #形参
print("登陆NBA官网")
print(f"打开{web}")
print(f"找一位{players},要求年龄:{age},地区:{addr}的人")
print("看看视频")
print("学学球技")
ball("视频专区", "球员", 28, "洛杉矶") #实参 按照位置传参
登陆NBA官网
打开视频专区
找一位球员,要求年龄:28,地区:洛杉矶的人
看看视频
学学球技
5.2 默认参数
//默认参数示例
def ball(web, players, age, addr="洛杉矶"): #addr="洛杉矶"表示默认参数
print("登陆NBA官网")
print(f"打开{web}")
print(f"找一位{players},要求年龄:{age},地区:{addr}的人")
print("看看视频")
print("学学球技")
ball("视频专区", "球员", 28) #实参这里可不写形参中定义的默认值
ball("视频专区","球员",30,"波士顿") #实参写内容会覆盖形参中定义的默认参数
登陆NBA官网
打开视频专区
找一位球员,要求年龄:28,地区:洛杉矶的人
看看视频
学学球技
登陆NBA官网
打开视频专区
找一位球员,要求年龄:30,地区:波士顿的人
看看视频
学学球技
5.3 关键字传参
//关键字传参示例
def fun(a,b,c=1,d=2):
print (a,b,c,d)
fun(1,2,3,4) //结果是1 2 3 4
fun(a="呵呵",b="哈哈") //结果是呵呵 哈哈 1 2
fun(1,2,d="呵呵") //结果是1 2 1 呵呵
5.4 动态参数 *args
5.4.1 动态参数作用
1.能够接受不固定长度的参数
2.位置参数过多时可以使用动态参数
5.4.2 动态参数使用方法
def func(*c): #形参位置上的*是聚合
print(*c) #函数体中的*就是打散
func(1,2,3,4,5,6,7,8,9,0)
结果如下:
1 2 3 4 5 6 7 8 9 0
def func(a,b,*c): # *c就表示动态参数
print (a,b,*c)
func(1,2,3,4,5,6,7,8)
1 2 3 4 5 6 7 8
5.5 动态关键字参数 **kwages
5.5.1 动态关键字参数作用
只接收多余的动态位置参数 注意是只接收
5.5.2 动态关键字参数使用方法
//动态关键字使用方法示例1
def func(a,b,**kwargs):
print (kwargs)
func(a=1,b=2,c=3,d=4,e=5)
结果如下:
{'c': 3, 'd': 4, 'e': 5}
//动态关键字参数使用方法示例2
dic = {"key": 1, "key2": 2}
def func(**kwargs): #聚合
print(kwargs) #打散
func(**dic) #打散 func(key=1,key2=2)
结果如下:
{'key': 1, 'key2': 2}
5.6 函数参数面试题
#万能传参
def func(*args, **kwargs):
print(args, kwargs)
func(12, 2, 121, 12, 321, 3, a=1, b=2)
结果如下
(12, 2, 121, 12, 321, 3) {'a': 1, 'b': 2}
*xargs获取的是一个元组
**kwargs获取的是一个字典
#*args和**kwargs
def func(*args, a1=8,**kwargs): #万能传参
print(args, kwargs) #函数体中的*args是将元组打散,*kwargs是将字典的键获取到
func(12, 2, a1=1, b1=2)
结果如下:
(12, 2) {'b1': 2}
5.7 函数参数总结
#参数的总结:
1.形参
在定 义函数的阶段就是形参
可以单独使用位置参数,也可以单独使用默认参数,也可以混合使用
位置传参:必须一一对应
默认参数:可以不传参,可以传参,传参就是把默认的值给覆盖
混合使用:位置参数,默认参数
2.实参
在调用函数的阶段就是实参
可以单独使用位置参数,也可以单独使用关键字参数,也可以混合使用
位置传参:必须一一对应
关键字参数:指名道姓的方式进行传参
混合使用:位置参数,默认参数
3.参数总结
位置参数,动态位置,默认参数,动态关键字参数
*args 程序员之间约定俗称(可以更换但是不建议更换)
**kwargs 程序员之间约定俗称(可以更换但是不建议更换)
*args 获取的是一个元组
**kwargs 获取的是一个字典
*args 只接受多余的位置参数
**kwargs 只接受多余的关键字参数
4.函数参数优先级
数参数优先级: 位置参数 > 动态位置参数(可变位置参数) > 默认参数 > 动态关键字参数(可变关键字参数)
6.函数的注释
#注释方法1
def a(a,b):
"""
数字加法运算
:param a: int
:param b: int
:return: int
"""
return a + b
print (a(1,2))
#注释方法2
def func(a:int,b:int): #这里的a:int只是做到一个约束,并没有实际作用
"""
加法运算
:param a:
:param b:
:return:
"""
return a + b
print (func(1,2))
//查看函数的注释 func.__doc__
print (func.__doc__)
加法运算
:param a:
:param b:
:return:
//查看函数的名字 a.__name__
代码在编写过程中会设计到函数名赋值,例如
def func(a,b):
return a + b
a = func
print (a(1,2))
print (a.__name__)
func
7.函数的名称空间
7.1函数名称空间分类
1.内置空间 -- 存放pyhton自带一些函数
2.全局空间 -- 当前py文件顶格编写的代码开辟的空间
3.局部空间 -- 函数开辟的空间
程序加载顺序: 内置空间 > 全局空间 > 局部空间
程序取值顺序: 局部空间 > 全局空间 > 内置空间
//代码示例
a = 10 #这里的10是全局变量
def func():
a = 5 #这里的5是局部变量
print (a)
print (func())
5
None
7.2函数的作用域
1.全局作用域: 内置 + 全局 globals() #查看全局作用域
2.局部作用域: 局部 locals() #查看当前作用域(建议查看局部)
//代码示例 查看全局
a = 10
b = 20
print (globals())
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7ffe70016710>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/jetBrains/pycharm/python-works/python基础/test.py', '__cached__': None, 'a': 10, 'b': 20}
//代码示例 查看局部
def func():
a = 10
print (locals())
func()
{'a': 10}
8.函数的第一类对象
8.1总概
1.函数名可以当做值,赋值给一个变量
2.