1.函数的概念
- 概念
写了一段代码实现了某个小功能;然后把这些代码集中到一块,起一个名字,下一次就可以根据这个名字再次使用这个代码,这就是函数。 - 作用
方便代码的重复使用。
分解任务,简化程序逻辑
使代码更加模块化 - 函数分类
内建函数
三方函数
自定义函数
2.函数的基本使用
- 简单定义
def 函数名():
函数体 - 函数调用
函数名()
#函数的定义
def test():
print(2**2)
print(2**3)
print(2**4)
#函数的调用
test()#输出4 8 16
3.函数的参数
3.1 单个参数
- 场景
需要动态的调整函数体中某一个处理信息时,则可以以参数的形式接收到相关数据。 - 定义
def 函数名(参数名称):
函数体:函数体中,可以直接以变量的方式使用该参数 - 函数的调用
函数名(参数值) - 形参和实参的概念
上述函数定义中,参数名称 即为形参 ,在调用函数的时候,传递的真实数据,即为实参。
#单个参数的函数的定义
def test(num):
print(num**2)
#函数的调用
test(3)#输出 9
test(4)#输出 16
3.2 多个参数
- 场景
需要动态的调整函数体中多个处理信息使,则可以用逗号做分割,接收多个参数。 - 定义
def 函数名(参数名称1,参数名称2,........):
函数体:函数体中,可以直接以变量的方式使用该参数 - 函数的调用
函数名(参数1,参数2,.....)
函数名(参数名称1=参数1,参数名称2=参数2,....) 可以指明形参名称,称为 “关键字参数” 。不需要严格按照顺序
#多个参数的函数的定义
def test(num1,num2):
print(num1+num2)
#函数的调用
test(3,4)#输出 7
test(8,16)#输出 24
test(num2 = 18,num1 = 54)#输出 72
3.3 不定长参数
- 场景
如果函数体中,需要处理的数据,不确定长度,则可以使用不定长参数的方式接收数据。 - 定义
- 方式一
def 函数名(*args):
*args:接收的参数组成一个元组
函数体:函数体中,可以直接以元组变量的方式使用该参数
函数使用:函数名(参数1,参数2,参数3,.....) - 方式二
def 函数名(**args):
args:**接收的参数组成一个字典
函数体:函数体中,可以直接以元组变量的方式使用该参数
函数使用:函数名(参数名称1=参数1,参数名称2 = 参数2,参数名称3 = 参数3,.....)
- 方式一
- 参数拆包
装包:把传递的参数,包装成一个集合,称之为“装包”
拆包:把集合参数,再次分解成单独的个体,称之为“拆包”
#不定长参数的函数的定义 *args 元组
def mySum(*t):
print(t,type(t))
result = 0
for v in t:
result += v
print(result)
#函数的调用
mySum(3,4,5,6,7)#输出 (3, 4, 5, 6, 7) <class 'tuple'> 25
mySum(3,8,5,12,7)#输出 (3, 8, 5, 12, 7) <class 'tuple'> 35
#不定长参数的函数的定义 **args 字典
def mySum(**kwargs):
print(kwargs,type(kwargs))
#函数的调用
mySum(name ="sz",age = 12)#输出 {'name': 'sz', 'age': 12} <class 'dict'>
#参数的拆包和装包 *args
def mySum(a,b,c,d):
print(a+b+c+d)
def test(*args):
print(args)
#拆包操作
mySum(args)#报错,b,c,d三个没有赋值成功
mySum(args[0],args[1],args[2],args[3])#这样太繁琐
mySum(*args)#这样直接把已经装包的参数,再次拆包后赋值。
test(1,2,3,4)#输出 (1, 2, 3, 4) 10 10
#参数的拆包和装包 **args
def mySum(a,b):
print(a)
print(b)
def test(**args):
print(args)
#拆包操作
mySum(**args)
test(a=1,b=2)#输出 {'a': 1, 'b': 2} 1,2
test(a=1,c=2)#输出 报错 因为字典拆包是拆成 a=1,c=2 这样mySum函数中的参数没有c
3.4 缺省参数
- 场景
当我们使用一个函数的时候,如果大多数情况下,使用的某个数据是一个固定值,则可以使用默认值,这种参数,称为“缺省参数” - 定义
def 函数名(变量名1=默认值,变量名2=默认值,........):
函数体:函数体中,即使外界没有传递指定变量,也可以使用,只不过值是给定的默认值 - 函数的调用
函数名(变量1,变量2,.....) 此次如果是缺省参数,则可以不填写
#缺省参数,当没有参数时,会使用默认值
def hit(somebody = "豆豆"):
print("我想打",somebody)
hit("zhangsan")#输出我想打 zhangsan
hit()#输出我想打 豆豆
3.5 参数注意
- 值传递和引用传递
值传递:是指传递过来的,是一个数据的副本,修改副本,对原件没有任何影响
引用传递:是指传递过来的,是一个变量的地址,通过地址,可以操作用一份原件。 - 在python当中,只有引用传递(地址传递),但是如果数据类型是可变的数据类型,则可以改变原件,如果数据类型是不可变类型,则不可以改变原件。
def change(num):
print(id(num))#140706432668744
b = 10
print(id(b))#140706432668744
change(b)
#此时b和num同时指向一个地址值,c c++ java三个语言是对于num创建一个新地址存放10
def change(num):
print(id(num))#140706434962504
num = 666
print(id(num))#2095039032144
b = 10
print(id(b))#140706434962504
change(b)
#此时因为num发生了改变,所以创建了一个新地址来存放num的改变,b没有发生改变
4.函数的返回值
-
- 场景
当我们通过某个函数,处理好数据之后,想要拿到处理的结果 - 语法
def 函数名(参数等):
函数体
return 数据 - 注意事项
- 场景
- return后续代码不会被执行
- 只能返回一次
- 如果想要返回多个数据,可先把多个数据包装成一个集合,整体返回。如列表,元组,字典等等。
最后,如果你对Python感兴趣,想要学习python,希望可以帮到你,一起加油!以上是给大家分享的Python全套学习资料,都是我自己学习时整理的:
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频全套
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
**学习资源已打包,需要的小伙伴可以戳这里:【学习资料】