0%

Python基础

廖雪峰的官方网站中整理出的一些笔记。

#开头的语句是注释,注释可以是任意内容,解释器会忽略掉注释。

当语句以:结尾时,缩进的语句被视为代码块;Python没有规定代码块要缩进多少数量的SPACETAB

# 此为注释

a=100
b=10
if a>0:
print(a)
else:
print(b)

Python程序对大小写敏感

数据类型和变量

Python能直接处理的数据类型如下:

整数

Python可以处理任意大小的整数(包括负整数),在Python程序中的表示方法和数学上的写法一样。

表示十六进制数要有前缀0x

对于位数较多的数(包括十六进制数),例如10000000000,Python允许在数字之间以_分隔,因此10_000_000_000等效于10000000000

浮点数

Python程序中,浮点数可以用数学写法,如1.233.14-9.01,但对于位数很多或很少的浮点数,就必须用科学计数法来表示,如1.23e91.2e-5

字符串

字符串是以单引号''双引号""括起来的任意文本。

若字符串内既包含单引号,又包含双引号,可以用转义字符\来标识。

>>> print('I\'m \"OK\"!')
I'm "OK"!

转义字符\可以转义很多字符,如:\n表示ENTER\t表示TAB,字符\本身也可转义,\\表示\

>>> print('I\'m learning\nPython.')
I'm learning
Python.
>>> print('\\\n\\')
\
\

若字符串内有多个字符都需要转义,Python允许用r''表示''内的字符串默认不转义

>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\

Python允许用'''...'''表示多行内容。

>>> print('''line1
... line2
... line3''')
line1
line2
line3

布尔值

在Python中,可以直接用TrueFalse表示布尔值

>>> 3>2
True
>>> 3>5
False

布尔值可以用andornot运算。

空值

空值是Python中的一个特殊值,用None表示。None不能理解为0

变量

变量名必须是大小写英文、数字和_的组合,且不能以数字开头。

常量

在Python中,通常用全部大写的变量名来表示常量。

/除法计算结果是浮点数,即使两个整数恰好整除,其结果也是浮点数。

>>> 9/3
3.0

//除法计算结果是整数,即使除不尽。

>>> 10//3
3

%除法计算结果是余数。

>>> 10%3
1

Python的整数没有大小限制;浮点数也没有大小限制,但超出一定范围就直接表示为inf(无限大)。

字符串和编码

在Python 3中,字符串以Unicode进行编码,其字符串支持多语言。

对于单个字符的编码,Python提供了ord()函数获取字符的整数表示。

>>> ord('A')
65
>>> ord('中')
20013
>>> ord('文')
25991

若知道字符的整数编码,则可以用十六进制来表示字符串。

>>> print('\u4E2D\u6587')
中文

由于Python的字符串类型是str,在内存中以Unicode来表示,一个字符对应若干个字节。若要在网络上传输或保存到磁盘,就需要把str转为以字节为单位的bytes

Python对bytes类型的数据用带b前缀的单引号双引号来表示。

以Unicode表示的str通过encode()函数可以编码为指定的bytes

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'

如果从网络或磁盘读取字节流,读取到的数据为bytes,可以用decode()函数将bytes转为str

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

bytes中有一小部分无效的字节,可以通过errors='ignore'忽略错误的字节。

>>> b'\xe4\xb8\xad\xff'.decode('utf-8',errors='ignore')
'中'

可以用len()函数来计算str的字符数或bytes的字节数。

>>> len('ABC')
3
>>> len('中文')
2
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6

当源码中包含中文时,需要指定保存为UTF-8编码;为了让解释器按照UTF-8编码来读取源码,需要在文件开头添加:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告知Linux和macOS,这是一个Python可执行程序,Windows会忽略该行注释;

第二行注释是为了告知解释器,按照UTF-8编码来读取源码。

格式化

在Python中,格式化方式用%实现。

>>> print('x=%d'%(16))
x=16
>>> print('x=%d\ny=%f'%(32,0.64))
x=32
y=0.640000

在字符串内部,%d表示用整数替换,%f表示用浮点数替换。

常用的占位符:

占位符 替换内容
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数

格式化整数和浮点数还可以指定是否补0和整数与浮点数的位数。

>>> print('%10d'%3)
3
>>> print('%010d'%3)
0000000003
>>> print('%.2f'%3.1415926)
3.14

若字符串里的%是一个普通字符,则需要转义,用%%来表示一个%

>>> print('%d%%'%64)
64%

f-string

还有一种格式化字符串的方式是使用以f开头的字符串,称之为f-string

>>> x=8086
>>> print(f'Intel {x}')
Intel 8086
>>> x=3.14159265359
>>> print(f'Pi={x:.2f}')
Pi=3.14

list和tuple

list

Python内置的一种数据类型是列表(list),是一种有序的集合,可以随时添加或删除其中的元素。

>>> OS=['Unix','Linux','Windows']
>>> OS
['Unix', 'Linux', 'Windows']

变量OS就是一个list,用len()函数可以获取其元素的个数。

>>> len(OS)
3

用索引来访问list中每一个位置的元素,索引从0开始。

>>> OS[0]
'Unix'
>>> OS[1]
'Linux'
>>> OS[2]
'Windows'

还可以用-1作索引,直接获取最后一个元素。

>>> OS[-1]
'Windows'

以此类推:

>>> OS[-2]
'Linux'
>>> OS[-3]
'Unix'

可以往list中追加元素到末尾:

>>> OS.append('Android')
>>> OS
['Unix', 'Linux', 'Windows', 'Android']

也可以将元素插入到指定位置:

>>> OS.insert(1,'macOS')
>>> OS
['Unix', 'macOS', 'Linux', 'Windows', 'Android']

删除list末尾的元素用pop()

>>> OS.pop()
'Android'
>>> OS
['Unix', 'macOS', 'Linux', 'Windows']

要删除指定位置的元素,用pop(i)i为索引位置。

>>> OS.pop(1)
'macOS'
>>> OS
['Unix', 'Linux', 'Windows']

要将某个元素替换为其它元素,可以直接赋值给对应的位置。

>>> OS[1]='Ubuntu'
>>> OS
['Unix', 'Ubuntu', 'Windows']

list中的元素的数据类型可以不同。

list元素也可以是另一个list

>>> OS1=['Unix',['Ubuntu','Debian'],'Android']
>>> len(OS1)
3
>>> OS1[1][1]
'Debian'

tuple

元组(tuple)是另一种有序列表,但是,tuple一旦初始化就不能修改(tuple的每个元素,指向永远不变,即指向'a',就不能修改为指向'b')。

>>> Linux=('Ubuntu','Debian','Kali Linux')
>>> Linux
('Ubuntu', 'Debian', 'Kali Linux')

在定义一个tuple的时候,其元素就必须被确定下来。

如果要定义一个只有1个元素tuple,必须加一个,,如下:

>>> t=(1,)
>>> t
(1,)

*

>>> m=('a','b',['A','B'])
>>> m[2][0]='X'
>>> m[2][1]='Y'
>>> m
('a', 'b', ['X', 'Y'])

表面上看,tuple的元素确实被改变了,但其实被改变的不是tuple的元素,而是list的元素,tuple一开始指向的list并没有被改为指向其它对象,但指向的这个list本身是可变的。

循环

for…in…

sum=0
for x in [1,2,3,4,5,6,7,8,9,10]:
sum=sum+x
print(sum)

Python提供的range()函数可以生成一个整数序列,再通过list()函数转换为list

>>> list(range(5))
[0, 1, 2, 3, 4]
sum=0
for x in range(101):
sum=sum+x
print(sum)

while

sum=0
n=99
while n>0:
sum=sum+n
n=n-2
print(sum)

break

n=1
while n<=100:
if n>10:
break
print(n)
n=n+1
print('END')
PS C:\Users\28935> python -u "f:\.Visual Studio Code\build\11.py"
1
2
3
4
5
6
7
8
9
10
END

continue

n=0
while n<10:
n=n+1
if n%2==0:
continue
print(n)
PS C:\Users\28935> python -u "f:\.Visual Studio Code\build\11.py"
1
3
5
7
9

参考资料

Python教程