刚在 https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iii-web-forms 评论下面看到作者说起下面这两种写法的区别,想问问 v 友用的是哪种
# case1
SECRET_KEY = os.environ.get('SECRET_KEY', 'Your Majesty')
# case2
SECRET_KEY = os.environ.get('SECRET_KEY') or 'Your Majesty'
1
chroming 2018 年 4 月 19 日 via Android
get 可以指定默认值
|
2
chroming 2018 年 4 月 19 日 via Android
看错了。加 or 的太不优雅了,没用过
|
3
doubleflower 2018 年 4 月 19 日
就环境变量当然是后者了,万一给环境设置一个空值呢,前一个还是会得到空
|
4
SimbaPeng 2018 年 4 月 19 日
第二种又不是 dict.get 特有的,是很普通的短路求值
|
5
SimbaPeng 2018 年 4 月 19 日
看场景需求,第一个是不存在使用备用值,第二个是不为真使用备用值
|
6
orangeade 2018 年 4 月 19 日 via Android
还有一种是 collections 里的 default dict,更方便一些
|
7
bobuick 2018 年 4 月 19 日 没看出来第 2 种用法,可能会存在不一样的逻辑么。
if None or 2 可以得到 2, if '' or 2 也可以得到 2 的, py 里 False 有很多种数据零值都会是 False 第一种里面只有取不到 Key 的 val 的时候,才会用提供的 default 值。 |
9
u14e OP @SimbaPeng @doubleflower 大佬好理性
|
10
shihira 2018 年 4 月 19 日
当然是第一种。第二种太奇怪了,摆着好好的内建参数不用,另辟蹊径还多出点 bug。
|
11
kindjeff 2018 年 4 月 19 日
当然是 os.environ['SECRET_KEY']
|
12
kindjeff 2018 年 4 月 19 日
环境变量没设的,应该直接 crash
|
13
phithon 2018 年 4 月 19 日
只在 django 里见过
|
14
lance6716 2018 年 4 月 19 日 via Android
我是遵循 EAFP 原则,虽然 try except 多了有点丑
|
15
lolizeppelin 2018 年 4 月 19 日 via Android
用啊 一定不能为 k 不允许为 none 的时候 肯定用第二种啊
|
16
lolizeppelin 2018 年 4 月 19 日 via Android
一般用 1 有需求就用 2
常见的用在 json 校验之后 前端有时候并不是那么方便弹出多余 key 所以校验要允许 key 为 null 但是取值的时候又要禁止空值 这时候就要用上 2 了 |
17
est 2018 年 4 月 20 日
{"key": null}
所以要用第二种。 |
18
maemual 2018 年 4 月 20 日 via iPhone 上面很多人没看懂啊,这两种写法的意义是完全不一样的
|
19
u14e OP @lolizeppelin 谢谢大佬的分享
|
21
vakara 2018 年 4 月 20 日
有用过啊,
第一个是处理没有这个环境变量,返回后面的默认值。 第二个是指定环境变量默认值(可以没有,可以为空),返回默认值。 |
22
vipppppp 2018 年 4 月 20 日
这个链接是 flask
。。之前中途接手了一个 flask 项目,由于前后端没有沟通好,很无奈采取了一个很蛋疼的操作。 举个简单的例子: index = request.value.get('index', 0) 可是这个我的 index 要是一个整数!! 然后 get 请求的参数一般是 string 类型。。 于是我: index = int(request.value.get('index', 0)) 可是无奈的是,有时 url 是?index=&... index 来了个 None 值。。 于是: index = int(request.value.get('index') or 0) T_T |
23
di94sh 2018 年 4 月 20 日 via Android
@vipppppp 我记得可以这样写
index= request.value. get('index', 0, type= int) |
24
OldPanda 2018 年 4 月 20 日
一般都是写成 SECRET_KEY = os.getenv('SECRET_KEY', 'Your Majesty')
|
25
aliao0019 2018 年 4 月 20 日
```python
In [1]: di = {'a': 0} In [2]: di.get('a') or 1 Out[2]: 1 In [3]: di.get('a', 1) Out[3]: 0 ``` |
26
Kylin30 2018 年 4 月 25 日
又学一招,感谢。
|
27
smdbh 2018 年 5 月 2 日
感谢,正好用到,会看复习下。
|