注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

Python基础之---运算符与用法及编码问题  

2011-02-16 14:41:00|  分类: Web技术-Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Python的运算符与用法及编码问题


+加两个对象相加

3 + 5得到8。'a' + 'b'得到'ab'。

(注意:6+'a'这样是错误的,但在PHP里这样是可以运行的)

-减得到负数或是一个数减去另一个数
-5.2得到一个负数。50 - 24得到26。

*乘两个数相乘或是返回一个被重复若干次的字符串

2 * 3得到6。'la' * 3得到'lalala'(但PHP里这样运算返值为0)。

在PHP中要实现相同功能,有函数:

str_repeat(),str_pad()

**幂

返回x的y次幂

3 ** 4得到81(即3 * 3 * 3 * 3)

/除x除以y

4/3得到1(整数的除法得到整数结果)。
4.0/3或4/3.0得到1.3333333(这里要特别注意,如2/4 得到是0而不是0.5,所以可以这样做float(2)/4得到正常的0.5,
而在PHP中却不存在这情况)

//取整除返回商的整数部分
4 // 3.0得到1.0

%取模返回除法的余数

8%3得到2。-25.5%2.25得到1.5

(在PHP中:-8%3 = -2  与 8%-3 = 2 )

1.求 整数商: c = a/b;
2.计算模或者余数: r = a - c*b.
<<左移
把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1)2 << 2得到8。——2按比特表示为10

>>右移
把一个数的比特向右移一定数目11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。

&按位与
数的按位与5 & 3得到1。

|按位或
数的按位或5 | 3得到7。

^按位异或
数的按位异或5 ^ 3得到6

~按位翻转
x的按位翻转是-(x+1)~5得到6。

<小于
返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。5 < 3返回0(即False)而3 < 5返回1(即True)。比较可以被任意连接:3 < 5 < 7返回True。

>大于返回
x是否大于y5 > 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。

<=小于等于
返回x是否小于等于yx = 3; y = 6; x <= y返回True。

>=大于等于
返回x是否大于等于yx = 4; y = 3; x >= y返回True。

==等于
比较对象是否相等x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。

!=不等于
比较两个对象是否不相等x = 2; y = 3; x != y返回True。not布尔“非”如果x为True,返回False。如果x为False,它返回True。x = True; not y返回False。and布尔“与”如果x为False,x and y返回False,否则它返回y的计算值。

x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象称为短路计算

or布尔“或”
如果x是True,它返回True,否则它返回y的计算值。

x = True; y = False; x or y返回True。短路计算在这里也适用。

 

fc_lamp提醒你:1  Python的逻辑运算符里没有“!(非),&&(与),||(或)” 这三个表示符号(完全是英文上的表示)。

                          即 not,and,or

                         2  Python中的变量赋值操作不是一种存储操作。比如:a=5,这里仅是将创建并包含值5的新对象,用名称a来引用了而已。


再看关于Bool值

#coding:utf-8
#True、任意非零数字、非空字符串、列表、元组或者字典都返回True
#False、零、None、和空的列表、元组和字典都返回False
#另外 is 运算符用于比较两个对象身份,type()函数则返回一个对象的类型,如list,dict,file,int
#1和0的问题:我们知道python的数字类型有:bool,int,long,float,complex(复数)
#而bool中的true和false就是分别映射了1和0,所以作值判断时:xx=1 if xx==True 是成立的。
s = 'asdfs'
if s:
    print(s)
else:
    print('not true')
#输出 asdfs

s = {}
if s:
    print(s)
else:
    print('not true')
#输出not true

s = 0
if s==False:
    print(s)
else:
    print('not true')
#输出0

s =1
if s==True:
    print(s)
else:
    print('not true')
#输出 1
    
if type(s) is bool: #严格意义上 数字类型中的bool型
    print(s)
else:
    print('not true')
#输出not true


 

以上可看出
1 在python中空的列表 ([]),tuple(()),字典({}),字符串(''),零(0),还有None对象,在逻辑判断中都为假,其他的情况都为真。()

对比PHP

<?php
class test
{
}
$a = new test();
if($a){
echo 'new test() bool true<br/>';
}
$a = array();
if($a){
echo 'array() bool true<br/>';
}
$a = null;
if($a){
echo 'null bool true<br/>';
}
$a=false;
if($a){
echo 'false bool true<br/>';
}
$a=0;

if($a){
echo '0 bool true<br/>';
}
$a='';
if($a)
{
echo "'' bool true<br/>";
}
$a='0';
if($a){
echo "'0' bool true<br/>";
}
$a=0.0;
if($a){
echo "0.0 bool true<br/>";
}

$a='0.0';
if($a){
echo "'0.0' bool true<br/>";
}


结果:

new test() bool true
'0.0' bool true

从上可看出在PHP中: 

布尔值 FALSE 本身、

整型值 0(零)、

浮点型值 0.0(零)、

空字符串,以及字符串 "0"、

不包括任何元素的数组、

不包括任何成员变量的对象(仅 PHP 4.0 适用,从例子中可看出空对象不再是FALSE)、

特殊类型 NULL(包括尚未赋值的变量)、

从没有任何标记(tags)的 XML 文档生成的 SimpleXML 对象

值都是 FALSE


2 is 运算符是比较对象地址,也就是说是否是同一对象。
3 == 运算符比较两对象是否相等,但它们不一定引用的是同一对象。


另外单独说说python的字符串运算符

  了解PHP的人知道,在PHP里字符串的连接运算符为(“.”),它返回其左右参数连接后的字符串。如:

<?php

$a = 55;

$str = 'abc';

$str .= 'def';

$str .= $a; //在运算时,PHP自动把$a的类型转为了字符串类型

$str = $str.'s99s';

//在PHP里变量与字符串之间连接是通过点运算来实现连接的

echo $str;

但在python里,可能大家已从运算表里找到了,即 (“+”),但是与PHP不同的是两个对象相加,两个对象必须是同类型的,不同类型的两个对象是不能相加的。

要实现像上面PHP代码里的运算,必须保证两对象类型一致。如:

print('=============python字符串运算符================')

numa = 3

strs = 'This first'

strs1 = strs,numa #输出值为:('This first',3)

print(strs1)

######################

#类型对象不匹配,无法正常运算

#strs2 = strs+numa 

#print(strs2)

######################

strs3 = strs+str(numa) #改变numa的类型,使其成为字符串,或者 strs += str(numa)

print(strs3) #输出为This first3

#另外:如果strs = '6',则可进行:strs3 = int(strs)+numa这样的运算,输出为9


python里的"列表解析"运算

>>> l = [2,4,6,8]

>>> newl = [i+1 for i in l]
>>> newl
[3, 5, 7, 9]

#在字典(dict)里使用'列表解析'

>>> d = {'a':1,'b':3,'f':6}
>>> newd = dict([(k,v+2) for k,v in d.iteritems()]) #先转成元组,再dict成字典
>>> newd
{'a': 3, 'b': 5, 'f': 8}


#d.items()与d.iteritems()


>>> for i in d.items():
print i


('a', 1)
('b', 3)
('f', 6)
>>> for k,v in d.iteritems():
print k,v

a 1
b 3
f 6





python里的"三元"运算符

python里没有类似"xx ? xx : xx"这样的三元运算符,可用:

charset = 'utf8' if 'charset' not in param else param['charset'];

这种方式来代替。

参看:http://chroya.iteye.com/blog/726479

 

Python的常见的类型转换

函数                      描述

int(x [,base ])                #将x转换为一个整数

long(x [,base ])             #将x转换为一个长整数

float(x )                         #将x转换到一个浮点数

complex(real [,imag ])  #创建一个复数

str(x )                           #将对象 x 转换为字符串

repr(x )                        #将对象 x 转换为表达式字符串

eval(str )                      #用来计算在字符串中的有效Python表达式,并返回一个对象

tuple(s )                       #将序列 s 转换为一个元组

list(s )                        #将序列 s 转换为一个列表

chr(x )                         #将一个整数转换为一个字符

unichr(x )                    #将一个整数转换为Unicode字符

ord(x )                        #将一个字符转换为它的整数值

hex(x )                        #将一个整数转换为一个十六进制字符串

oct(x )                         #将一个整数转换为一个八进制字符串

 

编码问题

需要注意的是,中文在python里的存储方式是以编码后的形态存放的,

所以要正常呈现中文应格式化形式输出,如:

print('错误',)  输出:'\xb4\xed\xce\xf3'

print('错误') 输出:错误

 多一个“,”号行为就不一样了。

 上面一个是元组输出,而后面一个是以字符串形式输出。

更多编码问题参看: 1 《 python 中文编码问题》     2 《Python MySQL 数据库乱码解决方法》

                     

另注:

1 dir()函数 :

你可以使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。

当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。

2 del
  用于删除一个变量,这类似于PHP里的unset()

3 python的Bool值:True ,False

   isinstance('test',str)  类型检测函数



fc_lamp推荐阅读:
  评论这张
 
阅读(971)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017