目录 

1、数据类型和变量

2、字符串和编码

3、使用list和tuple

4、条件判断

5、循环

6、字典(dict)和集合(set)

1、数据类型和变量

整数:

浮点数:小数 。可以用数学写法如:1.33,也可以用科学计数法如:1.23e-5。 

整数和浮点数在计算机内部的存储方式是不同的,整数运算永远是精确的(包括除法),而浮点数运算可能会有四舍五入的误差。

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

转义字符 \:

\n:换行

\t:制表

\\:\

r' ':表示' '内的字符串默认不转义

''' ...''' :表示换行,可以有很多换行,如:

print('''line1
line2
line3''')

输出为:

line1
line2
line3

布尔值:ture false

布尔值可以用and、or、not来计算。

空值None

python中有哪些可以生成汉字的三方库_ico

变量:大小写英文、数字和 _ 的组合,不能用数字开头。

注意:变量本身类型不固定的语言称为动态语言,与之对应的是静态语言(Java为静态语言:比如不能把字符串赋给整数型变量)

常量

2、字符串和编码

字符编码:

字符     

  ASCII   

  Unicode 

UTF-8


01000001

00000000 01000001

 01000001


x

01001110  00101101

11100100 10111000 10101101

 ASCII 编码:一个字节表示1个字符。

Unicode 编码:两个字节表示一个字符(特别偏僻的字符用4个字节)。支持多语言。

问题是:若写的文本全是英文,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算,所以有了UTF-8编码。

UTF-8编码:可变长编码。1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个。只有很生僻的字符才是4-6个字节。

计算机系统通用的字符编码工作方式:

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

Python字符串

在python3中,字符串以Unicode编码

对于单个字符编码:

ord( ) :获取字符的整数表示        例:>>>ord('A')    输出:65

chr( ):把整数编码转换为对应的字符     例:>>>chr(25991)    输出:文

python的字符串类型是 str ,在内存中以Unicode表示。若要在网络上传输,或者保存到磁盘上,需要把 str 变为以字节为单位的 bytes。

x  =  b'ABC'

以Unicode表示的 str 可以用 encode( ) 方法编码为指定的 bytes ,例:

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8') #含有中文的 str 无法用ASCII编码
b'\xe4\xb8\xad\xe6\x96\x87'

如果我们从网络或磁盘上读取了字节流,那么读到的数据就是 bytes。要把 bytes变为 str,就需要用decode( ) 

>>> 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( )计算字节 ,还可以计算列表中的元素

>>>len('ABC')          输出 : 3           计算 str 包含多少个字符
>>>len('中文'.encode('utf-8'))       输出:6  计算 bytes  中文的字符数

 当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

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

格式化

例:>>>'Hello,%s' %'world'  输出:'Hello,world'

常见的占位符

占位符

替换内容

%d

整数

%f

浮点数

%s

字符串

%x

十六进制整数

其中,%d和%f 可以指定是否补0和整数与小数的位数;

print('%2d-%02d'  % (3,1))      输出:3-01
print('%.2f'  %  3.1515926)      输出:3-14

用%%来表示字符%

format( )  会用传入的参数依次替换字符串内的占位符{0}、{1},比%要麻烦。

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

3、使用list和tuple

列表 list 和元组 tuple 都是一个可以放置任意数据类型的有序集合

l = [1, 2, 'hello', 'world'] # 列表中同时含有 int 和 string 类型的元素
tup = ('jason', 22) # 元组中同时含有 int 和 string 类型的元素
  • 列表[ ]是动态的,长度大小不固定,可以任意的增加、删减或者改变元素(mutable),存储空间略大于元组,性能略逊于元组。
  • 元组( )是静态的,长度大小固定,无法增加、删减或者改变(immutable),元组相当于列表更加轻量级,性能稍优。 

索引是从0开始,最后一个为len(list())-1,还可以用-1来表示最后一个元素。-2,-3...

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates.append('Adam')          追加元素到表末尾
>>> classmates.insert(1,'Jack')            追加元素到索引号为1的位置
>>> classmates.pop()                           删除列表末尾的元素
>>> classmates.pop(i)                           删除列表中索引 i 的元素
>>> classmates[i]='simom'                     给列表中

若要定义一个空的tuple 可以写成( ): t=( )

但是,要定义一个只有一个元素的tuple,若t=(1),则默认为t=1;正确的写法应该是t=(1,)

一个‘“可变”的tuple:

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

注意:表面上看,tuple的元素确实变了,但其实变得不是tuple的元素,而是list的元素。tuple一开始指向的list并没有指向别的list,所以tuple的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能指向'b',指向一个list,就不能指向其他对象,但指向的这个list本身是可变的。

1、list和tuple都可以随意嵌套

2、两者可以通过list( )和tuple( )函数相互转换

  • list和tuple常用的内置函数:
list.count(item)   表示统计列表(元组)中item出现的次数
list.index(item)    表示列表(元组)中item第一次出现的索引
list.reverse()            表示原地倒转列表(元组不可以)
list.sort()                  表示对列表内的元素排序(元组不可以)
list._sizeof_()            计算列表(元组)的存储空间
  • 元组和列表存储方式的差异:

对列表空间的分配,为了减小每次增加/删除操作是空间分配的开销,Python每次分配空间都会额外多分配一些,(over-allocating)保证其操作的高效性。

  • 列表和元组的性能:

1、元组比列表更加轻量级,总体上来说,元组的性能略优于列表;

2、Python会在后台对静态数据做一些资源缓存,初始化一个相同元素的元组比列表快。

但如果是索引操作的话,速度几乎一样

4、条件判断

if 语句的完整形式:

if <条件判断1>:
                     <执行1>
            elif <条件判断2>:
                     <执行2>
            elif <条件判断3>:
                    <执行3>
            else:
                    <执行4>

if语句是从上往下判断,若在某个判断上是 ture,把该判断对应的语句执行后就会忽略剩下的elif和else。

简写

if x:
    print('True')

只要 x 是非零数值、非空字符串、非空list等,就判断为ture,否则为false。

5、循环

(1)for循环

for x in...把每个元素代入变量x,然后执行缩进块语句

range( )

sum = 0                                         #计算1-100的整数和
             for x in range(101):
                     sum = sum + x
             print(sum)

(2)while循环

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

break 提前退出循环

continue 跳过当前的这次循环,直接开始下一次循环

都需要配合if 语句

ctrl+c 强制结束python进程

6、字典(dict)和集合(set)

字典:一系列由键(key)和值(value)配对组成的元素的集合,在python3.7+中,字典被确定为有序。

相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。是用空间来换取时间的一种方法。

集合:与字典基本相同,唯一区别就是没有键和值的配对,是一系列无序的、唯一的元素组合

创建:

#创建字典
d1 = {'name': 'jason', 'age': 20, 'gender': 'male'}
d2 = dict({'name': 'jason', 'age': 20, 'gender': 'male'})
d3 = dict([('name', 'jason'), ('age', 20), ('gender', 'male')])
d4 = dict(name='jason', age=20, gender='male') 
d1 == d2 == d3 ==d4
True
#创建集合
s1 = {1, 2, 3}
s2 = set([1, 2, 3])          
s1 == s2
True

记:dict中的key必须是不可变对象

访问:

1、直接索引 键
>>>d1['name']
>>>'jason'
2、使用get(key,default)来索引,若键不存在,调用get()函数可以返回一个默认值(default)
>>>d1.get('location','null')          #location不存在,返回null

注意:集合不支持索引,因为集合本质上是一个哈希表,和列表不一样

判断一个元素是否在字典或者集合内 用 value in dict/set

增加、删除、更新

>>>d['gender'] = 'male'                # 增加元素对'gender': 'male'
>>>d['dob'] = '1999-02-01'           # 增加元素'dob'
>>>d['dob'] = '1998-01-01'            # 更新键'dob'对应的值 
>>>d.pop('dob')                             # 删除键为'dob'的元素对
s = {1, 2, 3}
s.add(4)                                          # 增加元素 4 到集合
s.remove(4)                                    # 从集合中删除元素 4

注意:集合的 pop() 操作是删除集合中最后一个元素,可是集合本身是无序的,你无法知道会删除哪个元素,因此这个操作得谨慎使用。

排序:

对于字典,可以根据键或者值来排序。

>>>d = {'b': 1, 'a': 2, 'c': 10}
              >>>d_sorted_by_key = sorted(d.items(), key=lambda x: x[0])              # 根据字典键的升序排序
              >>>d_sorted_by_value = sorted(d.items(), key=lambda x: x[1])            # 根据字典值的升序排序

对于集合,直接调用sorted(set)即可。

集合:

1、重复元素在set中自动过滤

2、set可以看做数学意义上的无序和无重复元素的集合,所以两个set可以做数学上的交集、并集、等操作

>>> s1 & s2           #交集
            >>> s1 | s2             #并集