百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

python散装笔记——33: 函数(3)

itomcoil 2025-03-05 17:10 9 浏览

8: 闭包

Python 中的闭包是通过函数调用创建的。在这里,对 makeInc 的调用为 x 创建了一个绑定,该绑定在函数 inc 中被引用。对 makeInc 的每次调用都会创建该函数的一个新实例,但每个实例都有一个指向 x 的不同绑定的链接。

def makeInc(x):
  def inc(y):
    # x is "attached" in the definition of inc
    return y + x

  return inc

incOne = makeInc(1)
incFive = makeInc(5)

incOne(5) # returns 6
incFive(5) # returns 10


请注意,在普通闭包中,被括弧函数完全继承其外层环境中的所有变量,而在这种结构中,被括弧函数对继承变量只有读取权限,而不能对它们赋值

def makeInc(x):
  def inc(y):
    # incrementing x is not allowed
    x += y
    return x
  return inc

incOne = makeInc(1)
incOne(5) # UnboundLocalError: local variable 'x' referenced before assignment

Python 3 提供了非局部语句(非局部变量),用于实现嵌套函数的完全闭包。

def makeInc(x):
  def inc(y):
    nonlocal x
    # now assigning a value to x is allowed
    x += y
    return x
  return inc

incOne = makeInc(1)
incOne(5) # returns 6

9: 强制使用命名参数

在函数签名中第一个星号之后指定的所有参数都只有关键字。

def f(*a, b):
  pass

f(1, 2, 3)
# TypeError: f() missing 1 required keyword-only argument: 'b'

在 Python 3 中,可以在函数签名中加上一个星号,以确保其余参数只能使用关键字参数传递。

def f(a, b, *, c):
  pass

f(1, 2, 3)
# TypeError: f() takes 2 positional arguments but 3 were given

f(1, 2, c=3)
# 没有报错

10: 嵌套函数

python 中的函数是一级对象。它们可以在任何作用域中定义

def fibonacci(n):
  def step(a,b):
    return b, a+b
  a, b = 0, 1
  for i in range(n):
    a, b = step(a, b)
  return a

函数捕获其外层作用域,可以像任何其他类型的对象一样进行传递

def make_adder(n):
  def adder(x):
    return n + x
  return adder
add5 = make_adder(5)
add6 = make_adder(6)
add5(10)
#Out: 15
add6(10)
#Out: 16

def repeatedly_apply(func, n, x):
  for i in range(n):
    x = func(x)
  return x

repeatedly_apply(add5, 5, 1)
#Out: 26

11: 递归限制

递归的深度是有限制的,这取决于 Python 的实现。当达到限制时,将引发 RuntimeError 异常:

def cursing(depth):
  try:
    cursing(depth + 1) # actually, re-cursing
  except RuntimeError as RE:
    print('I recursed {} times!'.format(depth))

cursing(0)
# Out: I recursed 1083 times!

可以使用 sys.setrecursionlimit(limit) 更改递归深度限制,并通过 sys.getrecursionlimit() 检查该限制。

import sys
sys.setrecursionlimit(2000)
cursing(0)
# Out: I recursed 1997 times!

从 Python 3.5 开始,异常是一个从 RuntimeError 派生的 RecursionError

12: 使用分配变量的递归 Lambda

创建递归 lambda 函数的一种方法是将函数赋值给一个变量,然后在函数本身中引用该变量。一个常见的例子是递归计算一个数字的阶乘,如以下代码所示:

lambda_factorial = lambda i:1 if i==0 else i*lambda_factorial(i-1)
print(lambda_factorial(4)) # 4 * 3 * 2 * 1 = 12 * 2 = 24

代码说明

lambda 函数通过变量赋值传递一个值 (4),并对其进行求值,如果值为 0 则返回 1,否则返回当前值 (i) * lambda 函数对值 - 1 (i-1)的另一次计算。这个过程一直持续到传递的值减为 0(return 1)为止。这个过程可以形象地描述为

相关推荐

python unittest 基本用法(python pytest)

unittest的使用分为6个步骤:1.导入unittest模块2.定义测试类,父类为unittest.TestCase可继承unittest.TestCase的方法,如setUp和tearDown方...

python中如何利用递归原理找出文件夹中的全部文件

在python中要想查看文件夹中的文件,需要先导入os模块,在python中导入os模块后,定义一个空的列表,用来接收返回的文件,importoslist1=[]接下来,我们定义一个函数,这个函...

Python读取配置文件(config.ini),写入配置文件

一、读取配置文件我的目录如下,在config下有一个config.ini配置文件配置文件内容#定义config分组[config]platformName=AndroidappPackage...

python 文件操作(python文件操作添加下一行)

在Python中,可以使用内置的文件操作函数和方法来进行文件的读取、写入和操作。下面是一些常见的文件操作方法:打开文件:使用open()函数来打开一个文件,并返回一个文件对象。你需要指定文件的路径和打...

失业程序员复习python笔记——excel读写处理

Excel是我们在工作中用到的最频繁的软件之一,它有着强大的计算能力和便捷的图表功能。今天记录一下怎么用python操作excel文件安装excel扩展库如果要用Python操作Excel文...

Python的文件处理(python文件处理方法)

一、文件处理的流程1.打开文件,得到文件句柄并赋值给一个变量2.通过句柄对文件进行操作3.关闭文件示例:d=open('abc')data1=d.read()pri...

Python读写docx文件(python如何读写文件)

Python读写docx文件Python读写word文档有现成的库可以处理pipinstallpython-docx安装一下。https://python-docx.readthedocs.io/...

(简单入门易懂)实例详解:Python csv文件的读写操作

今天为大家带来的内容是:简单入门易懂的是咧详解:Pythoncsv文件的读写操作本文内容主要介绍了Pythoncsv文件的读写操作实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...

Python3查看文件是否存在,以及读、写与执行的属性

目录技术背景代码实现测试分析总结概要版权声明技术背景在使用python对系统文件进行操作的项目中,经常需要用到对本地文件的存在和读写进行判断的操作。最常用的比如os.exists函数,可以很方便的判断...

Python常用文件操作库使用详解(python中文件操作的例子)

Python生态系统提供了丰富的文件操作库,可以处理各种复杂的文件操作需求。本教程将介绍Python中最常用的文件操作库及其实际应用。一、标准库核心模块1.1os模块-操作系统接口主要功能:文件...

python入门 输入与输出——读和写文件

以下是Python文件读写的入门指南,包含基础操作、安全写法及实用技巧:一、文件操作基础步骤打开文件→读写操作→关闭文件(务必确保最后关闭文件,避免资源泄露)二、文件读取1.基本读取#方法...

第41讲 基本文件操作(和猫妹学Python)

小朋友们好,大朋友们好!我们今天基本文件操作,要学习的内容如下:什么是文件,什么是目录创建和打开文件关闭文件with语句打开文件写入文件内容读取文件什么是文件,什么是目录文件是计算机存储信息的一种形式...

Python自动化办公自学笔记(八)文件操作

一、文件使用在Python里面,文件分为两种类型,一种是文本文件,后缀名为“.txt”,由单一特定编码的字符组成;另一种是二进制文件,由比特0和比特1组成。Python对以上两种文件都有统一的操作步骤...

python 利用python读取DOC文件(python读取word数据)

近期公司需要处理一批DOC文件,而在windows系统中,python没有模块能直接读取doc文件。需要先把doc文件批量转成docx文件,再读取操作。linux系统python有模块可直接读取doc...

Python学不会来打我(83)python读写文件操作总结

python读写文件操作其实是一个很复杂的过程,在python代码中给的内建函数open()、read()、write()等操作起来非常简单,但是这些方法的底层却是很复杂的,这里面涉及到一些操作系统的...