Python函数全解析
定义
一段可以被重复使用的代码
# 1.求1~100的和
theSum = 0
for i in range (1,101):
theSum += i
print(theSum)
# 2.求300~400的和
theSum = 0
for i in range (300,401):
theSum += i
print(theSum)
# 3.求1~1000的和
theSum = 0
for i in range (1,1001):
theSum += i
print(theSum)
这段代码虽然可以被运行出来,但是每一段都是重复利用的,形式相同。
像上述情况,我们就可以通过函数的形式,来复用代码,达到重复利用的效果。

如图所示,两种代码的运行结果相同
语法格式
函数的定义
可以理解为分配任务
- def 函数名(形参列表):
- 函数体(注意缩进)
- return 返回值(可有可无)
如果只是定义而不去调用,函数体里面的代码就不会去执行
函数的调用
可以理解为开始执行任务
- 函数名(实参列表)
注意:实参个数要与形参个数匹配
- 返回值=函数名(实参列表)
顺序
Python中函数要先定义,再调用
函数的参数
函数参数的个数一定要匹配,类型无要求
def test(a):
print(a)
test(10)
test('hello')
test(True)
在这一段代码中,实参的类型都不同,仍然可以运行,说明函数的参数输入无类型要求
我们用一段代码来直观感受一下它的好处:
def add(x,y):
return x+y
print(add(1,2))
print(add(3.5,4.5))
print(add('hello','world'))
至少保证传入的参数在函数体中能够正常运行
函数的返回值
def calcSum(beg,end):
theSum = 0
for i in range(beg,end+1):
theSum += i
return theSum
result = calcSum(1, 100)
print(result)
这个版本不同于之前,它只做了计算,不关心如何和用户交互(让逻辑与交互分离)
当函数执行到return语句时就不再继续往下执行了,而是回到了调用位置
# 判断是否是奇数
def isOdd(num):
if num % 2 == 0:
return False
else:
return True
print(isOdd(10))
print(isOdd(5))
Python中的一个函数可以返回多个值!(可以用逗号分隔开)
def getPoint():
x = 10
y = 20
return x,y
a,b = getPoint()
变量的作用域
函数外的变量和函数内的变量是不相同的
名字一样并不代表两者相同,我们用一段代码来举例
x = 10
def test():
x = 20
print(f'函数内部的x是{x}')
test()
print(f'函数外部的x是{x}')
代码中x=10属于全局变量,在整个程序中都有效
代码中x=20属于局部变量,只是在函数内部有效
在函数中尝试访问某个变量的时候,会先尝试在局部变量中查找,如果找到,就直接访问;如果没有找到,就会往上一级作用域中进行查找。
想要在函数中修改全局变量的值,可以通过使用global关键字进行声明
x = 10
def test():
global x
x = 20
test()
print(x)
python中只有函数和类会影响变量的访问
函数的执行过程
先不会执行函数的定义,执行到函数的调用时会跳转到函数的内部进行执行;函数内部执行完之后,回到之前调用的位置,继续往下执行。
函数的链式调用
def isOdd(num):
if num % 2==0:
return False
return True
def add(a,b):
return a+b
print(isOdd(add(5,5)))
结果为False,链式调用中,限制性()里面的函数,再执行外面的函数
函数的嵌套调用
一个函数的函数体内部还可以调用其他函数
函数的递归
函数自己调用自己
def factor(num):
result = 1
for i in range(1,num+1):
result *= i
return result
print(factor(5))
def factor(n):
if n == 1:
return 1
return n * factor(n-1)
print(factor(5))
虽然这两个函数的名字和变量名相同,但这是两个不同的变量
参数默认值
def add(x,y,debug=False):
if debug:
print(f'x={x},y={y}')
return x+y
result_1 = add(10,30,True)
print(result_1)
result_2 = add(10,30,False)
print(result_2)

关键字参数
按照形参的名字进行传参
def test(x,y):
print(f'x={x}')
print(f'y={y}')
test (x=10,y=20)
test(y=100,x=200)
更多推荐

所有评论(0)