1.函数简介
- 函数也是⼀个对象
- 函数⽤来保存⼀些可执⾏的代码,并且可以在需要时,对这些语句进⾏多次调⽤
- 函数的特点:
- 函数中可以用来保存一些可执行的代码,在你需要的时候可以对这些代码进行多次的调用
- 函数中保存的代码不会立即执行,需要调用函数的时候代码才会执行
- 语法
- def 函数名([形参1,形参2,形参3…]):
- 代码块
注意:
函数名必须符合标识符的规范(可以包含字⺟、数字、下划线但是不能以数字开头),类似变量的取名
print是函数对象 print()是调⽤函数 - 函数的创建
- 函数的调用
- 函数的参数
- 函数的返回值
def fun(): # 自定义函数 fun是函数名,又可以称呼为函数对象
pass #下面没有代码可以用pass进行补充完整
fun() #函数的调用
2.函数的参数
2.1形参和实参
- 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值
- 实参(实际参数)指定了形参,那么在调⽤函数时必须传递实参,实参将会赋值给对应的形参,简单来说有⼏个形参就要有⼏个实参
def fun(a, b): # 函数的参数就是相当于在函数内部定义了这两个变量,
# 但是并没有给他们赋值 ab就是一个形参(形式上的参数)
print(a + b)
fun(1, 2) # 调用函数 ,如果有形参,那么必须传递实参(实际的参数),需要与形参对应
- 实参的类型
def fun(a): # 讲实参传递给形参,实际上就是在做一个赋值的操作, a = b
a = b
a[0] = False
print(a)
# b = 123 #不可变类型: 数据不变,id也不变,但是数据变了,id就一定变化
b = [True, 2, 3] #可变类型:变得是数据,但是id不会变
fun(b)
print(b) #打印出来是[False,2,3]
print(id(b)) #id和a的id一样
2.2 函数的传递⽅式
- 定义形参时,可以为形参指定默认值。指定了默认值以后,如果⽤户传递了参数则默认值不会⽣效。如果⽤户没有传递,则默认值就会⽣效
- 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
def fun(a, b, c=20): # c=20 这个就是给c设置了一个默认值, 当设置了默认值之后,可以不传递这个参数的实参,那么这个时候这个参数的值就是这个默认值, 但是你如果传递了这个实参,那么就会覆盖掉这个默认值
print(a)
print(b)
print(c)
fun(1, 2, 3)
- 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,⽽根据参数名进⾏传递
def fun(a, b, c=20):
print(a)
print(b)
print(c)
fun(a=1, c=3, b=2)
- 混合使⽤位置参数和关键字参数的时候必须将位置参数写到关键字参数前⾯去
def fun(b, a, c=20):
print(a)
print(b)
print(c)
fun(2, a=1, c=3)
2.3 不定⻓参数
- 定义函数时,可以在形参前⾯加⼀个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到⼀个元组中
- 带*号的形参只能有⼀个,可以和其他参数配合使⽤
- *形参只能接受位置参数,不能接受关键字参数
- **形参可以接收其他的关键字参数,它会将这些参数统⼀保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
- **形参只有⼀个,并且必须写在所有参数的后⾯
def fun(c, *args, b):
# *args就是不定长参数 当*args和位置传参混合使用的时候,位置参数一定要放到*args的前面
# 当*args和关键字传参一起使用的时候,关键字传参要放到后面去
# 顺序: 位置参数, *args, 关键字参数, **kwargs
print(*args)
print(args)
r = 0
for i in a:
r += i
print(r)
fun(2, 3, 4, 5, b=1)
def fun(c, **kwargs):
# print(**kwargs) #这个不能打印
print(kwargs)
r = 0
for i in a:
r += i
print(r)
fun(2, b=1, d=2, e=3)
def fun1(*args, **kwargs): # 万能函数
pass
2.4 参数的解包
- 传递实参时,也可以在序列类型的参数前添加星号,这样它会⾃动的将序列中元素依次作为参数传递
- 要求序列中的元素的个数必须和形参的个数⼀致
def fun(a, b, c):
print(a)
print(b)
print(c)
t = (1, 2, 3)
t = 'abc'
t = {'a': 1, 'b': 2, 'c': 3}
# fun(t[0], t[1], t[2])
fun(**t)
3. 作业
-
打印名⽚程序:输⼊姓名,电话号码,性别,最后打印出来名⽚
控制姓名⻓度为6-20
电话号码⻓度11
性别只能允许输⼊男或⼥
每⼀样信息不允许为空 -
使⽤函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21…即: 起始
两项均为1,此后的项分别为前两项之和 -
编写⼀段代码,定义⼀个函数求1-100之间所有整数的和,并调⽤该函数打印
出结果