在学校时候python学的稀巴烂不好,现在干活暂时会需要一下,浪子回头因为有金换🤦♂️
这活感觉有点麻烦的,得快点搞完回上海,深圳太热太潮啦😔
数字
除法运算 (/
) 永远返回浮点数类型。如果要做 floor division 得到一个整数结果(忽略小数部分)你可以使用 //
运算符
在Python中,可以使用 **
运算符来计算乘方
>>> 2 ** 7 # 2 to the power of 7
128
等号用于给一个变量赋值。然后在下一个交互提示符之前不会有结果显示出来:
>>> width = 20
>>> height = 5 * 9
>>> width * height
900
在交互模式下,上一次打印出来的表达式被赋值给变量 _
。这意味着当你把Python用作桌面计算器时,继续计算会相对简单,比如:
>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06
这个变量应该被使用者当作是只读类型。不要向它显式地赋值——你会创建一个和它名字相同独立的本地变量,它会使用魔法行为屏蔽内部变量。
字符串
字符串不能被修改
字符串可以用 +
进行连接(粘到一起),也可以用 *
进行重复:
>>> # 3 times 'un', followed by 'ium'
>>> 3 * 'un' + 'ium'
'unununium'
原始字符串 在引号前添加 r
即可:
>>> print('C:\some\name') # here \n means newline!
C:\some
ame
>>> print(r'C:\some\name') # note the r before the quote
C:\some\name
字符串是可以被 索引 (下标访问)的
>>> word = 'Python'
>>> word[0] # character in position 0
'P'
>>> word[5] # character in position 5
'n'
索引也可以用负数,这种会从右边开始数:
>>> word[-1] # last character
'n'
>>> word[-2] # second-last character
'o'
>>> word[-6]
'P'
除了索引,字符串还支持 切片。索引可以得到单个字符,而 切片 可以获取子字符串:
>>> word[0:2] # characters from position 0 (included) to 2 (excluded)
'Py'
>>> word[2:5] # characters from position 2 (included) to 5 (excluded)
'tho'
注意切片的开始总是被包括在结果中,而结束不被包括。这使得 s[:i] + s[i:]
总是等于 s
>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'
切片的索引有默认值;省略开始索引时默认为0,省略结束索引时默认为到字符串的结束:
>>> word[:2] # character from the beginning to position 2 (excluded)
'Py'
>>> word[4:] # characters from position 4 (included) to the end
'on'
>>> word[-2:] # characters from the second-last (included) to the end
'on'
对于使用非负索引的切片,如果索引不越界,那么得到的切片长度就是起止索引之差。例如, word[1:3]
的长度为2。
内建函数 len()
返回一个字符串的长度:
>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34
列表
>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]
列表支持拼接和切片,所有的切片操作都会返回一个新列表。
与字符串不同,列表的内容是可以改变的。
可以在列表末尾通过 append()
方法 来添加新元素。
给切片赋值也是可以的,这样甚至可以改变列表大小,或者把列表整个清空:
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # replace some values
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # now remove them
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> # clear the list by replacing all the elements with an empty list
>>> letters[:] = []
>>> letters
[]
内置函数 len()
也可以作用到列表上
也可以嵌套列表 (创建包含其他列表的列表), 比如说:
>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'
流程控制
if 语句
>>> if x < 0:
... x = 0
... print('Negative changed to zero')
... elif x == 0:
... print('Zero')
... elif x == 1:
... print('Single')
... else:
... print('More')
for 语句
>>> # Measure some strings:
... words = ['cat', 'window', 'defenestrate']
>>> for w in words:
... print(w, len(w))
...
cat 3
window 6
defenestrate 12
如果在循环内需要修改序列中的值(比如重复某些选中的元素),推荐你先拷贝一份副本。对序列进行循环不代表制作了一个副本进行操作。切片操作使这件事非常简单:
>>> for w in words[:]: # Loop over a slice copy of the entire list.
... if len(w) > 6:
... words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']
如果写成 for w in words:
,这个示例就会创建无限长的列表,一次又一次重复地插入 defenestrate
。
range()函数
如果你确实需要遍历一个数字序列,内置函数 range()
会派上用场。它生成算术级数:
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
给定的终止数值并不在要生成的序列里;range(10)
会生成10个值,并且是以合法的索引生成一个长度为10的序列。range也可以以另一个数字开头,或者以指定的幅度增加(甚至是负数;有时这也被叫做 ‘步进’)
range(5, 10)
5, 6, 7, 8, 9
range(0, 10, 3)
0, 3, 6, 9
range(-10, -100, -30)
-10, -40, -70
要以序列的索引来迭代,您可以将 range()
和 len()
组合如下:
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
然而,在大多数 这类 情况下,使用 enumerate()
函数比较方便,请参见 循环的技巧 。
如果你只打印 range,会出现奇怪的结果:
print(range(10))
range(0, 10)
range()
所返回的对象在许多方面表现得像一个列表,但实际上却并不是。此对象会在你迭代它时基于所希望的序列返回连续的项,但它没有真正生成列表,这样就能节省空间。
我们说这样的对象是 可迭代的 ,也就是说,适合作为函数和结构体的参数,这些函数和结构体期望在迭代结束之前可以从中获取连续的元素。我们已经看到 for
语句就是这样一个迭代器。函数 list()
是另外一个;它从可迭代对象中创建列表。
>>> list(range(5))
[0, 1, 2, 3, 4]
后面,我们会看到更多返回可迭代对象的函数,和以可迭代对象作为参数的函数。