【Python 基础教程】一文理清Python函数的细枝末节

简介: 【Python 基础教程】一文理清Python函数的细枝末节

前言


什么是函数?在中学时代或者数学领域中你也许会得到这样的回答:函数的定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记作f(x),得到另一数集B,假设B中的元素为y,则y与x之间的等量关系可以用y=f(x)表示,函数概念含有三个要素:定义域A、值域B和对应法则f。其中核心是对应法则f,它是函数关系的本质特征。但是在我么计算机领域中函数有了另一种理解,它是神圣的。它是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、(OOP中)方法。一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。今天呢咱就带领大家了解一下计算机语言中的函数是一种什么情况。


一、为什么计算机中要有函数?


有时一段代码可能要使用很多次,每次只是变量的大小进行了细微的改变,如果不封装成函数

可能每次使用的时候都需要重复的写一次。写成函数可以实现一段代码重复使用

对于计算机编程,我们期望程序的模块化设计,而函数正是将代码进行模块化的典型。通过将能够实现某种功能的一段代码装进函数,使用的时候再调用相应的函数。

函数的使用可以使代码更加严密更加有条理。

将一个项目切分成很多小的模块,然后可以多人协作。提高开发效率

函数的递归可以简单实现许多算法 如:汉诺塔


二、Python的函数分类


1.内置函数


直白的说就是你下载完Python IDEL后不需要进行导入包能够直接使用的函数

例如print()、abs()、len()等等


代码如下:


print("Hello")
abs(-1)
len("Hello World")


2.标准库函数


标准库的会伴随着Python的安装而安装,不过使用里面的包时需要先导入

使用的规则如下:


代码如下:


import math
print(math.pi)


3.第三方库函数


第三方库最典型的特点就是需要自己单独进行下载或者安装

安装之后进行导入使用


代码如下:


import pandas as pd
data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())


4.用户自定义函数


自己定义的函数函数名自己起参数自己设置,函数的功能自己定制

这也是我们今天要重要强调的内容,先看看一个成型的函数。


代码如下:


def print99():
  for teg in range(1,10):
     temp=1
     while temp<=teg:
        print(str(temp)+'*'+str(teg)+'='+str(teg*temp),end='  ')
        temp+=1
     print()
if __name__=="__main__":
  print99()


三、Python中函数的组成部分及特点


1.声明一个函数


一个函数的组成大致是这样的【函数声明】


'''
def是对函数进行声明,f为函数名
Python语句块是要求格式化的,所以函数体(这里pass做的占位符)在
函数声明下要进行缩进,并且参数列表括号后面要跟上:(冒号)
'''
def f(参数列表):
  pass


2.函数特点的剖析


Python中的函数特点:


函数使用比较简单与其他语言一样函数名后加括号调用(不过调用函数之前一定要先进行函数声明)

函数可以有返回值但是不是必须有返回值(无返回值函数执行完毕后结果为None)

函数是一个表达式,可以直接用于计算(加减乘除)

Python中的函数可以作为变量直接赋值。

Python函数返回一个值,但是经过操作支持多返回值(可以返回一个元组,元组内存多个值)

函数从声明到执行:


def是执行语句,Python解释执行def语句会创建一个函数对象,并绑定到函数名变量

调用函数前必须先执行def 语句,也就是函数的声明,创建函数对象

执行的时候使用 函数名(),也就是相应的函数对象实现函数的调用。

使用外部函数的时候先进行包的导入,在导入包的时候会初始化函数对象。


四、函数参数详解


1.按照参数的定义划分


①形式参数


形式参数顾名思义仅仅是一种形式上的参数,主要用于函数的参数类型声明,在Python中体现的不是很明显,但是在C或C++上能够明显的体现出来。在C++中函数声明的参数列表可以只写函数的类型。然后调用函数的时候传入对应类型的参数。形式参数的作用域仅仅在该函数范围内。


②实际参数


实际参数顾名思义就是实际的参数,换句话说也就是在调用函数的时候实实在在传进去的参数。此时的参数变量类型要与函数形式参数相对应,要有人为赋予的值。


#此时的i就是形式参数、“Tom”就是实际参数
def pType(i):
  print(type(i))
pType("Tom")


2.按照参数的使用方法划分


根据参数的定义划分可以划分为形参、实参。根据参数的使用方法划分可以划分为位置参数、可变参数、可选参数、命名参数。


①位置参数


位置参数的意思就是根据形式参数的位置,传入相应的实际参数。函数的参数列表是有限个
并且参数没有默认值,调用函数的时候必须在对应位置传入对应参数。
def pType(i):
  print(type(i))


②可变参数


前面提到了位置参数,是有限个并且必须在指定位置传入指定参数。
可变参数与其相反,它可以传入任意个数个参数,并且类型无需保持一致。
可变参数的传参方方式有两种一种是变量前加单*,一种是变量前加双*。
加单星的称为元组可变参数,加双星的是字典可变参数。(可变参数一般放在参数列表的末尾)
要切记如果元组可变参数与字典可变参数同时出现在函数参数列表中要将元组可变参数放在前面


[1]元组可变参数


元组可变参数指的是传进来的参数会以元组的形式进行储存。
def pr1(a,b,*c):
    print(a)
    print(b)
    print(c)


[2]字典可变参数


字典可变参数是传进来的参数会以字典的形式进行储存,最典型的特征就是传参时必须以命名参数形式传参
命名参数接下来会讲,使用这种方式的原因得益于字典可变参数是字典形式,要有键值对。
def pr2(a,b,** c):
    print(a)
    print(b)
    print(c)


[3]字典元组可变参数


字典可选参数放在参数列表最后,因为元组可选参数根据位置进行选参,如果将其放在字典可选参数后面会
导致命名参数后面的参数无法传入,程序抛出异常。而将命名参数放在最后正好弥补这种缺陷。


def pr3(a,b,*c,**d):
    print(a)
    print(b)
    print(c)
pr3(1,2,3,age=4,p=2,q=3,w=4,e=3,r=24)


③可选参数


可选参数就是调用函数的时候可以传入该参数,也可以不传入该参数,如果不传人参数的话就使用
该参数在定义函数的时候的默认值。【如果参数列表有可变参数,传参的时候会先给可选参数再给可变参数】
def pr1(a,b=10):
    print(a)
    print(b)


④命名参数


命名参数使用的时候要将参数名体现出来,也就是说,传参的时候可以跟参数位置无关,但是需要使用参数名传参
一般的情况下命名参数有可无,在有字典可变参数或者经过我们处理的时候,相关的参数必须显式传递。


命名参数的大致形式


def pr1(a,b):
    print(a)
    print(b)
#这两种调用方式一样。
pr1(10,11)
pr1(b=11,a=10)


强制命名参数


def pr1(*,a,b):
    print(a)
    print(b)
#这两种调用方式一样。
# pr1(10,11)    这种方式报错
pr1(b=11,a=10)


五、递归函数


1.定义


在计算机语言中,如果一个函数调用了自身那么这个函数被称为递归函数。


# 汉诺塔
def h(n,a,b,c):
  if n==1:
    print(a,"--->",c)
  else:
    h(n-1,a,c,b)
    h(1,a,b,c)
    h(n-1,b,a,c)
h(4,"A","B","C")


2.递归函数需要满足的条件


  • 递归必须有终止条件
  • 必须保证随着递归次数增加相关变量向终止条件收敛
  • 必须清楚递归不能次数太多,递归次数超限将影响计算机内存。


六、函数式编程


函数式编程是种编程方式,函数式编程语言最重要的是函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里函数的计算可随时调用。


1.函数对象


作为Python中的函数,是以对象的形式存在的。对象可以用于参数传递,作为返回值

作为变量进行赋值等等。


2.高阶函数


如果一个函数的参数或者返回值中包含另外一个函数,那么该函数被称为高阶函数。


3.Lambda表达式和匿名函数


在Python中有许多内置函数均为高阶函数,例如map、filter。使用他们的时候往往

需要传递一个函数进去,作为处理变量的标准。这种被作为参数的函数被称为回调函数。

一般不会很大,只需要满足一些小功能。所以我们喜欢传递匿名函数进去。

而Lambda表达式的作用就是创建小型的匿名函数,规则如下:

lambda 参数列表:函数体

以下程序运行结果为

09ae2b5913534b66a75f2206251a7207.png


其中map与filter前的*意思是解包。显示出列表信息。


print(*map(lambda x,y:x+y,range(5),range(5)))
print(*filter(lambda x:x%2==0,range(10)))


4.函数装饰器的简单使用


函数装饰器就是套在函数外层的一个躯壳,用于初始化内部函数执行的环境。

装饰器返回一个修改之后的函数对象,装饰器是一种设计模式。一个函数可以有多个装饰器。

装饰器的具体语法如下:


import time
#装饰器函数
def timeit(func):
    def wrapper(*s):
        start=time.perf_counter()
        func(*s)
        end=time.perf_counter()
        print('运行时间:',end-start)
    return wrapper
#函数使用装饰器
@timeit
def mysum(n):
    sum=0
    for i in range(n):sum+=i
    print(sum)
#调用函数
mysum(10)


总结


Python是一门即支持面向对象又支持面向过程的语言,并且Python中一切皆对象,函数式编程使其编程起来十分灵活。熟练地掌握函数可以使我们代码更为规范。到此函数篇也就结束了,函数装饰器大家可以深入地学习一下。本篇大家就重点掌握参数运用以及Lambda表达式。


相关文章
|
12天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
2天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
23天前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
206 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
32 3
|
1月前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
45 2
|
1月前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
16 0
|
2月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
87 8
|
2月前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
155 7
|
2月前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
58 4
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!

热门文章

最新文章