今天开始学习python……老早就想学学了,只是一直没空
Ok start...
用三引号定义多行字符串:
那么,如果要使用转义符打印三个连续引号('''或者"""),该如何用?
测试之。在多行字符串中,已经以三引号开头,那么可以直接使用转义符+三引号:
a = '''a\'''b'''
print a
输出:
a'''b
但是如果上例中没有b,那么解释器会将之理解成:
''' + a + \' + ''' + ' + '
即一个多行字符串a'和一个空字符串合并,结果是
a'
如果用单引号定义字符串,那么串中的双引号无特殊含义,不需使用转义符
反之亦然。
用三引号亦然。
定义自然字符串使用r+字符串:
a = r'\n\t\r'
定义Unicode字符串用u+字符串:
# coding=GBK
...
a = u'已以'
那么定义Unicode的自然字符串呢?
经测试,应使用ur+字符串.
ru+字符串会报错。
a = ur'已\n以'
给面向对象编程用户的注释
就每一个东西包括数、字符串甚至函数都是对象这一点来说,Python是极其完全地面向对象的。
那么这一点与java不同
教程中并未提及 '++'操作符
测试发现:
i++ 不工作:报错
++i不报错,但是似乎没有干任何事情,i的值并不改变。
所以……唉,没有++ -- 真不习惯,尽量吧。
**是幂的意思。
//同除法但将商取整。
>>和<<比特左右移位还在。善!
&&, || 和 !变成了 and, or 和 not,好吧也许这样更可读。
分行符:
python中可以使用分号;作为分行符……也可以不使用,如果没有把多个语句写一行的话。
变量命名的自由度还是很高的。测试可写:
True = False
if True:
print 'xxxx'
解释通过,即定义新变量True,其值为假(False)
输入结果print 'xxxx'未运行
甚至可以写:
False = True
True = False
if True:
print 'xxxx'
输出结果打印xxxx
嗯……希望我不会碰到这样的代码
那么如果像上例中一样全局定义被覆盖了怎么办?
我认为可以使用
True = 1==1
False = 1!=1
把它变回来。但是是否有其它更好的方法呢?
于是在stackoverflow上post了一个问题。希望会有人回答吧……链接在此。
To Be Continued ... 先慢慢往下看吧
-更新:stackoverflow果然效率很高,已经有人回答了:
方法一,直接
del True
del False
就回归原始值了。
方法二,使用__buildin__.True/False
学习了。
Python里这些东西还是有点纠结的,窃以为学习语言时从一开始就该把这些纠结的地方弄清楚。
做了一些延伸查阅:
==和is:
==比较值是否相等
is比较是否指向同一个object
它们就像java中的==和object.equals()/compareTo()方法。(那么在python类中是否可以定义类似的方法呢?待调查)
经测,python中对于预定义好的类型(指比如java里的primitive types),似乎会作与字符串相同处理;即字面量其实是只读的,所有值相同的变量其实指向同一object,修改变量的值其实修改了它指向的地址(大概?未深入研究)。具体表现在:
a = 3b = 3
print a==b
print a is b
结果:
True
True
说明它们似乎是指向同一object。
但是,如果是
a = 3
b = 3.0
print a==b
print a is b
结果:
True
False
类型不同,指向的object自然不同了。
(找到更准确说法:For all built-in Python objects (like strings, lists, dicts, functions, etc.), if x is y, then x==y is also True.)
这里判断为true并不意味着等于true。比如:
if 'aaa':
do something
会执行do something代码。
但是
if 'aaa'==True: (或者 'aaa' is True)
do something
就不会。
嗯嗯
另一个有可能会造成纠结的是运算符优先问题。根据教程:
运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4
被计算成(2 + 3) + 4
。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c
被处理为a = (b = c)
。
写到这里我饿了……真饿啊。
嗯,没有switch语句……
嗯嗯,while循环后可以跟一个else……这个看起来很奇异,好好玩的样子。根据教程:else块事实上是多余的,因为你可以把其中的语句放在同一块(与while
相同)中,跟在while