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 的世界里就能走得更远!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。