1、基础

数据类型 #

1. 整型 #

  • 十进制,1,100,-80。
  • 十六进制,0x开头,0xff00, 0xa5b4c3d2。
  • 允许数字中间用_分割,10_000_000_000等于10000000000,十六进制0xa1b2_c3d4

2. 浮点数 #

  • 字符串是以单引号'或双引号"括起来的任意文本,比如'abc'"xyz"等等。

  • 转义字符\

  • r''表示''内部的字符串默认不转义,print('\\\t\\')输出\ \print(r'\\\t\\')输出\\\t\\

  • '''...'''的格式表示多行内容

    >>> print('''line1
    ... line2
    ... line3''')
    line1
    line2
    line3
    
    # .py文件
    print('''line1
    line2
    line3''')
    
    # 加上r,不转义
    print(r'''hello,\n
    world''')
    

3. 布尔值 #

TrueFalse两种

# and、or和not运算
>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> 5 > 3 and 3 > 1
True


>>> True or True
True
>>> True or False
True
>>> False or False
False
>>> 5 > 3 or 1 > 3
True

>>> not True
False
>>> not False
True
>>> not 1 > 2
True

4. 空值 #

空值是Python里一个特殊的值,用None表示。

5. 字符串 #

  • 字符串类型是str

  • 在Python 3版本中,字符串是以Unicode编码的

  • 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

    >>> ord('A')
    65
    >>> ord('中')
    20013
    >>> chr(66)
    'B'
    >>> chr(25991)
    '文'
    
  • bytes类型的数据用带b前缀的单引号或双引号表示:

    x = b'ABC'
    
  • 以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:

    >>> 'ABC'.encode('ascii')
    b'ABC'
    >>> '中文'.encode('utf-8')
    b'\xe4\xb8\xad\xe6\x96\x87'
    
  • 要把bytes变为str,就需要用decode()方法:

    >>> b'ABC'.decode('ascii')
    'ABC'
    >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
    '中文'
    #errors='ignore'忽略错误的字节
    >>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
    '中'
    
  • len()函数计算的是str的字符数,如果换成byteslen()函数就计算字节数

    >>> len('ABC')
    3
    >>> len('中文')
    2
    >>> len(b'ABC')
    3
    >>> len(b'\xe4\xb8\xad\xe6\x96\x87')
    6
    >>> len('中文'.encode('utf-8'))
    6
    
  • 指定Python源码编码:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
  • 格式化

    • %运算符
    >>> 'Hello, %s' % 'world'
    'Hello, world'
    >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
    'Hi, Michael, you have $1000000.'
    
    >>> print('%2d-%02d' % (3, 1))
    3-01
    >>> print('%.2f' % 3.1415926)
    3.14
    
    #%%来表示一个%
    >>> 'growth rate: %d %%' % 7
    'growth rate: 7 %'
    

    常见的占位符有:

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

      最后一种格式化字符串的方法是使用以f开头的字符串,称之为f-string,它和普通字符串不同之处在于,字符串如果包含{xxx},就会以对应的变量替换:

      >>> r = 2.5
      >>> s = 3.14 * r ** 2
      >>> print(f'The area of a circle with radius {r} is {s:.2f}')
      The area of a circle with radius 2.5 is 19.62
      

      {r}被变量r的值替换,{s:.2f}被变量s的值替换

    • format()

      用传入的参数依次替换字符串内的占位符{0}{1}……

      >>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
      'Hello, 小明, 成绩提升了 17.1%'
      

6. list #

list是一种有序的集合,可以随时添加和删除其中的元素。

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
>>> len(classmates)
3

>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

#获取最后一个元素:-1,类推:-2倒数第二个,-3倒数第三个....
>>> classmates[-1]
'Tracy'

#末尾追加元素
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

#插入元素到指定位置
>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

#删除末尾元素
>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']

#删除指定位置元素
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']

#替换指定位置元素
>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']

#list里面的元素的数据类型也可以不同
>>> L = ['Apple', 123, True]

#list元素也可以是另一个list
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']

#空的list
>>> L = []
>>> len(L)
0

7. tuple #

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。

没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0]classmates[-1],但不能赋值成另外的元素。

#定义一个空的tuple
>>> t = ()
>>> t
()

#定义只有1个元素的tuple,只有1个元素的tuple定义时必须加一个逗号,来消除歧义
>>> t = (1,)
>>> t
(1,)

#tuple元素包含list,list值可变
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

8. 字典(dict) #

dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

# 字典d
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

# 判断key是否存在
>>> 'Thomas' in d
False

# get方法不存在返回None
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1

# 删除key
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

9. set #

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。

# 重复元素在set中自动被过滤
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

# 通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

# remove(key)方法可以删除元素
>>> s.remove(4)
>>> s
{1, 2, 3}

变量 #

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

等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。

t_007 = 'T007'
a = 1
Answer = True

常量 #

通常用全部大写的变量名表示常量:

PI = 3.14159265359

但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI的值,也没人能拦住你。

流程控制 #

条件判断 #

  • if
age = 20
if age >= 18:
    print('your age is', age)
    print('adult')
    
age = 3
if age >= 18:
    print('your age is', age)
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('your age is', age)
    print('teenager')
    
# 只要x是非零数值、非空字符串、非空list等,就判断为True
if x:
    print('True')

循环 #

# for ... in
names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

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)

# continue break