4. 函数


4. 函数

1. 函数的定义和调用

1.定义

def 函数名([参数]):
    函数体
    return [(表达式)]

示例:

# 定义一个函数,比较两个数的大小,返回较小的数
def min_num (a,b):
    if a > b:
        r = b
    else:
        r = a
    return r

2. 调用

函数定义好以后一般通过“函数名(实参)”的方式调用一个函数。比如调用上面的函数

def min_num (a,b):
    if a > b:
        r = b
    else:
        r = a
    return r
s = min_num(5.2)
print(s)

2. 函数返回值

如果没有定义函数的返回值则返回值是None。

def func1(a,b):
    sum = a + b
    return sum
def func2(a,b):
    sum = a + b
    return
s1 = func1(1,2)
s2 = func2(1,2)
print(s1) # 3
print(s2) # None

Python函数也允许有多个返回值,每个返回值之间以逗号隔开,以元组的形式返回。

示例:

def func1(a,b):
    s1 = a + b
    s2 = a - b
    s3 = a * b
    s4 = a / b
    return s1,s2,s3,s4
num = func1(1,2)
print(num)

结果:

(3, -1, 2, 0.5)

3. 函数参数

1. 必须参数

必须参数是指调用函数时传入的参数必须和函数定义时的参数一一对应。如果缺少参数程序会报错。

例如:

def func(a,b):
    print(a+b)
func2(10)

2. 默认参数

默认参数是值可以使用如function(x = 10)的方式给参数设置默认值,如果调用函数时,没有传入该参数的值,则使用默认值。设置参数时,必须参数在前,默认参数在后,否则Python解释器会报错。

示例:

def dunc(a,b=20):
    print(a+b)
func(10)  # 输出 30

3. 关键字参数

关键字参数是指函数调用时把参数的名字和值绑定一起传入,这些参数会在函数内部组装成一个字典。使用关键字参数允许函数调用时的参数顺序不一致,因为Python能够根据参数名自动匹配参数值。关键字参数必须位于必须参数之后。

示例:

def func(name,num):
    print('姓名:%s' % name)
    print('学号:%s' % num)
func(num = '2313415',name = '张三')

该程序定义函数时参数顺序为 name,num,调用函数时,传递的参数顺序为 num,name,但是参数为关键字参数 num = '2313415',name = '张三'。因此尽管参数顺序不一致,程序仍能根据关键字匹配到正确的值。

4. 可变参数

可变参数可以接收任意多个参数。可变参数有两种形式,一种是参数的名字前面家一个 * 号,另一种是加两个 * 号。

以 * 开头的可变参数:

在接收参数时会把参数组成一个元组,因此,在函数体内也一把这个参数作为元组处理。 当以变量作为数组时,调用时需要使用*为其解包,否则函数会将整个元组识别为一个参数。

例如:

def sum (*args):
    s = 0
    for x in args:
        s = s + x
    return s
result = sum(1,2,3,4)
print(result)  # 10

以开头的可变参数:

接收的是关键字参数,Python解释器会把传入的参数组成一个字典,因此,在函数体内,可以把这个参数作为字典处理。

例如:

def score(**kwargs):
    print(kwargs)
    for key in kwargs:
        print('%s的成绩为:%d' % (key,kwargs[key]))
score(张三 = 70, 李四 = 80, 王五 = 90)

5. 函数作为参数

def test_func(compute):
    result = compute(1,2)
    print result 
def compute(x,y):
    return x + y
test_func(compute)   # 结果为3

函数compute作为参数,传入了test_func函数中使用,这是一种计算逻辑的传递而非数据的传递。

4. 变量作用域

1. 局部作用域

定义在语块作用域中的变量是局部变量,他只能在语句块的作用域范围内访问。

2. 全局变量

在函数外定义的变量是全局变量。全局变量可以被所有函数访问,可以在程序中的任意位置访问。

3. global关键字

在 Python 中,global 是一个关键字,主要用于在函数内部修改全局变量的值,或者在函数内部引用全局变量。下面为你详细介绍它的用法和相关要点。

使用 global 关键字修改全局变量

如果要在函数内部修改全局变量的值,就需要使用 global 关键字。

示例代码:

# 全局变量
count = 0

def increment():
    global count
    count = count + 1
    print("函数内部的 count 值:", count)

increment()
print("函数外部的 count 值:", count)

在上述代码中,global count 语句告诉 Python 解释器,在函数内部使用的 count 变量是全局变量,而不是新创建的局部变量。这样,函数内部对 count 的修改会影响到全局变量。

注意事项

  • 避免滥用:过多地使用 global 关键字会使代码的可读性和可维护性变差,因为全局变量的状态可能会在程序的任何地方被修改,导致难以调试。
  • 作用域规则global 关键字只能在函数内部使用,用于声明要使用的全局变量。

5. 递归函数

在函数的内部可以调用其他函数。如果在函数内部调用函数本身,则这个函数称为递归函数。

例如:

# 计算n的阶乘
def func(n):
    if n == 0:
        return 1
    else:
        return n * func(n-1)

6. lambda匿名函数

lambda关键字可以定义匿名函数,匿名函数无名称,只可以临时使用一次。

语法定义:

lambda 传入参数:函数体

传入参数:表示匿名函数的形式参数。

函数体:函数的执行逻辑,只能写遗憾,无法写多行代码。

0 条评论

发表评论

暂无评论,欢迎发表您的观点!