首页   注册   登录

superrichman

V2EX 第 113198 号会员,加入于 2015-04-24 15:57:30 +08:00
今日活跃度排名 3714
superrichman 最近回复了
15 小时 0 分钟前
回复了 granpa 创建的主题 分享创造 周末弄了一个小程序,#彩虹屁分享#
这毒鸡汤换配方了?
15 小时 4 分钟前
回复了 wszbdyyy 创建的主题 分享创造 正式分享一个自己写的一个导航,曹操导航。
我感觉这网站随时都会被举报啊, 内容审查通不过
15 小时 16 分钟前
回复了 zs8861 创建的主题 程序员 请问在 MacOS 上如何使用 Discord 软件?
支持的, 设置成全局代理, 启动登陆完就可以关了
15 小时 42 分钟前
回复了 guangjun 创建的主题 程序员 请教个好像是“黑产”的问题
以前经常被各种扫,后来把 http 禁掉开 https,然后 nginx 加上了 mitchellkrogza/nginx-ultimate-bad-bot-blocker,基本就没看到扫描的了
上次在这里讨论过
https://www.v2ex.com/t/619626#reply8
1 天前
回复了 Harlaus 创建的主题 Python 可以将 asyncio 与 celery 一起使用吗?
没有试过 celery, 我用 apscheduler 的 AsyncIOScheduler 可以和 asyncio 一起使用
1 天前
回复了 frostming 创建的主题 Python 无需额外进程的 Flask 定时任务扩展
已 star, 原来是位大佬, follow 一下表示尊敬.
@NeinChn 真的可以诶, 好神奇. 用 print 的时候能读到外层的 cals, 并且之后能在 lcoals 能看到, 但是要对 cals 操作就抛异常. emmm... 这是把外层的不可对象当成了只读的数据? 有点迷.
@NeinChn 不, 看不到的, 我试过了

def counter():
cnt = 0
name = 'counter'
cals = (2, 3, 4, 5, 6)
print('outer locals', locals())

def add_one():
print('inner locals', locals())
return add_one

a = counter()
a()

输出结果

outer locals {'cnt': 0, 'name': 'counter', 'cals': (2, 3, 4, 5, 6)}
inner locals {}
@lucahhai list 并不是全局的
我用 globals()和 locals()把外层函数和内层函数的全局变量和本地变量都打出来看了一下.

内层函数可以直接访问到外层的可变对象(list dict set 等), 但是无法访问到不可变对象(str int tuple 等). 还有就是如果外层函数有参数(比如 def counter(num) 的 num), 内层函数也可以访问到这些参数.

从测试结果上看, 外层函数的参数和可变对象会自动变成内层函数的本地变量. 如果要在内层函数访问外层的不可变对象, 需要用 nonlocal 进行修饰, 或者把不可变对象存到可变对象里进行间接的传递(就像第二个函数一样, 不是直接传 0 而是把 0 放进 list).
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4480 人在线   最高记录 5043   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 14ms · UTC 02:10 · PVG 10:10 · LAX 18:10 · JFK 21:10
♥ Do have faith in what you're doing.