Python 里面,函数可是重中之重。它就像一块块积木,让你能够把复杂的问题拆解成更小、更易于管理的部分。我刚开始学 Python 的时候,就觉得函数特别酷,因为它们能让我的代码看起来更整洁、更模块化。
那Python 怎么写函数呢? 别慌,其实很简单。
最基本的形式,你得用 def
关键字来定义一个函数。然后给函数起个名字,接着是一对括号,括号里可以放参数,也可以不放。最后,别忘了冒号!
“`python
def greet(name):
“””
这个函数向指定的人打招呼。
“””
print(f”你好, {name}!”)
greet(“张三”) # 输出:你好, 张三!
“`
上面的代码,def greet(name):
就是定义了一个名为 greet
的函数,它接受一个参数 name
。函数体里面的 print(f"你好, {name}!")
就是函数要做的事情:打印一句问候语。那个三引号括起来的,是函数的文档字符串,用来说明函数的作用,是个好习惯,方便别人(也方便未来的你)理解你的代码。
参数这玩意儿,也挺有讲究的。
-
位置参数:就像上面的
name
一样,你传参的时候,得按照顺序来。 -
关键字参数:你可以用
name="李四"
这样的方式来传参,这样就不需要管顺序了。
“`python
def describe_person(name, age, city):
print(f”姓名: {name}, 年龄: {age}, 城市: {city}”)
describe_person(name=”王五”, age=30, city=”北京”) # 输出:姓名: 王五, 年龄: 30, 城市: 北京
describe_person(age=30, name=”王五”, city=”北京”) # 输出:姓名: 王五, 年龄: 30, 城市: 北京
“`
- 默认参数:你可以给参数设置默认值,如果调用函数的时候没传这个参数,就用默认值。
“`python
def power(base, exponent=2):
“””
计算一个数的幂。默认计算平方。
“””
return base ** exponent
print(power(5)) # 输出:25,相当于 power(5, 2)
print(power(5, 3)) # 输出:125
“`
- 可变参数:有时候,你可能不知道函数会接受多少个参数。这时候,你就可以用
*args
和**kwargs
。*args
用来接收任意数量的位置参数,它们会被打包成一个元组。**kwargs
用来接收任意数量的关键字参数,它们会被打包成一个字典。
“`python
def add(*args):
“””
计算所有参数的和。
“””
total = 0
for num in args:
total += num
return total
print(add(1, 2, 3, 4, 5)) # 输出:15
def build_profile(first, last, **user_info):
“””
创建一个用户简介。
“””
user_info[‘first_name’] = first
user_info[‘last_name’] = last
return user_info
user_profile = build_profile(‘albert’, ‘einstein’, location=’princeton’, field=’physics’)
print(user_profile) # 输出:{‘location’: ‘princeton’, ‘field’: ‘physics’, ‘first_name’: ‘albert’, ‘last_name’: ‘einstein’}
“`
返回值也很重要。函数可以用 return
语句返回一个值。如果没有 return
语句,函数默认返回 None
。
“`python
def square(x):
“””
计算一个数的平方。
“””
return x * x
result = square(4)
print(result) # 输出:16
“`
说到函数,就不得不提 lambda 函数。它是一种匿名函数,通常用于简单的、单行的函数。用 lambda
关键字定义,后面跟着参数,然后是冒号,最后是表达式。
python
square = lambda x: x * x
print(square(5)) # 输出:25
lambda 函数通常和 map()
, filter()
, reduce()
这些内置函数一起使用,能让你的代码更简洁。
“`python
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x * x, numbers)) # 使用 map() 和 lambda 函数
print(squared_numbers) # 输出:[1, 4, 9, 16, 25]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) # 使用 filter() 和 lambda 函数
print(even_numbers) # 输出:[2, 4]
“`
更进一步,我们可以聊聊函数的作用域。Python 有全局作用域和局部作用域。在函数内部定义的变量,只能在函数内部访问,这就是局部作用域。在函数外部定义的变量,可以在任何地方访问,这就是全局作用域。如果你想在函数内部修改全局变量,你需要用 global
关键字声明。不过,一般来说,尽量避免在函数内部修改全局变量,这样容易让代码变得难以理解和维护。
“`python
x = 10 # 全局变量
def modify_x():
global x # 声明 x 是全局变量
x = 20
modify_x()
print(x) # 输出:20
“`
还有个概念叫闭包,它指的是一个函数可以记住它被创建时的环境。也就是说,一个函数可以访问它外部函数的变量,即使外部函数已经执行完毕。
“`python
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
add_five = outer_function(5)
print(add_five(3)) # 输出:8
“`
在这个例子里,inner_function
就是一个闭包。它记住了 outer_function
的参数 x
,即使 outer_function
已经执行完毕,inner_function
仍然可以访问 x
。
最后,强调一下,写函数的时候,一定要注意代码的可读性。给函数起个好名字,写清楚文档字符串,保持代码的简洁明了,这些都能让你的代码更容易理解和维护。而且,多写多练才是王道,熟能生巧嘛! 毕竟,编程这东西,不是光看就能学会的,得动手敲代码才行。掌握了Python怎么写函数,你在 Python 的世界里就能走得更远!
评论(0)