python基础语法01——基本类型
python基础语法02——复合类型
python基础语法03——语句构成
函数是Python中可重复使用的代码块,用于执行特定任务。通过将代码封装为函数,可以提高代码的可读性、可维护性和复用性。函数在程序设计中扮演着重要角色,能够减少代码冗余并提升开发效率。
def function_name(parameters):
# 函数体
return result # 可选的返回值
说明
- def:用于声明一个函数,告诉 Python 这是一个函数的定义。
- *unction_name:函数名,一个有效的标识符,规则和变量名一致。
- parameters:形参,可以是0 ~ n 个,参数之间用逗号分隔。
- 函数体:定义函数执行的具体操作。
- return:指定函数的返回值,没有则返回None。
- return之后的代码不会执行。
函数名(实际调用传递参数)
函数调用是一个表达式,可以直接参与运算
最常见的传参方式,参数按定义的顺序依次传入函数。
def greet(name, age):
print(f"Hello, {name}. You are {age} years old.")
greet("Alice", 30) # 输出: Hello, Alice. You are 30 years old.
通过指定参数的名称来传值,无顺序限制,代码可读性较高。
def greet(name, age):
print(f"Hello, {name}. You are {age} years old.")
greet(age=30, name="Alice") # 输出: Hello, Alice. You are 30 years old.
通过指定参数的名称来传值,无顺序限制,代码可读性较高。
def greet(name, age=25):
print(f"Hello, {name}. You are {age} years old.")
greet("Alice") # 输出: Hello, Alice. You are 25 years old.
greet("Bob", 30) # 输出: Hello, Bob. You are 30 years old.
使用 ∗ a r g s *args ∗args 可让函数接受任意数量的位置参数。 ∗ a r g s *args ∗args 会将多余的位置参数收集成一个元组。
def sum_numbers(*args):
return sum(args)
print(sum_numbers(1, 2, 3)) # 输出: 6
print(sum_numbers(1, 2, 3, 4)) # 输出: 10
使用 ∗ ∗ k w a r g s **kwargs ∗∗kwargs 可以让函数接受任意数量的关键词参数。 ∗ ∗ k w a r g s **kwargs ∗∗kwargs 会将多余的关键词参数收集成一个字典。
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30)
# 输出:
# name: Alice
# age: 30
在函数调用时,可以混合使用位置参数和关键词参数,但位置参数必须放在关键词参数前面。
Python 允许在调用函数时解包序列或字典,使其作为位置参数或关键词参数传递给函数。
def greet(name, age):
print(f"Hello, {name}. You are {age} years old.")
args = ["Alice", 30]
greet(*args) # 输出: Hello, Alice. You are 30 years old.
def greet(name, age):
print(f"Hello, {name}. You are {age} years old.")
kwargs = {"name": "Alice", "age": 30}
greet(**kwargs) # 输出: Hello, Alice. You are 30 years old.
在 Python 中,实参可以是可变类型或不可变类型。它们的区别主要体现在值传递和引用传递的行为上。
不可变类型包括: i n t 、 f l o a t 、 s t r 、 t u p l e 、 f r o z e n s e t int、float、str、tuple、frozenset int、float、str、tuple、frozenset 等。 传递方式是值传递:
传递给函数的是该对象的值,函数内部修改该值不会影响外部变量的值。
def modify(x):
print('修改之前:', x, id(x))
x = 10 # 修改了 x 的值,但不会影响外部变量
print('修改之后:',x, id(x))
a = 5
modify(a)
print('原始数据:',a, id(a))
# 修改之前: 5 140722275297848
# 修改之后: 10 140722275298008
# 原始数据: 5 140722275297848
可变类型包括: l i s t 、 d i c t 、 s e t list、dict、set list、dict、set 等。这些类型的对象可以在原地修改。 传递方式是引用传递
:传递给函数的是对象的引用(即内存地址),在函数内部修改该参数的内容会直接影响外部变量。
def modify(lst):
print('修改之前:', lst, id(lst))
lst.append(4) # 修改了 lst 对象的内容
print('修改之后:',lst, id(lst))
a = [1, 2, 3]
modify(a)
print('外部原始数据:',a, id(a))
# 修改之前: [1, 2, 3] 2123053058816
# 修改之后: [1, 2, 3, 4] 2123053058816
# 外部原始数据: [1, 2, 3, 4] 2123053058816
列表:使用
lst.copy()
或切片lst[:]
来创建一个副本。
字典:使用dict.copy()
或copy.deepcopy()
来进行深拷贝。
元组:推荐用tuple
创建新的元组,虽然本身就是不可变。
以上就是本文的全部内容,本文仅仅简单介绍了python的函数及其参数传递,但实际上,Python的函数机制更深入,包括位置参数、关键字参数、默认参数和可变参数(如*args和**kwargs)。参数传递采用对象引用方式,函数内部对可变对象的修改会反映到外部。掌握这些概念能提升代码灵活性和效率,建议通过实际项目练习来深化理解。