布尔值
真值也称为布尔值,是以在真值方面做出巨大贡献的George Blooe命名的。
用作布尔表达式(如用作if语句中的条件)时,下面的值都将被解释器视为假,其它时候都为真。
False None 0 "" [] () {}
在有些语言中,标准的真值为0(表示假)和1(表示真).实际上,True和False不过时0和1的别名,虽然看起来不同。但作用时相同的。
布尔值的True和False属于类型bool,而bool与list和tuple一样,可以用来转换其他的值。
>>> bool('hello world') True >>> bool(78) True >>> bool(1) True >>> bool(0) False >>> bool({}) False
布尔运算符:and not or (短路逻辑)
在表达式x or y 中,如果x为真,就返回x,否则就返回y:
>>> name = input('Name: ') or 'root'
Name:
>>> name
'root'
>>> name = input('Name: ') or 'root'
Name: ubuntu
>>> name
'ubuntu'
>>> name = input('Name: ') or 'root'
Name: #输入纯空格了
>>> name
' '
断言
让程序在错误条件出现时立即崩溃。
>>> age = 10 >>> assert age == 15 ,'The age must be 10' Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError: The age must be 10
如果条件不满足,程序立即崩溃。可以在后面加字符串,对断言做出说明。
for
可迭代对象是可使用for循环进行遍历的对象。
只要能够使用for循环,就不要使用while循环。
迭代字典
要遍历字典里面所有关键字,可像遍历序列那样使用普通的for语句。
d = {'x':1, 'y':2, 'z':3} for key in d: print(key,'-->',d[key])
也可以使用keys等字典方法来获取所有的键。如果只对值感兴趣,可使用d.values。 d.items以元祖的方式返回键值对。for循环的有点之一是,可在其中使用序列解包。
d = {'x':1, 'y':2, 'z':3} for key, value in d.items(): print(key, value)
并行迭代
有时候你可能想同时迭代俩个序列。
names = ['lilei', 'hanmeimei', 'jom'] ages = [13, 14, 15] for i in range(len(names)): print(names[i], 'is', ages[i], 'years old.')
内置函数zip
它将俩个序列缝合起来,并返回一个由元祖组成的序列。返回值是一个适合迭代的对象,要查看其内容,需用list将其转换为列表。
>>> names = ['lilei', 'hanmeimei', 'jom'] >>> ages = [13, 14, 15] >>> list(zip(names, ages)) [('lilei', 13), ('hanmeimei', 14), ('jom', 15)]
缝合后,可在循环中将元祖解包。
names = ['lilei', 'hanmeimei', 'jom'] ages = [13, 14, 15] for name, age in zip(names, ages): print(name, 'is', age, 'years old.')
函数zip可用于缝合任意数量的序列,需要注意的是,当序列的长度不同时,函数zip将在最短的序列用完后停止。
迭代时获取索引
names = ['lilei', 'hanmeimei', 'jom'] for index, name in enumerate(names): print(index, name)
编号可以不从0开始
names = ['lilei', 'hanmeimei', 'jom'] for index, name in enumerate(names, 5): print(index, name)
反向迭代和排序后再迭代
reversed和sorted.它们类似于列表方法reversed和sort(sorted接受的参数也与sort类似)。但可用于任何序列或可迭代对象,且不就地修改,而是返回反转和排序后的版本。
>>> sorted([7, 5, 45, 8, 9, 52]) [5, 7, 8, 9, 45, 52] >>> reversed([7, 5, 45, 8, 9, 52]) <list_reverseiterator object at 0x7ff681238b38> >>> list(reversed([7, 5, 45, 8, 9, 52])) [52, 9, 8, 45, 5, 7]
sorted返回的是一个列表,而reversed返回的时一个可迭代对象。
跳出循环
break 跳出这个循环。continue 跳出这次循环,继续下一次循环。
循环中的else子句
for i in range(5): if i > 3: break else: print('hello') print('world')
else子句,仅在没有调用break时才执行。
count = 0 while count < 5: count += 1 if count < 0: break else: print('hello') print('world')
简单推导
列表推导是一种从其它列表创建列表得一种方式。
>>> [x * x for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
奇偶数
>>> [x for x in range(1, 101) if x % 2 == 0] [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100] >>> [x for x in range(1, 101) if x % 2 == 1] [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
还可以添加更多for
>>> [(x, y) for x in range(3) for y in range(3)] [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
pass
有时候什么都不要做,或者是占位符。
del
对于你不在使用得对象,Python会将其删除(因为没有任何变量或数据结构指向它)。垃圾回收。
使用del不仅会删除到对象本身,还会删除名称本身。
>>> x = 1 >>> del x >>> x Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'x' is not defined
俩个引用
>>> x = ['hello', 'world'] >>> y = x >>> del x >>> y ['hello', 'world']
只是删除名称x,并没有删除列表本身(值),在Python中,根本没有办法删除值。因为对于你不在使用得值,Python解释器会立即将其删除。
使用exec和eval执行字符串及计算其结果。
函数exec将字符串作为代码执行。
>>> exec('print("hello world")') hello world
大多数情况下,还应向它传递一个命名空间-用于放置变量的地方;否则代码将污染你的命名空间,即修改你的变量。例如:
>>> 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
为了安全,要提供一个字典来充当命名空间。为此添加第二个参数---字典,用作代码字符串的命名空间。
>>> from math import sqrt >>> scope = {} >>> exec("sqrt = 1", scope) >>> sqrt(4) 2.0 >>> scope['sqrt'] 1
eval
eval是一个类似于exec的内置函数。exec执行一些列Python语句,而eval计算用字符串表示的Python表达式的值。并返回结果。(exec什么都不返回,因为它本身是条件语句)。创建Python计算器:
>>> eval(input("Enter: ")) Enter: 5*6-9+7 28
与exec一样,也可向eval提供一个命名空间,虽然表达式通常不会像语句那样给变量重新赋值。
向exec和eval提供命名空间时,可在使用这个命名空间前在其中添加一些值。
>>> scope = {} >>> scope['x'] = 1 >>> scope['y'] = 2 >>> eval("x * y",scope) 2
一个命名空间可用于多次调用exec和eval.
小结
打印语句:你可以使用print语句来打印多个逗号分割值。还可以指定print结尾符。(默认是换行\n)
导入语句:在导入的函数名称过长或者这个名称你已经在使用,可以使用import...as...语句
赋值语句:通过使用序列解包或者链式赋值,可以同时给多个变量赋值。通过增强赋值,可以就地修改变量。
代码块:代码块用于通过缩进将语句编组。代码块可用于条件语句和循环中,还可用于函数和类定义中。
条件语句:条件语句根据条件(布尔表达式)决定是否执行后续代码块。条件语句的一个变种条件表达式。
断言:断言断定某件事(一个布尔表达式)为真,可包含说明为何必须如此的字符串。如果指定的字符串为假,断言将导致程序停止执行。
循环:你可针对序列中的每个元素(如特定范围内的每个数)执行代码块,也可在条件为真时反复执行代码块。要跳过代码块中余下的内容,直接进入下一次迭代,可使用continue语句;要跳出循环,可使用break语句。另外,还可以在循环末尾添加一个else子句,它将在没有执行循环中的任何break时执行。
推导:推导并不是语句,而是表达式。推过列表推导,可从既有列表创建出新列表。
pass、del、exec和eval:pass语句什么都不做,但适合用作占位符。del语句用于删除变量或数据结构的成员,但不能删除值。函数exec用于将字符串作为python程序执行。函数eval计算用字符串表示的表达式并返回结果。
来源:https://www.cnblogs.com/kongzhou/p/9020803.html