iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >总结Python编程中函数的使用要点
  • 844
分享到

总结Python编程中函数的使用要点

函数要点Python 2022-06-04 19:06:51 844人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

为何使用函数 最大化代码的重用和最小化代码冗余 流程的分解 编写函数 >>def语句 在python中创建一个函数是通过def关键字进行的,def语句将创建一个函数对象并将其赋值给一

为何使用函数

最大化代码的重用和最小化代码冗余 流程的分解

编写函数

>>def语句
python中创建一个函数是通过def关键字进行的,def语句将创建一个函数对象并将其赋值给一个变量名。def语句一般的格式如下所示:


def <name>(arg1,arg2,... argN):
  <statements>

通常情况下,函数体中会有一个return语句,可以出现在函数体的任何位置,它表示函数调用的结束,并将结果返回至函数调用处。但是return语句是可选的,并不是必须的。从技术角度上说,一个没有返回值的函数自动返回了none对象,但是这个值可以被忽略掉。

>>def语句是实时执行的
Python的def语句实际上是一个可执行的语句:当它运行的时候,它创建一个新的函数对象并将其赋值给一个变量名。(请记住,Python中所有的语句都是实时运行的,没有对像独立编译时间这样的流程)因为它是一个语句,它可以出现在任一语句可以出现的地方——甚至是嵌套在其他语句中。


if test:
  def func():
    ...
else:
  def func():
    ...
...
func()

它在运行时简单地给一个变量名进行赋值。与C语言这样的编译语言不同,Python函数在程序运行之前并不需要全部定义,更确切地说,def在运行时才评估,而在def之中的代码在函数调用时才会评估。

就像Python中其他语句一样,函数仅仅是对象,在程序执行时它清除地记录在了内存之中。实际上,除了调用之外,函数允许任意的属性附加到记录信息以供随后使用:


othername=func #Assign function object
othername() #Call func again

func() #call object
func.attr=value #attach attribute

一个例子:定义和调用


def times(x,y):
  return x*y

times(2,4) #return 8
times(3.12,4) #return 12.56
times('Ni',4) #return 'NiNiNi'

上面代码中对函数的三次调用都能正确运行,因为”*“对数字和序列都有效,在Python我们从未对变量、参数或者返回值有过类似的声明,我们可以把times用作数字的乘法或是序列的重复。

换句话说,函数times的作用决定于传递给它的参数,这是Python的核心概念之一。

需要强调的是,如果我们传入了一个不支持函数操作的参数,Python会自动检测出不匹配,并抛出一个异常,这样就能减少我们编写不必要的类型检测代码。

>>局部变量
所有在函数内部定义的变量默认都是局部变量,所有的局部变量都会在函数调用时出现,并在函数退出时消失。

函数设计概念

耦合性:对于输入使用参数并且输出使用return语句。 耦合性:只有在真正必要的情况下使用全局变量。 耦合性:不要改变可变类型的参数,除非调用者希望这样做。 聚合性:每一个函数都应该有一个单一的、统一的目标。 大小:每一个函数应该相对较小。 耦合:避免直接改变在另一个模块文件中的变量。 函数对象:属性和注解

>>间接函数调用
由于Python函数是对象,我们可以编写通用的处理他们的程序。函数对象可以赋值给其他的名字、传递给其他函数、嵌入到数据结构、从一个函数返回给另一个函数等等,就好像它们是简单的数字或字符串

把函数赋值给其他变量:


def echo(message):
 print(message)

x = echo
x('Indirect call!')  #Prints:Indirect call!

传递给其他函数:


def indirect(func,arg):
  func(arg)

indirect(echo,'Argument call')  #Prints:Argument call

把函数对象填入到数据结构中:


schedule=[(echo,'Spam!'),(echo,'Ham!')]
for (func,arg) in schedule:
  func(arg)

从上述的代码中可以看到,Python是非常灵活的!

>>函数内省
由于函数是对象,我们可以用用常规的对象工具来处理函数。


func.__name__
dir(func)

内省工具允许我们探索实现细节,例如函数已经附加了代码对象,代码对象提供了函数的本地变量和参数等方面的细节:


dir(func.__code__)
func.__code__.co_varnames
func.__code__.co_argument

工具编写者可以利用这些信息来管理函数。

>>函数属性
函数对象不仅局限于上一小节中列出的系统定义的属性,我们也可以向函数附加任意的用户定义的属性:


func.count=0
func.count+=1

func.handles='Button-Press'

这样的属性可以用来直接把状态信息附加到函数对象,而不必使用全局、非本地和类等其他技术。和非本地不同,这样的属性信息可以在函数自身的任何地方访问。这种变量的名称对于一个函数来说是本地的,但是,其值在函数退出后仍然保留。属性与对象相关而不是与作用域相关,但直接效果是类似的。

>>python3.0中的函数注解
在Python3.0也可以给函数对象附加注解信息——与函数的参数相关的任意的用户定义的数据。Python为声明注解提供了特殊的语法,但是,它自身不做任何事情;注解完全是可选的,并且,出现的时候只是直接附加到函数对象的__annotations__属性以供其他用户使用。

从语法上讲,函数注解编写在def头部行,对于参数,它们出现在紧随参数名之后的冒号之后;对于返回值,它们编写于紧跟在参数列表之后的一个->之后。


def func(a:'spam',b:(1,10),c:float) -> int:
  return a+b+c

注解和没注解过的函数在功能和使用上完全一样,只不过,注解过的函数,Python会将它们的注解的数据收集到字典中并将它们附加到函数对象自身。参数名变成键,如果编写了返回值注解的话,它存储在键return下,而注解的值则是赋给了注解表达式的结果:


func.__annotations__
 #Prints:{'a':'spam','c':<class 'float'>,'b':(1,10),'return':<class 'int'>}

注意点

如果编写了注解的话,仍然可以对参数使用默认值,例如:a:'spam'=4 意味着参数a的默认值是4,并且用字符串'spam'注解它。
在函数头部的各部分之间使用空格是可选的。
注解只在def语句中有效。
匿名函数:lambda

除了def语句之外,Python还提供了一种生成函数对象的表达式形式。由于它与LISP语言中的一个工具很相似,所以称为lambda。就像def一样,这个表达式创建了一个之后能够调用的函数,但是它返回了一个函数而不是将这个函数赋值给一个变量名。这也就是lambda有时叫做匿名函数的原因。实际上,它们常常以一个行内函数定义的形式使用,或者用作推迟执行一些代码。

>>lambda表达式
lambda的一般形式是关键字lambda,之后是一个或多个参数,紧跟的是一个冒号,之后是一个表达式:


lambda argument1,argument2,...argumentN:expression using arguments

由lambda表达式所返回的函数对象与由def创建并赋值后的函数对象工作起来是完全一样的,但是lambda有一些不同之处让其在扮演特定的角色时很有用。

lambda是一个表达式,而不是一个语句。
lambda的主体是一个单个的表达式,而不是一个代码块。
一下两段代码生成了同样功能的函数:


def func(x,y,z):return x+y+z
func(2,3,4)          #Return 9

f = lambda x,y,z : x + y + z
f(2,3,4)           #Return 9

默认参数也能在lambda中使用


x=(lambda a="fee",b="fie",c="foe": a+b+c)
x("wee")           #Prints:'weefiefoe'

在lambda主体中的代码像在def内的代码一样都遵循相同的作用域查找法则。

>>为什么要使用lambda
通常来说,lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义。它们总是可选的,因为总是能够用def来代替。

lambda通常用来编写跳转表:


L=[lambda x: x ** 2,
  lambda x: x ** 3,
  lambda x: x ** 4]

for f in L:
 print(f(2))      #Prints:4,8,16
print(L[0](3))      #Prints:9

实际上,我们可以用Python中的字典或者其他数据结构来构建更多种类的行为表:


key='Got'
{'already':(lambda: 2+2),
 'got':(lambda: 2*4),
 'one':(lambda: 2 ** 6)}[key]()     #Prints:8

这样编写代码可以使字典成为更加通用的多路分支工具。

最后需要注意的是,lambda也是可以嵌套的


((lambda x:(lambda y: x+y))(99))(4)   #Prints:103

在序列中映射函数:map

map函数会对一个序列对象中的每个元素应用被传入的函数,并且返回一个包含了所有函数调用结果的一个列表。


counters=[1,2,3,4]
def inc(x):return x+10
list(map(inc,counters))     #[11,12,13,14]

由于map期待传入一个函数,它恰好是lambda最常出现的地方之一。


list(map((lambda x: x+10),counters)) #[11,12,13,14]

函数式编程工具:filter和reduce

在Python内置函数中,map函数是用来进行函数式编程的这类工具中最简单的内置函数代表。所谓的函数式编程就是对序列应用一些函数的工具。例如过滤出一些元素(filter),以及对每对元素都应用函数并运行到最后的结果(reduce)。


list(filter((lambda x: x>0),range(-5,5)))  #[1,2,3,4]

序列中的元素若其返回值是真的话,将会被加入到结果列表中。

reduce接受一个迭代器来处理,但是,它自身不是一个迭代器,它返回一个单个的结果。


from functools import reduce  #Import in 3.0,not in 2.6
reduce((lambda x,y: x+y),[1,2,3,4]) #Return:10
reduce((lambda x,y: x*y),[1,2,3,4]) #Return:24

上面两个reduce调用,计算了一个列表中所有元素的累加和与累积乘积。

--结束END--

本文标题: 总结Python编程中函数的使用要点

本文链接: https://www.lsjlt.com/news/15190.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 函数式编程要点总结
    目录一、函数式概念二、函数与方法三、JDK函数基础1、Lambda表达式2、函数式接口四、Optional类1、Null判断2、Optional应用五、Stream流六、源代码地址一...
    99+
    2024-04-02
  • C++调用Python(混合编程)函数整理总结
    文章目录 C++调用python概述相关官方文档相关函数1.初始化python解释器环境2.调用python脚本的静态简单方式3.动态加载python模块并执行函数3.1不带参数和返回值的举例...
    99+
    2023-09-03
    python c++ 开发语言
  • Python中index函数用法总结
    用途 如果我们需要在序列类型数据(字符串、元组、列表)中查找某个元素并输出对应的索引值,就需要使用到index()方法了。 index()方法 2.1 描述 index() 函数用于从序列s中找出某个值第一个出现时的索引位置。 2 用法...
    99+
    2023-09-03
    python
  • python中dot函数运算过程总结
    目录基本简介1. 向量内积2. 矩阵乘法运算2.1如下单个数的dot函数运算所示:2.2如下一维数组的dot函数运算所示:2.3如下二维数组的dot函数运算所示:2.4如下二维数组与...
    99+
    2024-04-02
  • python中常见函数总结
    目录 1.range()是一个函数 2.Python数学函数 3、Python随机数函数 4、python的字符串内建函数 5.文件操作函数 6、zip函数 7、python内置函数set 8.python中的round()函数 9.字典...
    99+
    2023-09-06
    python 算法 开发语言
  • 总结Python使用过程中的bug
    Python使用过程中的bug 问题: 在vscode中, 使用 Windows PowerShell 运行 conda activate xxx (某个环境)切换环境时报错: ...
    99+
    2024-04-02
  • python编写函数注意事项总结
    1、编写注意 (1)给函数指定描述名。 (2)函数名称只包括小写字母和下划线。 (3)每一个函数都应该包含简要说明其功能的注释,注释应该紧跟在函数定义之后,并且采用文档字符串格式。 ...
    99+
    2024-04-02
  • python保留小数函数的几种使用总结
    目录python保留小数——‘%f’python保留小数——format()函数python保留小数&mdas...
    99+
    2023-02-27
    python保留小数函数 python保留小数
  • Python面向对象编程知识点总结
    这篇文章主要讲解了“Python面向对象编程知识点总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python面向对象编程知识点总结”吧!面向对象编程和函数式编程(面向过程编程)都是程序设...
    99+
    2023-06-16
  • Python的内置函数总结
    这篇文章主要介绍“Python的内置函数总结”,在日常操作中,相信很多人在Python的内置函数总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python的内置函数总结”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-02
  • php中常用的函数总结
    本篇内容主要讲解“php中常用的函数总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中常用的函数总结”吧!1、字符串编码转换  functio...
    99+
    2024-04-02
  • Python lambda函数使用方法深度总结
    目录什么是 Python 中的 Lambda 函数Python 中的 Lambda 函数如何工作Lambda 函数在 Python 中的应用带有 filter() 函数的 Lambd...
    99+
    2024-04-02
  • python函数存储在模块的优点及用法总结
    1、通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。 2、能让你在众多不同的程序中重用函数。 将函数存储在独立文件中后,可与其他程序员共享这些文件而不...
    99+
    2024-04-02
  • C++ 内联函数的优点总结
    内联函数优化方法:将函数代码嵌入调用点,减少函数调用开销,提升性能。优点包括:(1)减少开销;(2)提高性能;(3)代码可读性;(4)优化局部变量。使用 c++++ 中的 inline ...
    99+
    2024-04-16
    c++ 内联函数 代码可读性
  • Python中的魔法函数总结整理
    基本魔法方法 功能 __new__(cls[, ...]) 1. new 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,其他的参数是用来直接传递给 init 方法 3. new 决定是否要使用该 i...
    99+
    2023-01-31
    函数 魔法 Python
  • Python之Numpy 常用函数总结
    目录通用函数常见的简单数组函数一元函数二元函数通用函数 常见的简单数组函数 先看看代码操作: mport numpy as np # # 产生一个数组 arr=np.arange(1...
    99+
    2024-04-02
  • Python中常用最神秘的函数! lambda 函数深度总结!
    什么是 Python 中的 Lambda 函数lambda 函数是一个匿名函数(即,没有名称定义),它可以接受任意数量的参数,但与普通函数不同,它只计算并返回一个表达式。Python 中的 lambda 函数使用以下语法表达:lambda ...
    99+
    2023-05-14
    Python 函数 lambda
  • python Pool常用函数用法总结
    1、说明 apply_async(func[,args[,kwds]):使用非堵塞调用func(并行执行,堵塞方式必须等待上一个过程退出才能执行下一个过程),args是传输给func...
    99+
    2024-04-02
  • 12个Pandas/NumPy中的加速函数使用总结
    目录Numpy 的 6 种高效函数argpartition()allclose()clip()extract()where()percentile()Pandas 数据统计...
    99+
    2024-04-02
  • python中复数的共轭复数知识点总结
    在Python中,复数可以使用内置的complex类来表示。复数由实部和虚部组成,实部和虚部都是浮点数。复数的共轭复数可以通过改变虚...
    99+
    2023-08-15
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作