python 函数
1. 函数简介
• 函数也是一个对象
• 函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用
• 函数保存的代码不会立即执行,需要调用函数的时候代码才会执行
2. 语法
def 函数名([形参1,形参2,形参3....]):
代码块
2.1 定义函数
def 函数名(): 就是定义函数
def fun():
print('这是我的第一个函数')
注意:
函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)
2.2 调用函数:
函数对象() fun()
fun是函数对象
fun() 是调用函数
fun()
3. 函数的参数
3.3 参数的设置
参数可以在设置形参的时候,直接给他设置一个默认值, 如果实参没有传递参数,那么直接使用默认值,如果实参传递了,那么就是用实参
def fun(a, b, c=20):
print(a)
print(b)
print(c)
fun(1, 2, 3)
3.2 形参与实参
• 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值
• 实参(实际参数)指定了形参,那么在调用函数时必须传递实参,实参将会赋值给对应的形参,简单来说有几个形参就要有几个实参
• 在函数中定义形参,相当于在函数内声明了变量
eg:定义一个函数求任意2个数的和
def fun(a,b):
print(a+b) # a, b 是形参 就是形式上的参数 ,你如果定义了形参,那么就必须在调用的时候传递实参
fun(2,3) # 2,3 是实参,也就是实际参数
[运行结果如下:]
>>> 5
3.2 参数的传递方式
• 定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效
3.2.1 位置参数
位置参数就是将对应位置的实参赋值给对应位置的形参
def fun(a, b, c):
print(a)
print(b)
print(c)
fun(1, 2, 3)
3.2.2 关键字参数
关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递
def fun(a, b, c):
print(a)
print(b)
print(c)
fun(2, c=1, b=2)
ps: 混合使用位置参数和关键字参数的时候必须将位置参数写到关键字参数前面去
3.3 参数的传递类型
任意类型的参数都是可以传递的
def fun(a):
print(a)
b = 12
b = '12'
b = None
b = True
b = [1, 2, 3]
b = fun1
fun(b)
4. 不定长参数
4.1 简介
• 定义函数时,可以在形参前面加一个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到一个元组中
• 带*号的形参只能有一个,可以和其他参数配合使用
• *形参只能接受位置参数,不能接受关键字参数
*不定长参数必须放到位置参数后面, 放到关键字参数的前面
# 求任意数的和
def fn(b, *a, c):
r = 0
print(a)
for i in a:
r += i
print(r)
fn(1, 2, 3, 4, c=5)
• **形参可以接收其他的关键字参数,它会将这些参数统一保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
• **形参只有一个,并且必须写在所有参数的后面
**不定长参数必须放到位置参数和关键字参数的后面
def fn1(*y, a, **f):
r = 0
print(f)
fn1(2,1, a=1, b=2, c=3, d=4, e=5)
注意:
不定长参数在一个函数中不管是* 还是 * * 都只能存在一个,而且*必须要在**之前
(*args , **kwargs)接收任意参数
- 参数的解包
• 传递实参时,也可以在序列类型的参数前添加星号,这样它会自动的将序列中元素依次作为参数传递
• 要求序列中的元素的个数必须和形参的个数一致
def fun(a, b, c):
print(a)
print(b)
print(c)
t = (4, 5, 6)
t = {'a': 1, 'b': 2, 'c': 3}
fun(**t)
>>> 1
2
3
5.课后练习
- 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
• 控制姓名长度为6-20
• 电话号码长度11
• 性别只能允许输入男或女
• 每一样信息不允许为空
'''
1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
• 控制姓名长度为6-20
• 电话号码长度11
• 性别只能允许输入男或女
• 每一样信息不允许为空
'''
while True:
name = input('姓名\n(长度为6-20):')
if (len(name) < 6 or len(name) > 20) and len(name)==0:
print('输入长度有误,请重新输入:')
phone = input('电话号码\n(长度为11):')
if len(phone) != 11 and len(phone)==0:
print('输入长度有误,请重新输入:')
sex = input('性别 \n("男"或“女”)')
if sex != ('男' and '女') and len(sex)==0:
print('输入有误,请重新输入:')
else:
break
print('''
***********************\t
\t\t名\t片
姓名:{}\t 性别:{}
手机号码:{}
***********************\t
'''.format(name,sex,phone))
- 使用函数求前20个斐波那契数列:1,1,2,3,5,8,13,21…即: 起始两项均为1,此后的项分别为前两项之和
# 使用函数求前20个斐波那契数列:1,1,2,3,5,8,13,21...即: 起始两项均为1,此后的项分别为前两项之和
def fib(n):
a, b = 0, 1
for i in range(n + 1):
a, b = b, a + b
return a
x= int(input('你需要:\t求到第几项?'))
for i in range(x):
print(fib(i), end=' ')
- 编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果
# 编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果
def qh(n):
m = 0
for i in range(n + 1):
m += i
print(m)
qh(100)