作者zuso ( )
看板Python
标题[问题] 判断布林值的问题
时间Thu Jan 18 09:45:43 2018
Hi 各位板友,最近刚开始碰Python,遇上了一个问题,实在不懂为甚麽,恳请各位指点
def abc():
x = False
y = 0
if x is True:
print('Working, Please try again')
else:
if y == 0 :
x = True
print('Start Work')
abc()
abc()
#Start Work
#Start Work
不懂为甚麽第二个回应依旧是Start Work,正常来说应该在第一个Start Work运行後就
赋值True给X,第二次应该是Working, Please try again,可是为甚麽会这样子呢?
恳请各位给予指点,谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.217.156.198
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1516239946.A.C9C.html
1F:推 XperiaZ6C: 因为你x不是全域变数啊…01/18 09:50
2F:→ XperiaZ6C: 你abc()的第一行就把x设为False,他当然不会去true01/18 09:51
我有尝试把x y放在方法外,然後第二个判断
式中return x出去,一样的结果
3F:→ vi000246: 放在方法外应该就正确了 贴程式码吧01/18 09:56
x = False
y = 0
def abc(x,y):
if x is True:
print('Working, Please try again.')
else:
if y == 0 :
x = True
print('Start Work')
return x
abc(x,y)
abc(x,y)
#Start Work
#Start Work
return用法可能有误,但删掉的话结果还是一样的
※ 编辑: zuso (180.217.156.198), 01/18/2018 10:02:11
4F:推 Sunal: 关键字:global 01/18 10:53
5F:推 iphone2003: 小弟我也是新手,给的意见就参考就好。因为x不是globa 01/18 12:32
6F:→ iphone2003: l,所以即使在function中更改x为True,出了function 01/18 12:32
7F:→ iphone2003: 後x依然会和原本一样。所以如果想让x在主程式中也可以 01/18 12:32
8F:→ iphone2003: 跟着function改变,除了设x为global外,也可以维持ret 01/18 12:32
9F:→ iphone2003: urn的那个写法,然後外面呼叫abc()的时候改成X=abc() 01/18 12:32
10F:→ iphone2003: ,让x去接应该也可以成功 01/18 12:32
11F:→ iphone2003: 不过我不知道用X=abc()这样写会不会不太好,但确实可 01/18 12:33
12F:→ iphone2003: 以达到你的需求就是了 01/18 12:33
13F:→ KSJ: return x 要接起来啊… 01/18 16:01
15F:推 vi000246: 我觉得python的缺点是 宣告跟赋值比较不好看出来 01/18 16:33
16F:→ vi000246: 像你里面的x=True 是宣告一个local变数x 01/18 16:34
17F:→ vi000246: 而不是对外面的x赋值 01/18 16:34
18F:推 Sunal: 主要是scope and namespace的观念 至於宣告或赋值倒也还好 01/18 17:14
19F:推 aszx4510: call by value, call by address, call by reference 01/19 03:54
20F:→ aszx4510: call by address 好像不是正规用语XD 01/19 03:57
21F:→ aszx4510: 如果你想要在function内直接修改外面传进来的参数, 你 01/19 03:58
22F:→ aszx4510: 需要搞懂上面那几种的差别 01/19 03:58
23F:→ aszx4510: 如果是透过接收return值来修改, 那你要摆一个变数来接收 01/19 03:59
24F:→ vi000246: 拍谢 我的回应是错的 忘记x是传进来的了 01/19 10:01
25F:→ zuso: 感谢各位指点迷津阿XD 观念厘清了不少~~ 01/19 11:42