1.函数目的 #函数允许你将代码封装起来,在调用的时候重复使用这段代码,而无需重新编写相同的代码。这有助于减少代码冗余,提高代码的可维护性和可读性。 2.函数定义 #在python中,函数是通过使用def关键字后跟函数名和圆括号来定义。圆括号之间可以定义函数,用于接收传递给函数的值。函数的第一行可以选择性的使用文档字符串(docstring),这是一个字符串,用于解释函数的用途,参数和返回值。函数体紧随开始定义下一行,并且必须缩进
def say_hello(name):
"""
这个函数接收一个名字作为参数,并打印一条问候消息
:param name:要问候人的名字
:return:
"""
print(f"hello,{name}!")
say_hello("詹姆斯")
3.函数声明 def : 是定义函数名的关键字 函数名:是给函数取的名字,这个名字在之后的代码中会被用来调用这个函数 参数列表:是传递给函数的值,他们是可选的,如果有多个参数,他们之间用逗号分隔 函数体:是函数执行时运行的代码块。他应该缩进,这是python中定义代码块的方式 return:语句是可选的,用于从函数返回一个值。如果没有return语句,函数将隐式的返回None
def add(x,y):
"""返回两个数的和"""
return x + y
#调用函数
result = add(6,3)
print(result)
4.函数的调用 已经定义好的一个函数体中的代码,当你调用一个函数时,它可以向你传递一些值,这些值在函数内部用来执行某些操作。函数执行完毕,可以返回一个值给调用者
def greet(name, greeting="hello"):
"""向用户打招呼"""
print(f"{greeting},{name}")
# 调用函数,传递一个参数
greet("杰克逊") # 输出:hello,杰克逊
# 调用函数,传递两个参数
greet("鲁滨逊", "hi") # 输出:hi,鲁滨逊
5.函数形参 函数形参是函数定义是指定的参数,他们代表了函数期望接收的占位符。当函数被调用时,调用者需要提供实际参数,以便函数能够执行其定义的任务。 当函数同时有位置参数,默认参数,*args和 ** kwargs时,它们的顺序必须是位置参数,默认参数,*args, ** kwargs。 基本形参 最简单的形参就是普通的变量名,他们在函数体内部被使用
def greet(name):
print(f"hello,{name}")
#调用时需要提供一个实际参数来替换name形参
greet("恩佐")#输出:hello,恩佐
默认形参 在函数定义时,可以给形参指定默认值。如果调用函数时没有为这些形参提供值,他们将使用默认值
def greet(name,greeting="hello"):
print(f"{greeting},{name}")
greet("恩比德")#使用默认greeting:hello,恩比德
greet("恩比德")
可变数量参数 允许你定可以接收任意数量参数的函数。这可以通过*args(非关键字参数)和**kwargs(关键字参数)来实现 *args允许将一个不定长度的参数列表传递给函数,这些参数在函数内部被当作一个数组
def print_numbers(*args):
for num in args:
print(num)
print_numbers(1, 2, 3, 4, 5)
**kwargs允许将不定长度的关键字参数传递给函数。这些参数在函数内部被当作一个字典。
def greet_with_info(**kwargs):
for key,value in kwargs.items():
print(f"{key}:{value}")
greet_with_info(name="鲁迪沙",age = 30,country = "usa")
6.函数实参 调用函数时传递给函数的具体值
result = add(6,5)#6和5是实参
print(result)
函数通过return语句返回值 如果没有return语句,函数将返回None 函数可以返回单个值或返回一个元组来间接返回多个值 函数返回值的类型不需要在函数定义是指定 返回单个值 函数可以返回任何数据类型的单个值,包括整数,浮点数,字符串,列表,元组,字典,集合
def square(x):
return x * x
result = square(5)
print(result)
返回多个值 虽然函数只能返回一个值,但是可以通过返回一个元组来间接的返回多个值。
def get_info(name, age):
return name, age
name, age = get_info("Alice", 30)
print(name, age) # 输出: Alice 30
返回None 如果函数没有return语句,或者return后面没有跟任何值,那么函数将返回None
def no_return():
pass
result = no_return()
print(result) # 输出: None
匿名函数是通过lambda关键字定义的。lambda函数是一个小的匿名函数,它可以接受任何数量的参数,但只能有一个表达式。这个表达式的计算结果会自动生成这个lambda函数的返回值。lambda函数通常用于定义简单的、能够在一行内表示的函数对象
square = lambda x: x * x
print(square(4)) # 输出: 16
8.变量的作用与(global与nonlocal) global关键字用于在函数内部声明全局变量,这样函数就可以修改全局作用域中的变量了。
a = 10
def my_fun():
global a
a = 20
my_fun()
print(a)
在Python中,nonlocal关键字用于在嵌套函数中声明一个变量,这个变量既不是局部变量(即在该嵌套函数内部定义的变量),也不是全局变量(即在该函数外部模块级别定义的变量)。相反,它指的是在嵌套函数外部但同样在另一个函数内部定义的变量。这允许嵌套函数修改其外部作用域(但不是全局作用域)中的变量。 这是nonlocal关键字的一个典型用法场景
def outer_function(text):
def inner_function():
# 这里我们想要修改outer_function中的变量text,而不是创建一个新的局部变量
nonlocal text
text += " world"
print("Inside inner_function:", text)
text = "Hello"
inner_function() # 调用嵌套函数,这将修改text的值
print("Inside outer_function:", text)
outer_function("Initial text")
# 输出:
# Inside inner_function: Hello world
# Inside outer_function: Hello world
9.递归函数 在Python中,递归函数是一种自我调用的函数。它会在解决一个问题的过程中,直接或间接地调用自己。 求阶乘和
def set_num(v):
if v == 1:
return 1
else:
return v * set_num(v-1)
print(set_num(5))
10.匿名函数 匿名函数是通过lambda关键字定义的。lambda函数是一个小的匿名函数,它可以接受任何数量的参数,但只能有一个表达式。这个表达式的计算结果会自动生成这个lambda函数的返回值。lambda函数通常用于定义简单的、能够在一行内表示的函数对象
square = lambda x: x * x
print(square(4)) # 输出: 16
11.闭包 数据封装:通过闭包,可以封装数据,使得这些数据只能通过特定的函数访问和修改
def outer_function(text):
def inner_function():
print(text)
return inner_function
# 创建闭包
my_closure = outer_function("Hello, World!")
# 调用闭包
my_closure() # 输出: Hello, World!
12.装饰器 装饰器(Decorator)是Python中一个非常强大且有用的特性,它允许我们在不修改原有函数代码的情况下,为函数添加新的功能。装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。这个新函数是对原函数的一个增强版本,可以在调用原函数之前或之后执行某些操作