python中的函数
像我们常用的print()、input()、range()等函数是python中内置的函数,我们可以直接用,不需要自己去写,python还支持自定义函数,我们可以自己定义一个函数,去实现自己想要的需求,同时又可以反复调用,是不是很棒?接下来介绍一下函数。
函数的创建和调用
- 函数创建
def 函数名(arg1,arg2):
'''函数说明文档'''
函数体
return 返回值
def 是声明函数的关键字
函数说明文档:解释函数,相当于注释
arg1 arg2 传递参数
函数体是来写实现需求的代码
return 结束函数 可以返回一个或多个值
函数即使没有传递参数,括号也要加上
- 调用函数
# 我们首先定义一个函数
def run():
print('调用函数')
# 如果只定义函数 是不会被调用的
# 要 函数名+()调用函数 如果有参数就要传参
# 定义的函数要放在函数调用的上方 不然会报错
run()
函数的参数
函数的参数 就是传递实际参数给函数使用。
形式参数和实际参数
形式参数和实际参数的区别就好比拍戏,拍戏肯定要剧本,而剧本里的角色就是形式参数,角色还没有选定,当有人来演角色的时候,那就是实际参数。
# 定义一个打印0到n-1函数
def run(n):
for i in range(n):
print(i)
# 传入参数
run(10)
默认参数
定义参数时可以给形式参数设置一个默认值,这个默认值就是默认参数,
当调用函数忘记赋值时,函数就会自动去找默认参数,从而使函数不会报错。如下
# 默认值 a=5
def run(a=5):
print(a)
# 没有传入参数
run()
位置参数
位置参数就是按照顺序传入参数,传入的参数和数量要与设置的形式参数一一对应。如下
def run(a, b, c):
print(a, b, c)
run(1, 2, 3)
如果少了参数会报错。
关键字参数
关键字参数是用形式参数的名字来确定输入的值,这样就不需要像位置参数一样一一对应。如下
def run(a, b, c):
print('关键字参数')
print(a, b, c)
# 关键字参数 不需要一一对应
run(b=5, c=3, a=2)
注意 关键字参数和默认参数是有区别的,关键字参数是在调用函数时,给参数赋值时使用,而默认参数是在定义函数时给形式参数设置的默认值,默认调用。我们可以在调用函数的时候传参,这样就会覆盖掉默认值。
不定长参数
不定长参数指可以传入多个实际参数。有两种方式,一种对应位置参数,一种对应关键字参数。如下
def run(*args, **kwargs):
# 使用时参数前面不需要加*
print('位置参数:', args)
print('关键字参数:', kwargs)
run('a', 'b', k=2, s=3)
# 位置参数: ('a', 'b')
# 关键字参数: {'k': 2, 's': 3}
# 通过观察我们可以发现 位置参数返回的是元组,关键字参数返回的是字典
提醒大家:关键字参数后面不能传位置参数,会报错!!!
def run(*args, **kwargs):
# 使用时参数前面不需要加*
print('位置参数:', args)
print('关键字参数:', kwargs)
# 不能这样写!!!
run('a', 'b', k=2, s=3,'d')
函数的返回值
前面我们调用函数,函数执行就结束了,有时候我们需要对函数里的数据进行处理,这时候我们就需要返回值了。
在python中,在函数体内用return返回指定值,返回值可以是任意类型,而且无论return出现在函数内哪个位置,只要执行了,函数就会结束。如下
def run():
print('函数马上结束了')
return None
print('不会执行')
run()
# 函数马上结束了
return可以返回多个值,用逗号隔开,多个值以元组的形式返回。
当函数中没有return语句或者只有 return 时返回空值 即None
def run():
print('函数马上结束了')
return
d = run()
print(d) # None
def run1():
print('函数马上结束了')
d1 = run1()
print(d1) # None
变量的作用域
变量作用域指的是变量生效的范围,在Python中一共有两种作用域。
局部变量
局部变量值在函数内部定义的变量,只在函数内部有效,函数外部不能调用。函数运行时会创建变量,函数结束就销毁了。如下
def run():
a = 5
for i in range(1,a):
print(i)
run()
print(a) # 会报错
全局变量
全局变量与局部变量相比,更加全能,既能在函数内部使用,也能在函数外部使用
。
m = 100
def run():
# m时外部变量 在函数内部能访问
print(m)
run()
global关键字的使用
如果我们要在函数内改变全局变量,那该怎么办?有的小伙伴说这不有手就行,直接上操作
m = 100
def run():
m = 50
print(m)
run()
这样好像可以,其实并没有改变,只是在函数内部暂时的改变,函数外部仍然没有改变。
m = 100
def run():
m = 50
print(m)
run()
print(m)
# 50
# 100
这时候就该我们的global关键字上场了,用法如下
m = 100
a = 100
def run():
# 在函数内部声明m是全局变量 这样外部的m也一同改变
# 多个值用逗号隔开
global m, a
m = 50
a = 30
run()
print(m)
print(a)
# 50
# 30
匿名函数
匿名函数,顾名思义就没有名字的函数,需要一个函数,但是又不想命名,那么匿名函数作用就显示出来了。
语法如下:
name = lambda arg1,arg2...... : 表达式
arg1,agr2...... 形式参数,可以不传,多个参数用逗号隔开
表达式:必填,实现相应的功能
# 正常参数
def com(a, b):
print(a * b)
com(1, 3)
# 匿名参数
result = lambda a, b: a * b
print(result(1, 3))
练习
计算1+2+3+4+…+n的和。
我们可以用函数的进行封装,传入的实际参数就是我们要求的1到n的和。
def run(n):
# 计数
num = 0
for i in range(1, n + 1):
# 累加
num += i
# 返回最后的值
return num
print(run(100))
给定一个列表,输入查询列表中的数据,找到返回数据并停止查询,未找到返回提示。
data = ['天天','小红','小明','小兰','小小']
def run(data_list):
instr = input('请输入查询的名字:')
for k in data_list:
# 找到就结束了
if instr == k:
return k
# 遍历完了 都没找到 就打印 没找到
else:
print('没找到!')
print(run(data))