函数
一、函数的概念:此函数非彼函数,python中的函数是组织好的、可重复利用的、用来实现单一功能或者相关联功能的代码块
二、函数的作用:函数能够提高代码的重复利用率(降低代码的冗余)
案例:计算1 — N的和
total = 0
for i in range(1, 101): # 计算1 —— 100的和
total = total + i
print(total)
total_1 = 0
for i in range(1, 1001): # 计算1 —— 1000的和
total_1 = total_1 + i
print(total_1)
运行结果:5050
500500
使用函数的方法解决案例:
def numTotal(N):
total = 0
for i in range(1, N + 1):
total = total + i
return total
print(numTotal(100)) # 计算1 —— 100的和
print(numTotal(1000)) # 计算1 —— 1000的和
运行结果:5050
500500
三、自定义函数(需要遵循以下规则)
1. 创建一个函数,要以def关键字开头,后接函数名称、圆括号()、参数(非必写项)、冒号
2. 函数内部的代码的第一行语句可以选择性的使用多行注释对函数的功能进行说明(非必写项)
3. 函数内部使用return将函数内产生的结果返回到函数外部。
4. 如果不使用return、函数的结果为None
5. 注意代码缩进
总结:函数内部和函数外部是两个互相独立的个体,如果想要使两者连通,必须使用return将函数内部的结果返回到函数外部,返回出来的结果就是这个函数产生的结果,只要函数内部触发了return,那么这个函数立即停止运行。
四、函数的调用
已经定义好的函数,并不会自动执行、需要单独调用这个已经存在的函数。
调用语法:函数名(实参)—— 实参和形参要相对应,形参不写,实参也不写。
五、形参的定义;实参的传递
①默认值参数
函数定义时,给设置的形参提前赋值,在定义函数时,将形参写为参数名 = 数据的形式。此时,这个形参便有了默认值,如果调用函数时没有给此形参赋值,那么这个形参便使用默认值;如果调用函数时给这个形参赋了值,那么这个形参便使用新的值
def numTotal(N = 100):
total = 0
for i in range(1, N + 1):
total = total + 1
return total
print(numTotal())
print(numTotal(10))
运行结果:5050
55
②参数位置
在定义函数时,函数中参数要以什么样的顺序去定义,那么调用函数时就必须以什么样的顺序去传入实参。即:实参和形参位置要一一对应
def numTotal_1(start, end):
# 计算start到end的和
for i in range(start, end + 1):
total = total + i
return total
print(numTotal_1(1, 100))
print(numTotal_1(100, 1))
运行结果:5050
0
③关键字参数
如果使用位置参数进行传参,实参和形参的位置要一一对应,那么如果不想按照顺序传参就要使用关键字参数
print(numTotal_1(start=1, end=100))
print(numTotal_1(end=100, start=1))
运行结果:5050
5050
问:能不能位置参数、关键字参数同时使用
print(numTotal_1(1, end=100))
1. 位置参数必须写在关键字参数之前
2. 位置参数必须按照顺序写
3.关键字参数顺序随便写
④不定长参数
*args —— positional argument
**kwargs —— keyword argument
首先解释星号 * 的作用:一个星号 * 的作用是将tuple(元组)和list(列表)中的元素进行unpack,分开传入,作为多个参数;两个星号 ** 的作用是把dict(字典)类型的数据作为参数传入
kwargs是keyword argument的缩写,args就是argument。在Python中有两种参数,一种叫位置参数(positional argument),一种叫关键词参数(keyword argument),关键词参数只需要用 keyword = somekey 的方法即可传参,而位置参数只能由参数位置决定。这也就决定了位置参数一定要在前面,否则关键词参数数量的变化(比如有些kwargs有默认值因此没有传参或者在后面传参的),都会使得位置无法判断。因此常见的也是*args 在 **kwargs 前面。
def argument(a, b, c, *args, **kwargs):
print(a, b, c)
print(args)
print(kwargs)
argument(1, 100, 200, 300, d=100, e=200, f=300)
运行结果:1 100 200
(300,)
{'d': 100, 'e': 200, 'f': 300}
六、函数的类型说明
函数在定义时,形参可以添加数据类型说明
1. 在定义函数时,可以使用 “冒号数据类型” 的形式对形参进行说明
2. 在定义函数时,还可以通过给形参定义初始值(默认值)的形式对此形参接收的值的类型进行说明
3. 还可以告诉其他人对函数的返回结果,使用 -> 数据类型说明
def func_1(num: int, string: str) -> str:
"""
这个函数是什么功能的函数
"""
func_1()