Python中的函数通过def关键字定义,将语句打包成可复用的代码块,减少重复劳动并提升扩展性。参数包括形参实参、默认参数、关键参数及非固定参数*args和**kwargs。全局变量需用global关键字在函数内修改。内置函数如abs、all、map、zip等覆盖日常开发需求。
在实际编程中,函数是一个非常核心的概念。它就像是一个代码的“工具箱”——将一系列语句整合在一起,赋予一个名称,之后只要调用这个名称,就能执行整段逻辑。在Python中,使用def关键字即可实现这一操作。
首先来看如何定义函数。简单来说,函数就是将一组语句打包成一个变量名,调用该变量名即可执行这些语句。这一机制直观且实用,其优势在于:帮助开发者避免重复劳动,提升代码逻辑的扩展性,并使后续维护更加简便。例如,定义一个简单的say_hello函数,用于打印"Hello World";之后调用say_hello()即可输出结果。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
函数的好处不言而喻,主要体现在以下三点:
那么,如何创建函数呢?
复制代码# 函数
def say_hello():
print("Hello World")
say_hello()
复制代码Hello World
函数参数涉及的内容较多,但逻辑清晰。形参和实参是最基本的概念——形参是定义函数时使用的“占位符”,实参是调用时实际传入的具体值。例如,def sum1(a, b):中的a、b即为形参,而sum1(5, 6)中的5、6则为实参。
接下来是默认参数。如果希望某个参数具有默认值,可以在定义时直接赋值。例如,def oblong_area(a, b=3):,当调用oblong_area(2)时,b自动取默认值3,结果为6。需要注意的是,默认参数必须位于参数列表的最后。
然后是关键参数(关键字参数)。通常情况下,传参需要按顺序进行,但如果在调用时指定参数名,则可以打乱顺序。例如,oblong_volume(2, z=4, y=3),其中y和z虽未按顺序书写,但由于使用了关键字参数,依然能正确执行。但需注意规则:关键参数必须放在位置参数之后,否则会引发错误。
最后是非固定参数,即不确定要传入多少个参数的情况。Python通过*args和**kwargs来处理,前者接收元组,后者接收字典。例如,def get_info(name, age, *args):,调用时多余参数会被打包成元组;而def get_info(name, age, **kwargs):则会将sex="男"这类参数打包成字典。
变量作用域是编程中绕不开的话题。全局变量定义在函数外部,在整个程序生命周期内均可访问。局部变量定义在函数内部,仅在函数调用时存在,调用结束后即被销毁。
一个常见场景是:如何在函数内部修改全局变量?答案是使用global关键字进行声明。例如:
复制代码# 修改全局变量
def change_global_var():
global global_var
global_var = "修改全局变量"
print(global_var)
如果在函数内部未声明global而直接修改全局变量,Python会将其视为创建一个新的局部变量,这是初学者容易遇到的问题。
Python提供了许多实用的内置函数,几乎覆盖了日常开发中的各种需求。官方文档是必备参考资料,以下图示可帮助快速定位。

这里列举几个常用内置函数:
abs():返回绝对值,例如abs(-1)得到1。all()和any():检查可迭代对象的布尔值,all()要求所有元素为True,any()只要有一个为True即可。chr()和ord():字符与ASCII码互转,chr(65)得到'A',ord('a')得到97。dict():创建字典,使用灵活。dir()和help():调试时非常有用,dir()列出对象的属性和方法,help()提供详细文档。id():返回对象的内存地址。input():获取用户输入。int()、str()、list():类型转换函数,用途广泛。len():返回对象长度。locals():返回当前局部符号表,调试时可查看所有局部变量。map():对可迭代对象应用函数,返回迭代器。max()、min():返回最大值和最小值。open():打开文件,返回文件对象。print():输出到标准输出。range():生成序列,常用于循环。round():四舍五入,可指定小数位数。sum():求和。type():返回对象类型。zip():将多个可迭代对象打包成元组。enumerate():同时遍历索引和值,在for循环中尤其好用。以下是一段综合演示代码,展示了这些内置函数的使用:
复制代码# 内置函数
a = -1
arr = [1, 2, 3]print("hello world") # 将指定对象打印到标准输出(通常是屏幕)
print(abs(a)) # 返回数字的绝对值
print(all(arr)) # 如果可迭代对象中的所有元素都为True(或可迭代对象为空),则返回True
print(any(arr)) # 如果可迭代对象中的任何元素为True,则返回True
print(max(arr)) # 返回给定参数中的最大值
print(min(arr)) # 返回给定参数中的最小值
print(chr(65)) # 返回整数对应的ASCII字符
print(ord('a')) # 返回单个字符(Unicode码点)的整数值
print(dict(a=1, b=2, c=3)) # 创建一个字典
print(dict([('a', 1), ('b', 2), ('c', 3)]))
print(dir()) # 返回对象的属性列表。如果未指定对象,则返回当前范围内的变量、方法和定义的类型列表
print(dir(str))
help(print) # 提供有关模块、关键字、属性等的帮助信息
print(id(a)) # 返回对象的“身份”(一个整数,通常是其在内存中的地址)
print(str(123)) # 将对象转换为字符串形式
print(int("123")) # 将数字或字符串转换为整数
print(len("123")) # 返回对象(如字符串、列表、元组等)的长度或项目数
print(list((1, 2, 3))) # 将可迭代对象转换为列表
print(locals()) # 返回当前局部符号表的字典。如果在一个函数内部调用它,返回的字典将包括函数的局部变量名及其值
print(list(map(lambda x: x ** 2, arr))) # 将一个函数应用于一个或多个可迭代对象的项,并返回一个新的迭代器,其中包含函数的结果
print(list(range(5))) # 返回一个不可变的序列类型,通常用于在循环中生成一个数字序列
print(round(3.1415926, 2)) # 将浮点数四舍五入到指定的小数位数
print(sum([1, 2, 3, 4, 5])) # 返回可迭代对象(如列表、元组或集合)中所有项的总和
print(type(1)) # 返回对象的类型
print(list(zip(["a", "b", "c"], [1, 2, 3]))) # 将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象
# 将可迭代的对象(列表、元组、集合)组合为一个缩影序列,同时可以输出数据和下标,for循环
for index, item in enumerate(["a", "b", "c"]):
print(index, item)# 用于打开一个文件,返回一个文件对象(通常是一个_io.TextIOWrapper实例),该对象可以用于读取或写入文件
with open('test.txt', 'w') as f:
f.write("hello world")# 从用户获取输入
user_input = input("请输入:")
print(user_input)
输出结果:
复制代码hello world
1
True
True
3
1
A
97
{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2, 'c': 3}
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'arr', 'change_global_var', 'get_info', 'global_var', 'oblong_area', 'oblong_volume', 'print_global_var', 'print_local_var', 'say_hello', 'sum1']
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
Help on built-in function print in module builtins:print(*args, sep=' ', end='n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default. sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.140710075548728
123
123
3
[1, 2, 3]
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000220496B8D70>, '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:\Projects\pyCharm\demo1\test4.py', '__cached__': None, 'say_hello': <function say_hello at 0x00000220498BB5E0>, 'sum1': <function sum1 at 0x0000022049C66090>, 'oblong_area': <function oblong_area at 0x000002206ACBE090>, 'oblong_volume': <function oblong_volume at 0x000002206ACBD170>, 'get_info': <function get_info at 0x000002206AE28250>, 'global_var': '修改全局变量', 'print_global_var': <function print_global_var at 0x000002206AD53AB0>, 'print_local_var': <function print_local_var at 0x000002206AE28300>, 'change_global_var': <function change_global_var at 0x000002206AE283B0>, 'a': -1, 'arr': [1, 2, 3]}
[1, 4, 9]
[0, 1, 2, 3, 4]
3.14
15
'int' >
[('a', 1), ('b', 2), ('c', 3)]
0 a
1 b
2 c
请输入:
从函数定义到参数传递,再到变量作用域和内置函数,Python在这一环节的设计清晰明了,熟练之后编写代码会更加顺畅。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述