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
|
|
|
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.
|
|
|
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 | |
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事件处理工具 : 开始死循环,监视事件 : 事件发生后,调用处理工具 : 处理并刷新全局变量 : 图形交互界面、网络服务器、操作系统等都是这个架构
|