Python学习-第五章 条件、循环及其他语句

条件、循环及其他语句

序列解包(可迭代对象解包):将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。

>>> values=1,2,3
>>> values
(1, 2, 3)
>>> x,y,z=values
>>> x
1

这种序列解包方法在字典中随便获取(或删除)一个键-值对,然后把获取的键-值对以元组的方式返回,可以直接将返回的元组解包到两个变量中。

>>> scoundrel={'name':'Robin','girlfriend':'Marion'}
>>> key,value=scoundrel.popitem()
>>> key
'girlfriend'
>>> value
'Marion'
要注意的是要解包的序列包含的元素个数必须与你等号左边列出的目标个数相同,否则Python将引发异常。

我们可以使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同

>>> a,b,*rest=[1,2,3,4]
>>> rest
[3, 4]

链式赋值是一种快捷方式,用于将多个变量关联到同一个值。

x=y=somefunction()与下面代码等价
y=somefunction()
x=y
但是这两条语句可能与下面的语句不等价:
x=somefunction()
y=somefunction()

Python支持链式比较:可同时使用多个比较运算符,如0<age<100.
is:相同运算符,其作用看似与==一样,但是实际并不如此。is检查两个对象是否相同(而不是相等)。

>>> x=y=[1,2,3]
>>> z=[1,2,3]
>>> x==y
True
>>> x==z
True
>>> x is y
True
>>> x is z     //这两个列表虽然相等,但并非同一个对象,可以使用id(x)与id(z)查看
False

in:成员资格运算符

>>> name=input('What is your name?')
What is your name?Wang xuan
>>> if 's' in name:
...   print('Your name contains the letter "s".')
... else:
...   print('Your name does not contain the letter "s".')
...
Your name does not contain the letter "s".

内置函数zip是一个很有用的并行迭代工具,它将两个序列“缝合”起来,并返回一个由元组组成的序列。返回值是一个适合迭代的对象,要查看其内容,可使用list将其转换为列表。函数zip可用于“缝合”任意数量的序列。当序列的长度不同时,函数zip将在最短的序列用完后停止“缝合”。

>>> names=['anne','beth','george','damon']
>>> ages=[12,45,32,102]
>>> list(zip(names,ages))
[('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]

反向迭代函数reversed和排序后再迭代函数sorted

>>> sorted([4,3,6,8,3])
[3, 3, 4, 6, 8]
>>> sorted('Hello,world!')
['!', ',', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
>>> list(reversed('Hello,world!'))
['!', 'd', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'H']
>>> ''.join(reversed('Hello,world!'))
'!dlrow,olleH'

要按字母表排序,可以先转换为小写。将sort或sorted的可以参数设置为str.lower。

>>> sorted("aBc",key=str.lower)
['a', 'B', 'c']

要结束循环,可使用break。假设你要找出小于100的最大平方值,可从100开始向下迭代。找到一个平方值后直接跳出循环。

>>> from math import sqrt
>>> for n in range(99,0,-1):
...    root=sqrt(n)
...    if root==int(root):
...       print(n)
...       break
...
81

列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。

>>> [x*x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> [x*x for x in range(10) if x%3==0]
[0, 9, 36, 81]

>>> [(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语句,del不仅会删除到对象的引用,还会删除名称本身。
函数exec将字符串作为代码执行。在调用函数exec时不能只提供一个参数,还应向它传递一个命名空间-用于放置变量的地方。

>>> from math import sqrt
>>> scope={}
>>> exec('sqrt=1',scope)
>>> sqrt(4)
2.0
>>> scope['sqrt']
1

eval函数时计算用字符串表示的Python表达式的值,并返回结果(exec什么都不返回,因为它本身就是条语句)。

>>> eval(input("Enter an arithmetic expression:"))
Enter an arithmetic expression:6+18*2
42

猜你喜欢

转载自blog.csdn.net/weixin_43340018/article/details/83149756