1,隐藏的print,import属性。
首先我们之前了解过print和import,它依然隐藏着更多的特性。对于Print来说,逗号的作用就很明显,比如print 'age:',42 ,执行后逗号会自动转变为空格使之成为一个连贯的字符串。age: 42.
另外import,把某一事件作为另一事件导入。从模块导入函数时可以用import somemodule,或者from somemodule import somefunction 等。另外可以在语句末增加一个as子句,在该子句后给出名字,或者为整个字句提出别名。例如import math as foobar .foobar.sqrt(4) 。
2,赋值魔法
多个赋值同时进行,比如x,y,z=1,2,3,还可以进行调换x,y=y,x。事实上这里所作的事情就做序列解包,先将多个值的序列解开再放到要赋值的序列中。但必须保证等号两边的数量完全一样否则会发生异常。
链式赋值,是将同一个值赋给多个变量的捷径,x=y=4.
增值赋值,类似C中的赋值。
5.条件和条件语句
布尔值,在python中 false none 0 "" [] {}都会被看做是假,换句话说,标准值false,none ,所有类型的数字0,空序列,以及空字典都被视为假。其他的一切都被视为真,另外ture和false可以被看做是1和0.比如ture+false+3,执行该语句则结果为4.记住所有的值都可以被看所是布尔值,且不需要进行显示转换,规则就是上面所说的。
if,else,以及elif
if (条件)
成立
else://注意冒号
多条件时用elif,另外也可以用and 或 or来增加条件。
比较运算符
相等运算符 ==
is 同一运算符,此处注意的是is用来判断两个列表是否有同一性而不是相等性,比如x=y=[1,2,3],z=[1,2,3],此时我们说x,y有同一性而x和z就没有同一性。则x is y返回ture,x is z 返回false。
另外x is not y是表达相反的意思。
in 成员资格符,用来判断该成员是否在列表或者字符串或者字典中。
字符串和序列比较,字符串可以按照字母顺序排列进行比较。 “alpha”<"beta" 返回值为ture
6.循环,
while循环,for循环。
7.迭代工具
程序可以同时迭代两个序列,比如有两个下面的列表。
names=['anne','beth','george','damon']
age=[12,32,33,14]
如果想打印名字和对应的年龄,则可以向下面这样做。
for i in range(len(names)):
print names[i],'is',age,'years old'
在这里i是循环索引的标准变量名。
另外zip函数可以用来进行并行迭代,把两个序列压缩在一起,然后返回一个元组的列表,zip函数作用于任意多的序列,关于它很重要的一点是zip可以应付不等长的序列,等最短的用完的时候就会停止。
3. 翻转和迭代排序
sort([2,3,1,6,3,2])运行结果为
[1,2,2,3,3,6]。同样对于字符串也适用
reversed().翻转排序
>>> list(reversed('hello,world'))
['d', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'h']
4.跳出循环,break和continue
5.pass什么什么都不做。继续执行下面的语句。
6.del 删除。
7.使用exec和eval执行和求值字符串。有些时候很可能要动态的创造python代码,然后将其作为语句执行或作为表达式计算,注意执行存储在字符串中的python代码,会有很严重的潜在安全漏洞,如果程序将用户提供的一段内容中的一部分字符串作为代码执行,程序可能会失去对代码执行的控制,这种情况在网络应用程序,比如CGI脚本中尤其危险。
此处exec可用来执行python代码比如exec“print 'hello world!'”则语句print 'hello world'就会被执行。
使用简单形的exec语句绝不是好事,很多情况下可以给它提供命名空间(放置变量的地方)否则将会破坏原有的python代码比如,
>>> from math import sqrt
>>> exec "sqrt=1"
>>> sqrt(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
因为exec动态的创建pthon使得sqrt原本的功能不可用。所以通过增加in<scope>来实现
>>> from math import sqrt
>>> sqrt(4)
2.0
>>> scope={}
>>> exec 'sqrt=1'in scope
>>> sqrt(4)
2.0
>>> scope['sqrt']
1
可以看到将exec代码放到命名空间scope中,潜在的破坏性就会消失,,因为通过exec赋值的变量只能在它的作用域内有效。可以将scope打印出来。看看其组成,通过测试可知scope是一个字典的形式,默认情况下只有_builtins_一个键,当然本例加了一个sqrt。
eval函数,同样作为内建函数,exec执行一系列的 python代码,而eval会计算python表达式。并返回结果的值。比如可以用eval创建一个计算器。
>>> eval(raw_input("please enter pxpression:"))
please enter pxpression:1+2+3*23
72