1、函数定义
def 函数名(形参1,形参2):
函数体
return 返回值 #return 不是必须的
2.函数的调用
函数名(实参1,实参2) # 实参与形参个数一样
或者
返回值 = 函数名(实参1,实参2) # 实参与形参个数一样
注意:函数得先定义,后调用
3.实例
- 求和函数
# 定义一个求和函数
def calcSum(begin,end):
theSum = 0
for i in range(begin,end+1):
theSum += i
print(theSum)
# 调用函数
# 求1-100的和
calcSun(1,100)
- 打印
def test():
print('hello')
print('world')
# 两次调用
test()
test()
4.函数参数
- 形参:函数声明时括号里的参数
- 形参的值是不确定的,只是用来占位
- 实参:函数调用时传入的参数
形参与实参个数一致,类型不受限制,但是实参类型需一致
def add(a,b):
return a + b
print(add(2,3))
print(add(2.5,3.2))
print(add('hello','world'))
5.函数的返回值
打印逻辑放在函数外,这种更常用,利于和用户交互
# 定义一个求和函数
def calcSum(begin,end):
theSum = 0
for i in range(begin,end+1):
theSum += i
return theSum
# 调用函数
# 求1-100的和
result = calcSun(1,100)
print(result)
- 多个返回值,一般搭配分支语句/循环语句
def isOdd(num):
if num % 2 == 0:
return False
else:
return True
print(isOdd(10))
- 一次性返回多个值,
def getPoint():
x = 1
y = 2
return x,y
a,b = getPoint() # 多元赋值
_,b = getPoint() #值需要y,不需要x
6.函数的注释
- “”“”"回车写注释
- help(函数名)查看注释
def add(a, b):
"""
这是求和的函数
a:第一个数字
b:第二个数字
return:和
"""
return a + b
print(add(1, 2))
help(add)
6.变量的作用域
- 局部变量只在函数内有效,全局变量在整个程序有效
- 全局变量如果是不可变的,在函数中进行修改时需要添加global关键字
- 全局变量如果是可变的,在函数中进行修改时不需要添加global关键字,如:列表
x = 20 # 全局变量
list1 = [1,2,3,4]
def func():
print(list1) #[1,2,3,4]
def test():
x = 10
list1.append(8)
print(list1) # [1,2,3,4,8]
print(x)
test() # 10
print(x) # 20
- 在函数中也可定义全局变量
def test():
global x = 10 # 当需要修改全局变量时,需申明一下全局变量:global 变量名
test()
print(x) # 10
7.函数的执行过程
调试执行:可随时停下来,观察中间过程
代码单步运行:step into
8.函数链式调用
用一个函数的返回值作为另一个函数的参数
def isOdd(num):
if num % 2 == 0:
return False
return True
def add(x,y):
return x + y
print(isOdd(add(2,3)))
9.函数的嵌套调用
一个函数体的内部还可以调用其它函数
def test1():
print('hello')
def test2():
print('world')
test1()
test2()
10.函数递归
- 一个函数,自己调用自己
- 递归代码两因素:递归结束条件、递推公式
- 递归缺点:执行过程复杂、容易出现”栈溢出“
- 递归代码一般可以转换成等价的循环代码,循环代码一般更有优势
- 递归优点:代码简单
# n!
def factor(n):
if n == 1:
return 1
return n * factor(n - 1)
print(factor(5))
n为局部变量,局部变量在函数的栈帧
11.参数默认值
debug:形参的默认值,带有debug,可以在调用函数的时候不必传参(注意:只能在形参列表的最后)
def add(x,y,debug=False):
if debug:
print(f'x = {x},y = {y}')
return x + y
result = add(10,20) # 不开启调试
result = add(10,20,True) # 为True则开启调试
print(result)
12.关键字参数
- 顺序传参/位置传参
def add(x,y):
return x + y
print(add(2,3))
- 关键字传参
def test(x,y):
print(f'x = {x}')
print(f'y = {y}')
test(x = 10,y = 20)
test(y = 2,x = 1)
注意:位置传参和关键字传参混合使用时,要求位置参数在前,关键字参数在后