易截截图软件、单文件、免安装、纯绿色、仅160KB

Python三目运算,and or陷阱

在C语言中,三目运算经常用到(cond?a:b),非常的简洁,而在Python中不支持这种语法。
但是,可以用Python中and or来实现(这里是有陷阱的,下面会讲到)
我们来看下面几个表达式
>>> False
or 1
1
>>> False
or 0
0
>>> True or
0
True
>>> True
and 1
1
>>>True and
0
0
>>> False
and 1
False
也就是说,and or这个表达式会返回一个最终的表达式结果,而不是简单的True或者False。那么看如下几个表达式:
>>> True
and 1 or 2   #TRUE?1:2
1
>>> False
and 1 or 2 #TRUE?1:2
2
这是不是很像三目运算的结果呢?
这里你也许会想到文章开始的三目表达式可以这样表示
>>> cond
and a or b
是的,在大多数情况下这个表达式都是正确的,但是上面提到的陷阱也在这里出现了
>>> cond,
a, b = True, 0, 1 #这样赋值后
>>> cond
and a or b         #这个表达式的结果会是什么呢?
1                                     
#也就是b,而不是你预想的a
这是因为,在 and or运算中 空字符串 ‘’,数字0,空列表[],空字典{},空(),None,在逻辑运算中都被当作假来处理,如下面这个例子
>>> 'sss'
and '' or 'bbb'
'bbb'
但是,不要担心,还是有办法的。
在的文章《和C语言三目运算符完全等价的表达式

中给出了如下表达方式
>>> c =
cond and a or (not cond or a) or b #貌似有点太复杂了
在Dive into Python 中给出这样一个方法:
>>> (1 and
[a] or [b])[0]   #也就是 (cond and [a] or [b])[0]
因为,即使 a或者b为一个逻辑假的值,将他放入集合中后,就为假了,也就是[False] [None]都不为假。
此外,我认为还可以这样实现
>>> (b,
a)[cond and 1 or 0] #这种方法需要主意的地方就是,Tuble中a和b的位置是颠倒的
另,在“深圳夜归人”的文章
里给出了,用dict的一种方式
>>> max_ab =
{True:a, False:b}[a > b]
但是这


相关文档:

关于Python中时间与字符串直接的转换

>>> import time
>>> import datetime
>>>
now = time.localtime()
>>> now
(2006, 4, 30, 18, 7, 35,
6, 120, 0)
>>> type(now)
<type 'time.struct_time'>
>>>
str_now = time.strftime("%m/%d/%Y %X", now )
>>>
str_n ......

python中如何判断一个变量的数据类型?(原创)

import types
type(x) is types.IntType # 判断是否int 类型
type(x) is types.StringType #是否string类型
.........
--------------------------------------------------------
超级恶心的模式,不用记住types.StringType
import types
type(x) == types(1) # ......

使用C语言扩展Python(一)

开发环境:Ubuntu9.10,python2.6,gcc4.4.11,ubuntu下的python运行包和开发包是分开的,因此需要在新利得里面安装python-all-dev,从而可以在代码中引用python的头文件和库。2.下面是一个最简单的可以供python调用的c扩展模块,假设c程序文件名为foo.c:代码#include <Python.h>
static PyObject* foo_b ......

Python标准库的threading.Thread类

这个类表示在单独的控制线程中运行的活动。有两种方法可以指定这种活动,给构造函数传递回调对象,或者在子类中重写run() 方法。其他方法(除了构造函数)都不应在子类中被重写。换句话说,在子类中只有__init__()和run()方法被重写。
一旦线程对象被创建,它的活动需要通过调用线程的start()方法来启动。这方法再调用控制 ......

分享一个简单的python模板引擎


#coding:utf-
8
  
__author__="sdm"
  
__author_email='sdmzhu3@gmail.com'
  
  
__date__ ="$2009-8-25 21:04:13$"
  
  
''
'  
pytpl 类似
php的模板类  
  
&nbs ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号