函数组成:函数一般包括函数定义符(def)、函数名、传入参数(形式参数,可为空)、返回值(使用return,可为空省略)、说明注释等内容。
PS:1、一个函数内只能用一个 return,象征着函数的结束,return 语句后边的语句不会执行;
2、传入参数有多个时,调用函数时的实际参数的位置应必须传入参数一致。
3、函数必须先定义,再调用,即函数定义必须在函数调用执行语句之前出现;
4、函数默认情况下不会自动执行,只有在被调用时才会执行其中的代码;
函数调用:函数名(传入参数)
def greet(name):
"""
打招呼的函数,接受一个名字作为参数。
"""
return 'hello, '+name
# 函数的调用
print(greet("Alice")) # 输出 "Hello, Alice!"
函数嵌套:指的是⼀个函数⾥面又调用或定义了另外⼀个函数。
def outer_function():
# 外部函数
print("这是外部函数")
def inner_function():
# 内部函数
print("这是内部函数")
# 调用内部函数
inner_function()
# 调用外部函数
outer_function()
概述:在Python中,函数的参数有位置参数、关键字参数、默认参数、可变长参数等类型
位置参数:最常见的参数类型,相当于 Java 的形式参数,在函数调用时,根据位置顺序将实际参数传递给形式参数。
关键字参数:通过指定参数名和对应的值来传递参数,而不依赖于它们的位置顺序。使用关键字参数可以提高代码的可读性,并且可以省略某些参数。
默认参数:也叫缺省参数,在函数定义时为参数指定默认值。如果没有提供相应的实际参数,则会使用默认值。
可变长参数:允许函数接受可变数量的参数。在Python中,有两种类型的可变长参数,不定长位置参数(使用 *args 来接收)、不定长关键字参数(使用 **kwargs 来接收)。
""" 位置参数 """
def greet(name, age):
print("Hello, " + name + "! You are " + str(age) + " years old.")
greet("Alice", 25)
""" 关键字参数 """
def user(name='Nancy', fruit='pear'):
print(f'{name}喜欢吃{fruit}')
user()
user('张三', '苹果')
""" 默认参数 """
def info(name, age, gender='男'):
print(f'您的名字是{name}, 年年龄是{age}, 性别是{gender}')
info('张三', '26')
info('Nancy', '23', '女')
""" 不定长位置参数 """
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
print(sum_numbers(1, 2, 3)) # 输出 6
""" 不定长关键字参数 """
def print_info(**kwargs):
for key, value in kwargs.items():
print(key + ": " + str(value), end=', ')
print_info(name="Alice", age=25) # 输出 name: Alice, age: 25
概述:会重复执行自身的过程,每次都处理一个更小的问题,直到达到终止条件,然后逐层返回结果。常用于如树的遍历、搜索算法和动态规划等场景。
特点:必须有出口(终止条件),函数内部⾃己调⽤自⼰。
def factorial(n):
if n == 0: # 终止条件,放在函数调用之前
return 1
else:
return n * factorial(n - 1)
# 计算阶乘
result = factorial(5)
print(result) # 输出 120
概述:Python提供【 help(函数名) 】方法快速查询一个函数的说明注释,注释需要位于
概述:Lambda表达式是一种用于创建匿名函数的简洁语法。它通常由关键字 lambda 开头,后跟一个或多个参数、冒号( : )、以及一个返回结果的表达式。
格式:lambda 参数列表 : 返回值表达式,其中参数列表可以为空,也可以是位置参数、默认参数、可变参数等,只能返回⼀个表达式的值。
print((lambda: 100)()) # 100
print((lambda a: a)('hello world')) # hello world
print((lambda a, b, c=100: a + b + c)(10, 20)) # 130
print((lambda *args: count(args))(10, 20, 30)) # 返回值为元组
print((lambda *args: max(args))(10, 20, 30)) # 30
print((lambda **kwargs: kwargs)(name='python', age=20)) # 返回值为字典
students = [
{'name': 'TOM', 'age': 20},
{'name': 'ROSE', 'age': 19},
{'name': 'Jack', 'age': 22}
]
# 按name值升序排列列
students.sort(key=lambda x: x['name'])
print(students)
# 按name值降序排列列
students.sort(key=lambda x: x['name'], reverse=True)
print(students)
# 按age值升序排列列
students.sort(key=lambda x: x['age'])
print(students)
概述:Python 支持高阶函数,高阶函数是指将一个或多个函数作为传入参数,或/并一个函数作为返回值的函数,它将函数作为数据进行处理。
def sum_num(a, b, f):
return f(a) + f(b)
def self_def(x):
return x ** 2
result1 = sum_num(-1, 2, abs) # abs为Python内置的求绝对值函数,类似的有max、sum等
print(result1) # 结果:3
result2 = sum_num(-1, 2, self_def)
print(result2) # 结果:3
result3 = sum_num((1, 2), (2, 5), lambda a: a[0] * a[1])
print(result3) # 结果:12
result4 = sum_num((1, 2, 8), (2, 5, 3), max)
print(result4) # 3
概述:Python常用的内置高阶函数有 map( )、filter( )、reduce( ) 等,通过传入的函数,对可迭代对象进行操作并返回结果。
map:格式为【 map( func, iterable ) 】,将对象中的元素,根据 func 作一对一的映射迭代,并输出可迭代的 map 对象。
filter:格式为【 filter( func, iterable ) 】,将对象中的元素,根据 func 逐个进行判断,保留判断结果为 True 的元素,并返回可迭代的 filter 对象。
reduce:格式为【 reduce( func, iterable ) 】,其中 func 函数的输入必须为两个参数。
import functools
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x ** 2, numbers)
print(list(squared)) # 输出 [1, 4, 9, 16, 25]
odds = filter(lambda x: x > 2, numbers)
print(list(odds)) # 输出 [3, , 5]
strings = ["Hello", " ", "World"]
combined = functools.reduce(lambda x, y: x + y, strings)
print(combined) # 输出 "Hello World"
nums = [(2, 5), (3, 3), (6, 1), (4, 7)]
sun_num = functools.reduce(lambda a, b: a + b, nums)
print(sun_num) # 输出 (2, 5, 3, 3, 6, 1, 4, 7)