定义

一段可以被重复使用的代码

# 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)

更多推荐