一.函数的定义
- 在某些编程语言中,函数声明和函数定义是区分开的(例如c语言)。在这些编程语言中函数声明和函数定义可以出现在不同的文件中。
- 但是在Python中,函数声明和函数定义是视为一体的。
- 函数定义的基本形式如下:
def 函数名(函数参数):
函数体
return 表达式或者值
- 采用def进行函数定义,不用制定返回值的类型。
- 函数参数可以是0、1或者多个。并且,参数也不用指定类型。(Python中变量都是弱类型的,会根据值维护变量类型)
- 函数的返回值通过return语句获得。return可以出现在函数体的任何位置。如果没有return语句,会自动返回None。如果有return语句,但是后面没接任何表达式或值,也会返回None。
定义示例:
def add(a, b):
return a + b # 实现两个数相加
二.函数的使用
- Python中,函数不允许向前引用。就是说在函数定义之前,不允许调用该函数。
例:编写一个函数实现最大公约数算法,通过函数调用代码实现求最大公约数。
def hcf(m, n):
if m < n:
m, n = n, m
r = m % n
while r != 0:
m = n
n = r
r = m % n
return n
m = int(input("输入第一个数:"))
n = int(input("输入第二个数:"))
print("二者的最大公约数为", hcf(m, n))
- 在Python中一切皆是“对象”
def test(order='One'):
return "Test" + order
print(test()) # 输出TestOne
answer = test # 没有使用小括号,因为不是在调用test函数,而是将test放在answer变量里面
print(answer()) # 输出TestOne
del test # 删除test函数
print(answer()) # 仍然输出TestOne
- 可以在函数中定义函数
def hi(name='Holy'):
print('The function is hi()')
def greet():
return 'The function is greet()'
print(greet())
hi()
这里要注意的是,greet()函数在hi()函数之外是不能进行访问的。
-
lambda表达式
(1)可以用来声明匿名函数,即没有函数名字的临时使用的小函数。
(2)只可以包含一个表达式,并且该表达式的计算结果为函数的返回值,不允许包含其他复杂的语句,但在表达式中可以调用其他函数。例如:
f = lambda x, y, z: x + y + z
print(f(1, 2, 3)) # 输出6
这种定义方式等价于如下定义方式:
def f(x, y, z):
return x + y + z
print(f(1, 2, 3))
- 函数的返回值
函数可以使用return返回值,也可以把lambda表达式作为函数返回值。
(1)把lambda表达式作为函数返回值
def math(k):
if (k == 1):
return lambda x, y: x + y # 返回加法lambda表达式
if (k == 2):
return lambda x, y: x * y # 返回乘法lambda表达式
action = math(1)
print("10+2=", action(10, 2)) # 输出10+2= 12
action = math(2)
print('2*5=', action(2, 5)) # 输出2*5= 10
(2)返回一个函数
def hi(name='Holy'):
def greet():
return 'The function is greet()'
return greet # 没加括号,代表不执行,只是传递
a = hi()
print(a) # 输出<function hi.<locals>.greet at 0x100a7a5e0> 意味着a现在指向hi()函数中的greet()函数
print(a()) # 输出The function is greet()
(3)返回多个值
当函数返回多个值的时候,会把多个值放在一个元组或其他类型的集合中返回。
def demo(s):
# 统计s中大小写字母个数
result = [0, 0]
for ch in s:
if 'a' <= ch <= 'z':
result[1] += 1
elif 'A' <= ch <= 'Z':
result[0] += 1
return result
print(demo('abcdABC')) # 输出[3, 4]