python快速学习记

2023-04-20 07:52 Thursday17714min
CC BY 4.0(除特别声明和转载)

在学校时候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]

后面,我们会看到更多返回可迭代对象的函数,和以可迭代对象作为参数的函数。

BuyMeACola