刚在 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'
|  |      1chroming      2018-04-19 19:26:03 +08:00 via Android get 可以指定默认值 | 
|  |      2chroming      2018-04-19 19:26:51 +08:00 via Android 看错了。加 or 的太不优雅了,没用过 | 
|  |      3doubleflower      2018-04-19 19:28:58 +08:00 就环境变量当然是后者了,万一给环境设置一个空值呢,前一个还是会得到空 | 
|      4SimbaPeng      2018-04-19 19:29:39 +08:00 第二种又不是 dict.get 特有的,是很普通的短路求值 | 
|      5SimbaPeng      2018-04-19 19:32:45 +08:00 看场景需求,第一个是不存在使用备用值,第二个是不为真使用备用值 | 
|  |      6orangeade      2018-04-19 19:36:50 +08:00 via Android 还有一种是 collections 里的 default dict,更方便一些 | 
|      7bobuick      2018-04-19 19:39:51 +08:00  1 没看出来第 2 种用法,可能会存在不一样的逻辑么。 if None or 2 可以得到 2, if '' or 2 也可以得到 2 的, py 里 False 有很多种数据零值都会是 False 第一种里面只有取不到 Key 的 val 的时候,才会用提供的 default 值。 | 
|      9u14e OP @SimbaPeng @doubleflower 大佬好理性 | 
|      10shihira      2018-04-19 19:59:36 +08:00 当然是第一种。第二种太奇怪了,摆着好好的内建参数不用,另辟蹊径还多出点 bug。 | 
|  |      11kindjeff      2018-04-19 20:07:15 +08:00 当然是 os.environ['SECRET_KEY'] | 
|  |      12kindjeff      2018-04-19 20:07:50 +08:00 环境变量没设的,应该直接 crash | 
|  |      13phithon      2018-04-19 20:10:42 +08:00 只在 django 里见过 | 
|  |      14lance6716      2018-04-19 22:32:44 +08:00 via Android 我是遵循 EAFP 原则,虽然 try except 多了有点丑 | 
|      15lolizeppelin      2018-04-19 23:37:21 +08:00 via Android 用啊  一定不能为  k 不允许为 none 的时候  肯定用第二种啊 | 
|      16lolizeppelin      2018-04-19 23:44:18 +08:00 via Android 一般用 1  有需求就用 2 常见的用在 json 校验之后 前端有时候并不是那么方便弹出多余 key 所以校验要允许 key 为 null 但是取值的时候又要禁止空值 这时候就要用上 2 了 | 
|  |      17est      2018-04-20 00:04:35 +08:00 {"key": null} 所以要用第二种。 | 
|      18maemual      2018-04-20 00:38:44 +08:00 via iPhone  1 上面很多人没看懂啊,这两种写法的意义是完全不一样的 | 
|      19u14e OP @lolizeppelin 谢谢大佬的分享 | 
|      21vakara      2018-04-20 10:15:36 +08:00 有用过啊, 第一个是处理没有这个环境变量,返回后面的默认值。 第二个是指定环境变量默认值(可以没有,可以为空),返回默认值。 | 
|  |      22vipppppp      2018-04-20 11:27:07 +08:00 这个链接是 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 | 
|  |      23di94sh      2018-04-20 11:39:28 +08:00 via Android @vipppppp 我记得可以这样写  index= request.value. get('index', 0, type= int) | 
|      24OldPanda      2018-04-20 14:13:29 +08:00 一般都是写成 SECRET_KEY = os.getenv('SECRET_KEY', 'Your Majesty') | 
|  |      25aliao0019      2018-04-20 16:35:53 +08:00 ```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 ``` | 
|  |      26Kylin30      2018-04-25 01:25:37 +08:00 又学一招,感谢。 | 
|      27smdbh      2018-05-02 14:32:56 +08:00 感谢,正好用到,会看复习下。 |