V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  thautwarm  ›  全部回复第 9 页 / 共 9 页
回复总数  166
1  2  3  4  5  6  7  8  9  
2018-01-09 04:18:28 +08:00
回复了 sadscv 创建的主题 Python 代码中包含的中文全为乱码,编码问题求请教!
如果你文本数量比较大,可以用 chardet 这个库来查编码,查到之后直接用对应 decode。文本少的话错误率很高。

已知编码的解码,讲道理可能非常简单,比如下面这个。当然,下面这个要是能直接解决你的问题,你就自己找个缝钻了好了。。
with open(f1name, 'r', encoding=当前编码) as f1, open(f2name, 'w', encoding=目标编码) as f2:
f2.write(f1.read())
2018-01-09 01:22:51 +08:00
回复了 sadscv 创建的主题 Python 代码中包含的中文全为乱码,编码问题求请教!
请不要在任何过程里使用 gbk,谢谢。无脑 utf8 的这一年,感觉很满足。
@xpresslink 不一定呀,也有很多人只是想日常写代码能够写得舒服。。

说到 lisp... P.S: 我一直觉得 lisp 只是宏比较强能容易实现 fp 的组件罢了,haskell-like 才是真 fp...
@xpresslink fn.py 太丑陋了,实现也太裸。我以前和那个作者在 mailing list 有点不愉快。有些东西(特指 fp)没有语法糖支持,根本就没那个感觉。
@guyskk0x0 还很慢,只能和普通递归比。主要动态模式匹配太耗时间。我这边 tco 是和 pattern matching 绑定的,现阶段只能说让函数栈深度最大不超过 3,但是优化还不完全。。
2018-01-07 13:22:27 +08:00
回复了 cnaol 创建的主题 Python [ Python ]求教大佬关于 locals()动态生成变量
为什么会 NameError,这是符号表加载的问题。

locals()设置新 name 是无意义的,虽然每一次在一个作用域拿出的 locals()都是同一个引用,但是导入符号并非直接使用 locals(),也就是说你对它的修改,如果是修改 mutable 对象的内部还好,直接改 immutable 自然是无效的。

Python 确定从哪里加载符号,代码编译到字节码时就确定了。既然编译时找不到 lis3 的定义,自然就认为它来自 globals()里面。而你在代码解释时才修改 locals(),那么犯错的原因,如下有俩

1. locals()不是 func 作用域加载符号所用的符号表
2. lis3 被预先认为是定义在 globals()里的。



P.S 关于 locals()的行为。
locals()其中一部分类似于一个作用域符号管理结构 S 上的 view。另一部分,locals()应该也有一个"固有成分",当你对 locals()进行__setitem__操作,并不是没有起效果,而是因为 locals 的__getitem__是有限搜索 S 的 item,没有的话再搜索 locals()的"固有成分"。

def g(x=20):
d = locals()
locals()['x'] = 10
print(locals()['x'])
print(d is locals())
g()
# => 20
# True

def g():
locals()['x'] = 10
print(locals()['x'])
g()
# 10

以上。。
1  2  3  4  5  6  7  8  9  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5717 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 01:47 · PVG 09:47 · LAX 17:47 · JFK 20:47
Developed with CodeLauncher
♥ Do have faith in what you're doing.