【Python基础】Python函数

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢!

文章目录

一、前言

Python是一种功能强大的编程语言,其函数特性极大地增强了代码的可重用性和模块化设计。函数不仅可以帮助开发者组织和简化代码,还能通过参数传递和返回值机制实现灵活的交互。

本文将详细介绍Python函数的定义、调用、参数类型以及一些高级用法,帮助读者全面掌握Python函数的运用。

  • 什么是Python?

    Python是由荷兰人吉多·范罗苏姆于1990年初设计的一门高级编程语言,该语言应用领域非常广泛,尤其在数据科学、人工智能、游戏开发等领域,它已经成为最受欢迎的程序设计语言之一,非常适合新手学习。

    Python语言标准库官方使用手册:https://docs.python.org/zh-cn/3/library/turtle.html#turtle-methods

  • Python语言有哪些特点?

    1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。

    2.易于阅读:Python代码定义的更清晰。

    3.易于维护:Python的成功在于它的源代码是相当容易维护的。

    4.丰富的库:Python的最大的优势之一具有丰富的标准库,并且跨平台的,在UNIX,Windows和Mac兼容很好。

    5.面向对象:Python支持面向对象编程,在"面向对象"的语言中,程序是由数据和功能组合而成的对象构建起来的。

    6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。

    7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。

    8.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

二、函数的定义与调用

在Python中,使用def关键字定义函数。函数定义包括函数名、函数参数、函数体以及返回值。

下面是一个简单的函数定义示例:

python 复制代码
def greet(name):
    """打印问候消息"""
    print(f"Hello, {name}!")

这个函数名为greet,它接受一个参数name,并在调用时打印一条问候消息。调用该函数的方式如下:

python 复制代码
greet("Alice")  # 输出: Hello, Alice!

三、函数参数

Python中的函数参数非常灵活,可以包括位置参数、默认参数、可变参数和关键字参数。

3.1 位置参数

位置参数,即调用函数时,必须按照各个参数的对应位置,顺序的传递参数。

例如:

python 复制代码
def add(a, b):
    return a + b

result = add(3, 4)  # 输出: 7
3.2 默认参数

默认参数,如果在调用函数时没有传递该参数的值,则可以使用默认值。

例如,如下如果不传入参数,则会使用默认参数name。

python 复制代码
def greet(name="World"):
    return f"Hello, {name}!"

print(greet())          # 输出: Hello, World!
print(greet("Alice"))   # 输出: Hello, Alice!
3.3 可变数量参数(或不定长参数)

可变数量参数,即用于接受的参数,其数量是变化的、不固定的。这些参数被传递为一个元组或列表。

参数前面加星号,表示可变参数,基本语法如下:

python 复制代码
def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

例如,调用求和函数sum时,分别传入两个参数和三个参数:

python 复制代码
def sum(*numbers):
    return sum(numbers)

result = sum(1, 2)  # 传递两个参数,输出: 3

print ("result :",result)

result = sum(1, 2, 3)  # 传递三个参数,输出: 6

print ("result :",result)

加了一个星号 ***** 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。例如:

python 复制代码
#!/usr/bin/python3
  
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vartuple)
 
# 调用printinfo 函数
printinfo( 70, 60, 50 )

输出: 
70
(60, 50) # 以元组类型导入

加了两个星号 ** 的参数会以字典的形式导入。例如:

python 复制代码
#!/usr/bin/python3
  
# 可写函数说明
def printinfo( arg1, **vardict ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vardict)
 
# 调用printinfo 函数
printinfo(1, a=2,b=3)

输出: 
1
{'a': 2, 'b': 3}  # 以字典类型导入
3.4 关键字参数

关键字参数,即用于接受指定名称的参数。这些参数被传递为字典类型。

关键字参数,格式为:参数名1=参数值1,参数名2=参数值2。例如:

python 复制代码
def find_word(text, word):
    return text.find(word)

result = find_word(text='Hello, world!', word='world')  # 输出: 7

PS:使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

四、函数的返回值return 语句

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的 return 语句返回 None。

例如:

python 复制代码
#!/usr/bin/python3
 
# 可写函数说明
def sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print ("函数内 : ", total)
   return total
 
# 调用sum函数
total = sum( 10, 20 )
print ("函数外 : ", total)

五、函数作用域

函数作用域,即函数内部定义的变量是局部变量,函数外部定义的变量是全局变量。

例如:

python 复制代码
x = 10  # 全局变量

def foo():
    x = 5  # 局部变量
    print(f"局部变量 x: {x}")

foo()  # 输出: 局部变量 x: 5
print(f"全局变量 x: {x}")  # 输出: 全局变量 x: 10

局部变量的作用范围仅限于该函数内部,在函数外部尝试访问局部变量会导致错误,例如:

python 复制代码
def my_function():
    local_variable = "I am local"
    print(local_variable)
 
my_function()
# 输出: I am local
 
# 在函数外部尝试访问局部变量会导致错误
# print(local_variable)

在函数外部声明的变量称为全局变量。全局变量的作用范围跨越多个函数,例如:

python 复制代码
global_variable = "I am global"
 
def my_function():
    print(global_variable)
 
my_function()
# 输出: I am global

如果要在函数内部修改全局变量,需要使用global关键字进行声明,例如:

python 复制代码
global_variable = "I am global"
 
def my_function():
    global global_variable
    global_variable = "I have been modified"
 
my_function()
print(global_variable)
# 输出: I have been modified

在函数内部创建的变量,默认为局部变量。如果要在函数内部创建一个全局变量,需要使用global关键字进行声明。

例如:

python 复制代码
def my_function():
    global new_global_variable
    new_global_variable = "I am a new global"
 
my_function()
print(new_global_variable)
# Output: I am a new global

总之,局部变量只在其被声明的函数内部有效。全局变量可以在多个函数中共享,但要在函数内部修改全局变量,需要使用global关键字。

六、函数的高级用法

6.1 Lambda函数

Lambda函数是一种匿名函数,通常用于短小的函数定义,而不需要使用def关键字显式地定义函数。

Lambda函数的语法如下:

python 复制代码
lambda arguments: expression

下面是一个使用Lambda函数计算两个数之和的例子:

python 复制代码
add = lambda x, y: x + y
result = add(3, 4)  # 输出: 7
6.2 嵌套函数和闭包

函数可以嵌套定义,并且内部函数可以访问外部函数的变量。闭包是指内部函数引用了外部函数的变量,并且外部函数返回了这个内部函数。

例如:

python 复制代码
def outer():
    x = 5
    def inner():
        print(x)
    return inner

closure = outer()
closure()  # 输出: 5
6.3 文档字符串

文档字符串(docstring)用于描述函数的用途和参数。使用三重引号(""")编写文档字符串。

例如:

python 复制代码
def greet(name):
    """打印问候消息
参数:
    name -- 要问候的人的名字
"""
print(f"Hello, {name}!")

七、总结

Python中的函数是一种非常重要的编程工具,它可以帮助我们组织代码、提高代码的可重用性和可维护性。通过掌握函数的定义、调用、参数、返回值、作用域以及使用技巧等方面的知识,我们可以更好地使用函数来编写高效的Python程序。

如果您对文章中内容有疑问,欢迎在评论区进行留言,我会尽量抽时间给您回复。如果文章对您有帮助,欢迎点赞、收藏。您的点赞,是对我最大的支持和鼓励,谢谢 :-)

相关推荐
waterHBO17 分钟前
python 爬虫 selenium 笔记
爬虫·python·selenium
编程零零七1 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
2401_858286112 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py2 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy2 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript
AIAdvocate3 小时前
Pandas_数据结构详解
数据结构·python·pandas
小言从不摸鱼3 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
C-SDN花园GGbond4 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
迷迭所归处5 小时前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ5 小时前
Java 23 的12 个新特性!!
java·开发语言·学习