python lxf

2023-11-01

在python 2.x中

>>> len(u'中文')
2
>>> len('中文')
4
>>> len(u'中文'.encode('utf-8'))
6
>>>

>>> u'ABC'.encode('utf-8')
'ABC'
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'

在utf-8中 一个中文占用三个字节

但是,再次调用add_end()时,结果就不对了:

>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']

很多初学者很疑惑,默认参数是[],但是函数似乎每次都“记住了”上次添加了’END’后的list。

原因解释如下:

Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

所以,定义默认参数要牢记一点:默认参数必须指向不变对象!

要修改上面的例子,我们可以用None这个不变对象来实现:

def add_end(L=None):
if L is None:
L = []
L.append(‘END’)
return L
现在,无论调用多少次,都不会有问题:

>>> add_end()
['END']
>>> add_end()
['END']

汉诺塔:带步数
//将步数存到 可变的list中

def move(n,a,b,c,m=[1]):

    if n==0:

        return

    move(n-1,a,c,b,m )

    print(str(m[0])+"=="+a+'==>'+c)
    m[0]+=1
    move(n-1,b,a,c,m )

( )不可变的list 可重复 有序
[] 可变的list 可重复 有序
{} 可变的set 不可重复 无序
dect {‘Michael’: 95, ‘Bob’: 75, ‘Tracy’: 85} 相当于 java的map 无序 不可重复

遍历:

>>> for a,b in enumerate((1,223,21)):
...     print(a,b)
...
(0, 1)
(1, 223)
(2, 21)
>>>
>>> for i, value in enumerate(['A', 'B', 'C']):
...     print(i, value)
...
0 A
1 B
2 C
>>> for p in(1,2,5,6):
...     print p
...
1
2
5
6
>>> for p in{3,2,5}:
...     print p
...
2
3
5
>>> for p in{3,2,5,3,2,445,2,1}:
...     print p
...
1
2
3
445
5
>>> for a,b in[(1,2),(6,2)]:
...     print(a,b)
...
(1, 2)
(6, 2)
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.items():
...     print(k, '=', v)
...
y = B
x = A
z = C

列表生成式:

>>> [x for x in range(1,10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [x+1 for x in range(1,10)]
[2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> [x*x for x in range(1,10)]
[1, 4, 9, 16, 25, 36, 49, 64, 81]
>>>
还可以使用两层循环,可以生成全排列:

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
>>> [x*x for x in range(1 , 11) if x%2 == 0]  
[4, 16, 36, 64, 100]  
>>>   

生成器:

>>> def fib1(max):
...     n, a, b,c = 0, 0, 1,0
...     while n < max:
...         yield b
...         c=a+b
...         a=b
...         b=c
...         n = n + 1
...        #return "done"  # 用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中:
---结果:
>>> g = fib(6)
>>> while True:
...     try:
...         x = next(g)
...         print('g:', x)
...     except StopIteration as e:
...         print('Generator return value:', e.value)
...         break
...
g: 1
g: 1
g: 2
g: 3
g: 5
g: 8
Generator return value: done
>>> ff=fib1(6)
>>> [x for x in ff]
[1, 1, 2, 3, 5, 8]
>>> ff.next()

想拿到返回值时:

>>> g = fib(6)
>>> while True:
...     try:
...         x = next(g)
...         print('g:', x)
...     except StopIteration as e:
...         print('Generator return value:', e.value)
...         break
...
g: 1
g: 1
g: 2
g: 3
g: 5
g: 8
Generator return value: done

这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

举个简单的例子,定义一个generator,依次返回数字1,3,5:

def odd():
print(‘step 1’)
yield 1
print(‘step 2’)
yield(3)
print(‘step 3’)
yield(5)
调用该generator时,首先要生成一个generator对象,然后用next()函数不断获得下一个返回值:

>>> o = odd()
>>> next(o)
step 1
1
>>> next(o)
step 2
3
>>> next(o)
step 3
5
>>> next(o)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

杨辉三角:

>>> def triangles(max):
...     n=1
...     m=[1]
...     t=[]
...     while n<max+1:
...         if(n==1):
...             m=[1]
...         elif(n==2):
...             m=[1,1]
...         else:
...             t=m[:]
...             for i,x in enumerate(m):
...                 if(i>0):
...                     t[i]=m[i-1]+m[i]
...         t.append(1)
...         m=t
...         yield t
...         n+=1
...
>>> ff=triangles(5)
>>> ff.next()
[1]
>>> ff.next()
[1, 1]
>>> ff.next()
[1, 2, 1]
>>> ff.next()
[1, 3, 3, 1]
>>> ff.next()
[1, 4, 6, 4, 1]
>>> ff.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> ff=triangles(5)
>>> [x for x in ff]
[[1, 1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
>>> n = 0
>>> for t in triangles(10):
...     print(t)
...     n = n + 1
...     if n == 10:
...         break
...
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
>>>

精简 代码:
先用append 在最后面append一个0
巧用N[-1] =0

N = [1]
while True:
    yield N
    N.append(0)
    N = [N[i-1] + N[i] for i in range(len(N))]

最开始是 N【1】
然后 N.append(0) 就变成了 【1,0】
那个循环长度为2
那么第一次 新N【0】=N【-1】+N【0】=1(N【-1】就是倒数最后一个元素)
第二次 新N【1】=N【0】+ N【1】=1
所以此时的N 就是 【1,1】

以此类推 第二排 N=【1,1,0】(循环次数等于长度)

第一次循环 新N【0】=N【-1】+N【0】=1
新N【1】=N【0】+N【1】=2
新 N【2】=N【1】+N【2】=1
嗯,大概就是这意思

还有个不错的:

def triangles():
    temp = [1]
    while True:
        yield temp
        temp = [1, *[temp[i] + temp[i + 1] for i in range(len(temp) - 1)], 1]

triangle = triangles();
for i in range(10):
    print(next(triangle))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python lxf 的相关文章

  • 检测骰子的上侧

    是否可以检测骰子的上面 虽然从顶部看这将是一项简单的任务 但从许多角度来看 可以看到多个侧面 Here is an example of a dice feel free to take your own pictures 您通常想知道自己
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • 将 Poetry 与 PyEnv 一起使用并遇到 Python 版本问题

    我正在使用 WSL2 Ubuntu 我一直在学习使用 Fastapi 进行后端 API 开发的课程 我相信我的 Ubuntu 默认 python 是 3 8 我正在尝试使用 python 3 10 0 进行开发 我做了以下事情 pyenv安
  • 如何将 Google Cloud Storage 中的许多文件设为私有?

    我进行了很多研究 但无法为此提出解决方案 以下是我用来在 GCP 中公开所有文件的代码 def make blob public bucket name blob name Makes a blob publicly accessible
  • 如何生成大型网站的图形站点地图[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想为我的网站生成图形站点地图 据我所知 有两个阶段 抓取网站并分析链接关系 提取树形结构 生成视觉上
  • Visual Studio Code:如何使用参数调试 Python 脚本

    我正在使用 Visual Studio Code 来调试 Python 脚本 下列的本指南 https code visualstudio com docs python debugging 我在中设置了参数launch json file
  • Scrapy Splash,如何处理onclick?

    我正在尝试抓取以下内容 我能够收到响应 但我不知道如何访问以下项目的内部数据以抓取它 我注意到访问这些项目实际上是由 JavaScript 和分页处理的 这种情况我该怎么办 下面是我的代码 import scrapy from scrapy
  • Django 说“id 可能不为 NULL”,但为什么会这样呢?

    我今天要疯了 我只是尝试插入一条新记录 但它返回了 post blogpost id 可能不为 NULL 错误 这是我的模型 class BlogPost models Model title models CharField max le
  • 在Python中清理属于不同语言的文本

    我有一个文本集合 其中的句子要么完全是英语 印地语或马拉地语 每个句子附加的 id 为 0 1 2 分别代表文本的语言 无论任何语言的文本都可能有 HTML 标签 标点符号等 我可以使用下面的代码清理英语句子 import HTMLPars
  • 如何在python mechanize中设置cookie

    向服务器发送请求后 br open http xxxx br select form nr 0 br form MESSAGE 1 2 3 4 5 br submit 我得到了响应标题 其中包含 set cookie Set Cookie
  • Python:绘制甘特图的模块

    有没有一个好的Python绘图模块甘特图 http en wikipedia org wiki Gantt chart 我试过了开罗情节 http linil wordpress com 2008 09 16 cairoplot 11 但它
  • Python 中使用 globals() 的原因?

    Python 中有 globals 函数的原因是什么 它只返回全局变量的字典 这些变量已经是全局的 所以它们可以在任何地方使用 我只是出于好奇而问 试图学习Python def F global x x 1 def G print glob
  • 使用 os.forkpty() 创建一个伪终端以 ssh 到远程服务器并与其通信

    我正在尝试编写一个 python 脚本 它可以 ssh 到远程服务器 并可以从 python 客户端执行 ls cd 等简单命令 但是 在成功 ssh 到服务器后 我无法读取伪终端的输出 任何人都可以在这里帮助我 以便我可以在服务器上执行一
  • Python Tkinter 网格复选框

    我想知道是否有一种简单的方法可以使用 Tkinter 创建复选框网格 我正在尝试制作一个由 10 行和 10 列 即 100 个复选框 组成的网格 以便每行只能选择两个复选框 编辑 我正在使用带有spyder的python 2 7 到目前为
  • 在 matplotlib 中将 3D 背景更改为黑色

    我在将 3D 图表的背景更改为黑色时遇到问题 这是我当前的代码 当我将facecolor设置为黑色时 它会将图表内部更改为灰色 这不是我想要的 fig plt figure fig set size inches 10 10 ax plt
  • 如何输入可变的默认参数

    Python 中处理可变默认参数的方法是将它们设置为无 https stackoverflow com a 366430 5049813 例如 def foo bar None bar if bar is None else bar ret
  • 具有行业级约束的 SciPy 投资组合优化

    尝试在这里优化投资组合权重分配 通过限制风险来最大化我的回报函数 我可以毫无问题地通过简单的约束 所有权重之和等于 1 找到产生我的回报函数的优化权重 并做出另一个约束 即我的总风险低于目标风险 我的问题是 如何为每个组添加行业权重界限 我
  • 重写 PyGObject 中的虚拟方法

    我正在尝试实施高宽几何管理 http developer gnome org gtk3 3 2 GtkWidget html geometry management在 GTK 和 Python 中用于我的自定义小部件 我的小部件是来自的子类
  • scikit-learn kmeans 聚类的初始质心

    如果我已经有一个可以作为初始质心的 numpy 数组 我该如何正确初始化 kmeans 算法 我正在使用 scikit learn Kmeans 类 这个帖子 具有选定初始中心的 k 均值 https stackoverflow com q
  • AES 在 cryptojs 中加密并在 python Crypto.Cipher 中解密

    使用 js CryptoJS 加密并使用 python crypto Cipher 解密时出现问题 这是我在js中的实现 附加 iv 与加密消息并使用 base64 进行编码

随机推荐

  • 企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图

    功能模块 待办消息 招标公告 中标公告 信息发布 描述 全过程数字化采购管理 打造从供应商管理到采购招投标 采购合同 采购执行的全过程数字化管理 通供应商门户具备内外协同的能力 为外部供应商集中推送展示与其相关的所有采购业务信息 历史合作
  • 20.Python中Main 函数

    Python编程的术与道 Python语言进阶 视频课程 Python编程的术与道 Python语言进阶 视频课程链接 https edu csdn net course detail 28618 main函数 main函数就像程序的入口点
  • 腾讯云服务器安装宝塔面板教程(一键安装图文教程)建站准备

    腾讯云如何安装宝塔面板 腾讯云服务器安装宝塔面板图文教程 塔面板是一款服务器管理软件 用户可以通过Web端轻松管理服务器 提升运维效率 例如 创建管理网站 FTP 数据库 拥有可视化文件管理器 可视化软件管理器 可视化CPU 内存 流量监控
  • Vue3学习使用创建自定义指令

    简言 除了 Vue 内置的一系列指令 比如 v model 或 v show 之外 Vue 还允许你注册自定义的指令 Custom Directives 官网自定义指令 我们已经介绍了两种在 Vue 中重用代码的方式 组件和组合式函数 组件
  • 决策树和随机森林

    回归模型 1 信息熵 1 熵 2 联合熵 3 条件熵 4 互信息 2 决策树学习算法 1 决策树 2 决策树生成算法 3 信息增益 4 信息增益率 5 Gini系数 6 ID3算法举例 7 三种决策树学习算法 8 回归树 3 决策树的评价
  • c语言数组所含字节数,(C语言)数组所占字节怎么算?

    在C语言中 可以使用sizeof操作符来计算数组所占字节 sizeof操作符是专门用于检测类型或变量或数组在内存中所占有的空间 字节数 的 用它可以直接检测出数组在内存占有的字节数 C语言中有一个专门用于检测类型或变量或数组在内存中所占有的
  • c++之复杂类型作为unordered_map的键值

    unordered map unordered set 我们知道c 中有unordered map和unordered set这两个数据结构 其内部实现是哈希表 这就要求作为键值的类型必须是可哈希的 比如常见的数据类型int string等
  • group by以后如何count?

    原文 https www cnblogs com jimleestone p sql 001 html 当表数据量很庞大 需要使用sql的limit功能来分页时 需要发送两条sql才能实现分页 SELECT FROM tablename W
  • 点击商品进入详情页面

    需求 点击商品 进入对应商品的详情页面 实现 获取商品的Id运用 a 标签使用Url参数 将商品Id发送到Servlet 看url地址就知道发送请求时将商品id发送出去了 Html代码 a
  • sqli-lab18和22关详解

    Less 18 头信息 uagent 基于错误 字符型 对 uname 和 passwd 进行了 check input 函数的处理 所以我们在输入 uname 和 passwd 上 进行注入是不行的 但是在代码中 我们看到了 insert
  • C++实现的文本字符串替换功能

    这是我最近刚写的一个文本文件中字符串替换的源代码 实现的功能是输入要读写的文件名路径 然后输入要查找的字符串A和替换字符串B 执行结果是将文件中的所有字符串A替换为字符串B 注 此源代码有许多瑕疵和效率低下的地方 还望大家多多指教 勿见笑
  • phpStudy 出现 Not Found nginx/1.11.5

    配置域名访问出现 打开配置文件 如图如图代码 try files uri uri index php args 保存重新启动
  • VMware 15.1解决WIN10 1903复制文件到虚拟机卡死问题

    文章目录 WIN10升级后使用VMware拖拽文件到虚拟机卡死 原因 解决办法 结果 WIN10升级后使用VMware拖拽文件到虚拟机卡死 原因 Win10版本1903 低于15 1版本的VMware 复制文件会卡死 解决办法 升级到VMw
  • RFID叉车读写器在智能仓库收发货环节中的应用-铨顺宏

    RFID叉车读写器在智能仓库收发货环节中的应用 一 RFID技术与难点 在RFID智能仓库应用解决方案中 收货和发货两个作业环节都存在着RFID叉车读写器采集和门式采集装置 Portal 采集两种可选择方案 我们之所以推荐选用RFID叉车读
  • 【Vue学习】使用 “scss” 时报错‘:vue-style-loader css-loader?...‘

    Vue学习 使用 scss 时报错 vue style loader css loader 错误信息 处理办法 参数配置 后续发展 新错误提示 第一次尝试解决 失败 再次尝试解决 成功 记录Vue系统学习的轨迹 2021 11 05 故事背
  • 冲刺训练Python长达6个月,整整180天换来2年经验加成+高薪工作

    1 前言 最新数据显示python在2022年前3个月企业需要增长47 平均薪资达17 5K 其中20k 30k工资达29 9 应届生 学历不限 不限经验的也可占一席之地 今天 我很荣幸能够作为一个转专业0基础自学Python并且成功上岸的
  • Spring MVC FreeMarker模板引擎与动态页面静态化全解

    目录 一 FreeMarker简介 二 第一个FreeMark示例 2 1 新建一个Maven项目 2 2 添加依赖 2 3 添加存放模板的文件夹 2 4 添加模板 2 5 解析模板 2 6 运行结果 三 动态页面静态化 3 1 动态页面静
  • flex 布局转 class 类名实现

    目录 代码 测试 flex wrap属性 nowrap flex wrap属性 wrap align items属性 baseline align content属性 flex end justify content属性 space aro
  • java double.compare_Java Double compare()方法

    Java Double compare 方法 java lang Double compare 方法比较两个指定的double值 返回整数值符号是相同的 这将通过调用被返回整数 new Double d1 compareTo new Dou
  • python lxf

    在python 2 x中 gt gt gt len u 中文 2 gt gt gt len 中文 4 gt gt gt len u 中文 encode utf 8 6 gt gt gt gt gt gt u ABC encode utf 8