由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - python的scope机制 非常垃圾
相关主题
python没有first class function吧?请教C数组定义问题
Python为啥Lexical Scoping不适用于import?python 高手看过来
估计javascript 最初设计时就基本没考虑好scope问题perl debugger 请较大虾们
请问这个C++程序有什么问题吗刚看完类这一章,有些大小问题,请指教,谢谢
Javascript的Scope问题问个a=b 的问题
python用全局变量能节省程序执行时间吗?perl question
FP有的,Python都有!some C++ interview questions
Help!! variable scope ????IDL一问
相关话题的讨论汇总
话题: global话题: python话题: 函数话题: variables话题: variable
进入Programming版参与讨论
1 (共1页)
L****8
发帖数: 3938
1
def f():
x=y
return x
#end
y=20;
f()
这样 y居然可以当做全局变量传到函数f()里面
c********1
发帖数: 5269
2
C c++ c# java 都这样传的。

【在 L****8 的大作中提到】
: def f():
: x=y
: return x
: #end
: y=20;
: f()
: 这样 y居然可以当做全局变量传到函数f()里面

m*****n
发帖数: 3575
3
这是为了让你调用函数时,可以借用全局的参数,而不用再输一遍
这叫lexical scoping,高级语言都用

【在 L****8 的大作中提到】
: def f():
: x=y
: return x
: #end
: y=20;
: f()
: 这样 y居然可以当做全局变量传到函数f()里面

L****8
发帖数: 3938
4
我说的是 python 没有关键词来明确定义global variable

【在 c********1 的大作中提到】
: C c++ c# java 都这样传的。
L****8
发帖数: 3938
5
我说的是 python 没有关键词来明确定义global variable

【在 m*****n 的大作中提到】
: 这是为了让你调用函数时,可以借用全局的参数,而不用再输一遍
: 这叫lexical scoping,高级语言都用

l*********s
发帖数: 5409
6
You are PHP programmer? C family languages usually do not have this keyword
(btw, Python does have this, but it is rarely useful)

【在 L****8 的大作中提到】
: 我说的是 python 没有关键词来明确定义global variable
c********1
发帖数: 5269
7
What are the rules for local and global variables in Python?
In Python, variables that are only referenced inside a function are
implicitly global. If a variable is assigned a value anywhere within the
function’s body, it’s assumed to be a local unless explicitly declared as
global.
Though a bit surprising at first, a moment’s consideration explains this.
On one hand, requiring global for assigned variables provides a bar against
unintended side-effects. On the other hand, if global was required for all
global references, you’d be using global all the time. You’d have to
declare as global every reference to a built-in function or to a component
of an imported module. This clutter would defeat the usefulness of the
global declaration for identifying side-effects.

【在 L****8 的大作中提到】
: 我说的是 python 没有关键词来明确定义global variable
w********l
发帖数: 87
8
你可以声明nonlocal y啊,谁也没逼你省略
m*****n
发帖数: 3575
9
在global里当然用不着专门定义global variable
在函数里可以用global或nonlocal来定义全局的或函数向外一层的变量
def f():
global a
a = 10
f()
a

【在 L****8 的大作中提到】
: 我说的是 python 没有关键词来明确定义global variable
h**********c
发帖数: 4120
10
如果原贴者的程序也能编译执行的话,说明这种语言容易产生歧义是很obvious的。

【在 m*****n 的大作中提到】
: 在global里当然用不着专门定义global variable
: 在函数里可以用global或nonlocal来定义全局的或函数向外一层的变量
: def f():
: global a
: a = 10
: f()
: a

相关主题
python用全局变量能节省程序执行时间吗?请教C数组定义问题
FP有的,Python都有!python 高手看过来
Help!! variable scope ????perl debugger 请较大虾们
进入Programming版参与讨论
m*****n
发帖数: 3575
11
这叫lexical scoping
其原则就是在这层堆栈如果找不到需要调用的变量,就自动会在它外层去找。
这是对象式编程的基本功能,如果你对此诧异,是你从来只进行函数式编程。

【在 h**********c 的大作中提到】
: 如果原贴者的程序也能编译执行的话,说明这种语言容易产生歧义是很obvious的。
h**********c
发帖数: 4120
12
你看VM,kernel的code,上来就是七八层循环,你这个东西对实现程序逻辑提高可读性
有什么帮助,就是先天缺陷,懒得修吧?
那个不见得比prolog高到哪里去

【在 m*****n 的大作中提到】
: 这叫lexical scoping
: 其原则就是在这层堆栈如果找不到需要调用的变量,就自动会在它外层去找。
: 这是对象式编程的基本功能,如果你对此诧异,是你从来只进行函数式编程。

m*****n
发帖数: 3575
13
恰恰相反
应广大使用者反馈
python从3.5版之后又加入了更细分的global,即nonlocal
python从来不是懒得修的主,2变3不兼容这么彻底的事都做了,把lexical scoping的
功能增加而不是去除,是有民意基础的。

【在 h**********c 的大作中提到】
: 你看VM,kernel的code,上来就是七八层循环,你这个东西对实现程序逻辑提高可读性
: 有什么帮助,就是先天缺陷,懒得修吧?
: 那个不见得比prolog高到哪里去

m*****n
发帖数: 3575
14
可读性和易写性两个是天然矛盾的。
如果碰上两者冲突,程序语言选哪边都无可厚非。
如果函数多层嵌套,写代码时不用区分引用的变量在哪层,是好写的。
这也方便定义常量,就是整篇代码都不改的变量。标注这种常量的惯例是在开头写,且
常量名用大写。
试想每次都写
global.PI
有多么烦人

【在 h**********c 的大作中提到】
: 你看VM,kernel的code,上来就是七八层循环,你这个东西对实现程序逻辑提高可读性
: 有什么帮助,就是先天缺陷,懒得修吧?
: 那个不见得比prolog高到哪里去

g****t
发帖数: 31659
15
我记得静态scope的意思是不由程序的当时状态决定scope
似乎和函数编程与否没有直接关系
不一定对


: 这叫lexical scoping

: 其原则就是在这层堆栈如果找不到需要调用的变量,就自动会在它外层去找。

: 这是对象式编程的基本功能,如果你对此诧异,是你从来只进行函数式编程。



【在 m*****n 的大作中提到】
: 可读性和易写性两个是天然矛盾的。
: 如果碰上两者冲突,程序语言选哪边都无可厚非。
: 如果函数多层嵌套,写代码时不用区分引用的变量在哪层,是好写的。
: 这也方便定义常量,就是整篇代码都不改的变量。标注这种常量的惯例是在开头写,且
: 常量名用大写。
: 试想每次都写
: global.PI
: 有多么烦人

m*****n
发帖数: 3575
16
我编过的一个服务器程序,有个功能就是维持在线用户的记录,
当用户下线或者上线时,自动调个函数刷一下记录,以使它保持最新。
这个至少是reactive编程的基本思路,所有的函数都围绕着global variable转,
它可以实现最初级的人工智能,就是让程序像个活人一样盯着,
而不是函数式那种用完了就结束了,只有工具功能。

【在 g****t 的大作中提到】
: 我记得静态scope的意思是不由程序的当时状态决定scope
: 似乎和函数编程与否没有直接关系
: 不一定对
:
:
: 这叫lexical scoping
:
: 其原则就是在这层堆栈如果找不到需要调用的变量,就自动会在它外层去找。
:
: 这是对象式编程的基本功能,如果你对此诧异,是你从来只进行函数式编程。
:

h**********c
发帖数: 4120
17
等你python,把julian calendar 实现了在来秀吧,
还没问你压缩的问题呢,JVM的zip作者是个老中

【在 m*****n 的大作中提到】
: 可读性和易写性两个是天然矛盾的。
: 如果碰上两者冲突,程序语言选哪边都无可厚非。
: 如果函数多层嵌套,写代码时不用区分引用的变量在哪层,是好写的。
: 这也方便定义常量,就是整篇代码都不改的变量。标注这种常量的惯例是在开头写,且
: 常量名用大写。
: 试想每次都写
: global.PI
: 有多么烦人

m*****n
发帖数: 3575
18
你这就是诉诸个人攻击了

【在 h**********c 的大作中提到】
: 等你python,把julian calendar 实现了在来秀吧,
: 还没问你压缩的问题呢,JVM的zip作者是个老中

h**********c
发帖数: 4120
19
reactive 是指render和dom的同步吧,你确信你总是能拿到最新的?“以使它保持最新
。”what you see is what it was.

【在 m*****n 的大作中提到】
: 我编过的一个服务器程序,有个功能就是维持在线用户的记录,
: 当用户下线或者上线时,自动调个函数刷一下记录,以使它保持最新。
: 这个至少是reactive编程的基本思路,所有的函数都围绕着global variable转,
: 它可以实现最初级的人工智能,就是让程序像个活人一样盯着,
: 而不是函数式那种用完了就结束了,只有工具功能。

m*****n
发帖数: 3575
20
我想起来了,是
event-driven program
这种程序一般结构是
建立全局变量
定义handler事件处理工具
开始死循环,监视事件
事件发生后,调用处理工具
处理并刷新全局变量
图形交互界面、网络服务器、操作系统等都是这个架构

【在 h**********c 的大作中提到】
: reactive 是指render和dom的同步吧,你确信你总是能拿到最新的?“以使它保持最新
: 。”what you see is what it was.

相关主题
刚看完类这一章,有些大小问题,请指教,谢谢some C++ interview questions
问个a=b 的问题IDL一问
perl question谁熟dotnet 的webservice?
进入Programming版参与讨论
h**********c
发帖数: 4120
21
等你python,把julian calendar 实现了在来秀吧,
还没问你压缩的问题呢,JVM的zip作者是个老中
你定义下个人攻击?我人肉你了?我攻击你个人缺陷了?
你们python 爱好者,写出个julian calendar库,拿来给我看看,有什么个人攻击?

【在 h**********c 的大作中提到】
: 等你python,把julian calendar 实现了在来秀吧,
: 还没问你压缩的问题呢,JVM的zip作者是个老中

m*****n
发帖数: 3575
22
我干嘛要实现罗马日历?
我就是用python作算法服务器,相对其它替代者简单好用,这就够了
我还想用过R,但是兴冲冲学了半天最新的那个框架,只能在RStudio里单机用,伺服就
要缴费
那还是回归python
而且公司又没给我编程单付费,我一边开发算法一边用python给他们摞代码,够敬业了。
谁有空学Java,C#,C++?

【在 h**********c 的大作中提到】
: 等你python,把julian calendar 实现了在来秀吧,
: 还没问你压缩的问题呢,JVM的zip作者是个老中
: 你定义下个人攻击?我人肉你了?我攻击你个人缺陷了?
: 你们python 爱好者,写出个julian calendar库,拿来给我看看,有什么个人攻击?

h**********c
发帖数: 4120
23
原文作者说的声明变量不用关键字,就可以编译,写calendar这么复杂的逻辑,不是一
碗拉面

了。

【在 m*****n 的大作中提到】
: 我干嘛要实现罗马日历?
: 我就是用python作算法服务器,相对其它替代者简单好用,这就够了
: 我还想用过R,但是兴冲冲学了半天最新的那个框架,只能在RStudio里单机用,伺服就
: 要缴费
: 那还是回归python
: 而且公司又没给我编程单付费,我一边开发算法一边用python给他们摞代码,够敬业了。
: 谁有空学Java,C#,C++?

s*****l
发帖数: 7106
24
python是比较垃圾
不过这不是好例子
c****f
发帖数: 1102
25

一般这个就是交互在用吧 其实callback真的挺反人类的
linux网络服务器是用一个叫epoll的system call 属于kernel给你信号 你只要等就可
以 不需要监视
操作系统用的是driver/hardware interrupt signal好像
后2两者都不是一个for true来做的 死循环一般倒是非异步的用的比较多。。
比如一个routine专门用来监视其他事件

【在 m*****n 的大作中提到】
: 我想起来了,是
: event-driven program
: 这种程序一般结构是
: 建立全局变量
: 定义handler事件处理工具
: 开始死循环,监视事件
: 事件发生后,调用处理工具
: 处理并刷新全局变量
: 图形交互界面、网络服务器、操作系统等都是这个架构

m*****n
发帖数: 3575
26
epoll自己就是监视
监视完了还不是得放在死循环里?
如果不死循环,这个事件给处理完了,程序就自动终止了
长期伺服的功能本来就要求死循环,无论监视是谁在管

【在 c****f 的大作中提到】
:
: 一般这个就是交互在用吧 其实callback真的挺反人类的
: linux网络服务器是用一个叫epoll的system call 属于kernel给你信号 你只要等就可
: 以 不需要监视
: 操作系统用的是driver/hardware interrupt signal好像
: 后2两者都不是一个for true来做的 死循环一般倒是非异步的用的比较多。。
: 比如一个routine专门用来监视其他事件

H**r
发帖数: 10015
27
你是大一新生?

【在 m*****n 的大作中提到】
: 我想起来了,是
: event-driven program
: 这种程序一般结构是
: 建立全局变量
: 定义handler事件处理工具
: 开始死循环,监视事件
: 事件发生后,调用处理工具
: 处理并刷新全局变量
: 图形交互界面、网络服务器、操作系统等都是这个架构

1 (共1页)
进入Programming版参与讨论
相关主题
IDL一问Javascript的Scope问题
谁熟dotnet 的webservice?python用全局变量能节省程序执行时间吗?
C语言重复定义问题FP有的,Python都有!
[合集] 请教: 模板类之继承的一个小问题Help!! variable scope ????
python没有first class function吧?请教C数组定义问题
Python为啥Lexical Scoping不适用于import?python 高手看过来
估计javascript 最初设计时就基本没考虑好scope问题perl debugger 请较大虾们
请问这个C++程序有什么问题吗刚看完类这一章,有些大小问题,请指教,谢谢
相关话题的讨论汇总
话题: global话题: python话题: 函数话题: variables话题: variable