基本数据类型

标准数据类型

Python3 中有六个标准的数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Sets(集合)
  • Dictionary(字典)

a = 10.

内置的 type(a) 函数可以用来查询变量所指的对象类型。

dir(a)可以查看内置函数名称,help()查看内置函数功能,或者help(type(a))。

n1 = 123

n2 = 123

Python内部优化, -5~256 ,占用同一内存地址。查看内存地址: id(变量名)

几本数据类型常用功能:

int类型

bit.length() 

str类型

def capitalize(self):  
""" 首字母变大写 """
def center(self, width, fillchar=None):  
""" 内容居中,width:总长度;fillchar:空白处填充内容,默认无 """
def count(self, sub, start=None, end=None):  
""" 子序列个数 """
def endswith(self, suffix, start=None, end=None):  
""" 是否以 xxx 结束 """
def expandtabs(self, tabsize=None):  
""" 将tab转换成空格,默认一个tab转换成8个空格 """
def find(self, sub, start=None, end=None):  
""" 寻找子序列位置,如果没找到,返回 -1 """
def format(*args, **kwargs): # known special case of str.format
""" 字符串格式化,动态参数,将函数式编程时细说 """
**************************
s = "hello {0}, age {1}"
print(s)
#{0} {1} 可以作为占位符
new1 = s.format("alex", 19)
print(new1)
**************************

def index(self, sub, start=None, end=None):  
""" 子序列位置,如果没找到,报错 """
跟find类似,但是find返回-1,index报错

def isalnum(self):              def isalpha(self):               def isdigit(self): 
""" 是否是字母和数字 """          """ 是否是字母 """                 """ 是否是数字 """
def join(self, iterable):        ###iterable 可迭代的
""" 连接 """
********************************
li = ["alex", "lilei", "xiaoming"]
"_".join(li)
********************************
def ljust(self, width, fillchar=None):  
""" 内容左对齐,右侧填充 """
def replace(self, old, new, count=None):  
""" 替换 """
def lower(self):  
""" 变小写 """
def lstrip(self, chars=None):  
""" 移除左侧空白 """
def partition(self, sep):  
""" 分割,前,中,后三部分 """
def split(self, sep=None, maxsplit=None):  
"""分割, maxsplit最多分割几次"""

字符串索引和切片
变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。>=头下标,<尾下标。
s = "alex"
s[0]
索引
s[0:2]
切片
len(s) 字符串长度
for item in s:
  print(item)

List列表
变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。
list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
list[0] 索引
list[0:2] 切片
len(list) 列表长度
del list[1] 删除指定元素
for item in list:
  print(item)
def append(self, p_object):
""" 在列表后边追加元素 """
def count(self, value): 
""" 统计元素出现的次数 """
def extend(self, iterable): 
""" iterable,可迭代的(只要能用for循环的都是可迭代的),批量添加元素到列表 """
def index(self, value, start=None, stop=None):
""" 获取某个元素 """
def insert(self, index, p_object): 
""" 在某个位置插入元素 """
def pop(self, index=None): 
""" 移除列表中尾部元素并返回这个元素 """
def remove(self, value):
""" 移除某个元素 """
def reverse(self): 
""" 反转列表中元素顺序 """
tuple元祖
元组(tuple)与列表类似,不同之处在于元组的元素不能修改,元祖的元素可以被修改。元组写在小括号(())里,元素之间用逗号隔开。
name_tuple = ("alex", "lilei", "xiaoming")
name_tuple[0]
name_tuple[0:2]

def count(self, value): 
""" 计算元素出现的次数 """
def index(self, value, start=None, stop=None): 
""" 获取指定元素的索引位置 """

set集合
集合(set)是一个无序不重复元素的序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

def add(self, *args, **kwargs):
""" 添加 """
def clear(self, *args, **kwargs): 
""" 清除所有元素 """
def difference(self, *args, **kwargs): 
""" 找两个集合中的不同元素 """
def difference_update(self, *args, **kwargs):
""" 删除当前set中的所有包含在 new set 里的元素 """
def discard(self, *args, **kwargs): 
""" 移除元素 """
def intersection(self, *args, **kwargs): 
""" 取交集,新创建一个set """
def intersection_update(self, *args, **kwargs):
""" 取交集,修改原来set """
def isdisjoint(self, *args, **kwargs):
""" 如果没有交集,返回true  """
def issubset(self, *args, **kwargs):
""" 是否是子集 """
def issuperset(self, *args, **kwargs): 
""" 是否是父集 """
def remove(self, *args, **kwargs):
""" 移除,跟discard功能相同,但是如果没有会报错,discard不会 """
def pop(self, *args, **kwargs): 
""" 移除并返回移除的值 """
def symmetric_difference(self, *args, **kwargs): 
""" 差集,创建新对象"""
def symmetric_difference_update(self, *args, **kwargs): 
""" 差集,改变原来 """
def union(self, *args, **kwargs): 
""" 并集 """
def update(self, *args, **kwargs): 
""" 更新 """
dict字典
字典是一种映射类型,键值对,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合。

user_info = { "name": "alex", "age": 73, "gender": "M"}
user_info["name"] 索引
user_info.keys() 获取所有的键
user_info.values() 获取所有的值
user_info.items() 获取所有的键值对
del user_info["name"]
for item in user_info: 默认循环输出的是键
  print(item)
for k, v in user_info.items():
  print(k, v)

def clear(self):
""" 清除内容 """
def get(self, k, d=None): 
""" 根据key获取值,d是默认值 """
def items(self): 
""" 所有项的列表形式 """
def pop(self, k, d=None):
""" 获取并在字典中移除 """
def update(self, E=None, **F):
""" 更新 """

enumerate 为可迭代的对象添加序号

li = [11, 22, 33]
for key, item in enumerate(li, 1):
  print(key, item)

bytes类型
UTF-8编码,一个汉字,3个字节
gbk编码,一个汉字,2个字节

三元运算

result = 值1 if 条件 else 值2

如果条件为真:result = 值1

如果条件为假:result = 值2

 

bytes和str之间的异同

回到bytesstr的身上。bytes是一种比特流,它的存在形式是01010001110这种。我们无论是在写代码,还是阅读文章的过程中,肯定不会有人直接阅读这种比特流,它必须有一个编码方式,使得它变成有意义的比特流,而不是一堆晦涩难懂的01组合。因为编码方式的不同,对这个比特流的解读也会不同,对实际使用造成了很大的困扰。下面让我们看看Python是如何处理这一系列编码问题的:

>>> s = "中文"
>>> s
'中文'
>>> type(s)
<class 'str'>
>>> b = bytes(s, encoding='utf-8')
>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>

从例子可以看出,s是个字符串类型。Python有个内置函数bytes()可以将字符串str类型转换成bytes类型,b实际上是一串01的组合,但为了在ide环境中让我们相对直观的观察,它被表现成了b'\xe4\xb8\xad\xe6\x96\x87'这种形式,开头的b表示这是一个bytes类型。\xe4是十六进制的表示方式,它占用1个字节的长度,因此”中文“被编码成utf-8后,我们可以数得出一共用了6个字节,每个汉字占用3个,这印证了上面的论述。在使用内置函数bytes()的时候,必须明确encoding的参数,不可省略。

我们都知道,字符串类str里有一个encode()方法,它是从字符串向比特流的编码过程。而bytes类型恰好有个decode()方法,它是从比特流向字符串解码的过程。除此之外,我们查看Python源码会发现bytesstr拥有几乎一模一样的方法列表,最大的区别就是encodedecode

从实质上来说,字符串在磁盘上的保存形式也是01的组合,也需要编码解码。

如果,上面的阐述还不能让你搞清楚两者的区别,那么记住下面两几句话:

  1. 在将字符串存入磁盘和从磁盘读取字符串的过程中,Python自动地帮你完成了编码和解码的工作,你不需要关心它的过程。

  2. 使用bytes类型,实质上是告诉Python,不需要它帮你自动地完成编码和解码的工作,而是用户自己手动进行,并指定编码格式。

  3. Python已经严格区分了bytesstr两种数据类型,你不能在需要bytes类型参数的时候使用str参数,反之亦然。这点在读写磁盘文件时容易碰到。

在bytes和str的互相转换过程中,实际就是编码解码的过程,必须显式地指定编码格式。

>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>
>>> s1 = str(b)
>>> s1
"b'\\xe4\\xb8\\xad\\xe6\\x96\\x87'"
>>> type(s1)
<class 'str'>
>>> s1 = str(b, encoding='utf-8')
>>> s1
'中文'
>>> type(s1)
<class 'str'>

我们再把字符串s1,转换成gbk编码的bytes类型:

>>> s1
'中文'
>>> type(s1)
<class 'str'>
>>> b =  bytes(s1, encoding='gbk')
>>> b
b'\xd6\xd0\xce\xc4'
list:创建列表,将其他元素转换成列表
s1 = "李璐"
l1 = list(s1)

注意:
一般字符串,执行一个功能,生成一个新内容,原来内容不变
list,tuple,dict, 执行一个功能,自身进行变化

作业:

一、元素分类
有如下值集合[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。

二、查找
查找列表中元素,移动空格,并查找以a或A开头并且以c结尾的所有元素。
li = ["laec", "aric", "Alex", "Tony", "rain"]
tu = ("alec", "aric", "Alex", "Tony", "rain")
dic = {"k1": "alex", "k2": "aric", "k3": "Alex", "k4": "Tony"}

三、输出商品列表,用户输入序号,显示用户选中的商品
商品 li = ["手机", "电脑", "显示器", “游艇”]

四、购物车
功能要求:
  要求用户输入总资产,例如:2000
  显示商品列表,让用户更具序号选择商品, 加入购物车
  购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功
  附加:可充值,某商品移除购物车

goods = [
  {"name": "电脑", "price": 1990},
  {"name": "鼠标", "price": 10},
  {"name": "游艇", "price": 20},
  {"name": "美女", "price": 998},
]

五、用户交互,显示省市县三级联动的选择

dic = {
  "河北": {
    "石家庄": ["鹿泉", "藁城", "元氏"],
    "邯郸": ["永年", "涉县", "磁县"],
  }
  "河南": {
    ...
  }
  "山西": {
    ...
  }
}
posted @ 2018-01-28 14:25  oele  阅读(533)  评论(0)    收藏  举报