python四大数据类型总结

1、数值型

Python 中的数据皆是对象,比如被熟知的 int 整型对象、float 双精度浮点型、bool 逻辑对象,它们都是单个元素。

2、容器型

可容纳多个元素的容器对象,常用的比如:list 列表对象、 tuple 元组对象、dict 字典对象、set 集合对象。

  • list列表:[ ],可增加修改等操作,类似于常规数组。
  • tuple元组:(),一旦创建不可增删,且只有单个元素时需保留逗号,如(1,),否则会被认为元素本身。
  • dict字典:{ },也就是{key :value}形式,其为一个哈希表。
  • set集合:{ },但区别于字典,其仅使用一对{ }来创建,形如{1, 2, 3}

3、字符串

Python 中所有的字符或串都被统一为 str 对象。如单个字符 c 的类型也为 str。常见字符串操作方法:

  • strip():去除字符串前后的空格。
  • replace():字符串的替换。
  • join():合并字符串。
'_'.join(['book', 'store','count'])
#输出
'book_store_count'
  • title():单词首字母大写
  • find():匹配字符串起始位置索引

除了常见的str封装的字符串操作方法,也提供了re正则匹配:
例1:

功能:密码的安全检查
密码安全要求:
(1)要求密码为 6 到 20 位;
(2)密码只包含英文字母和数字;

python实现:

import re
pat = re.compile(r'\w{6,20}') # 这是错误的,因为 \w 通配符匹配的是字母,数字和下划线,题目要求不能含有下划线
# 使用最稳的方法:\da-zA-Z 满足“密码只包含英文字母和数字”
# \d匹配数字 0-9
# a-z 匹配所有小写字符;A-Z 匹配所有大写字符
pat = re.compile(r'[\da-zA-Z]{6,20}')

#测试,可通过fullmatch方法,匹配不成功返回None,否则返回匹配对象说明
pat.fullmatch('qaz12') # 返回 None,长度小于 6
pat.fullmatch('qaz12wsxedcrfvtgb67890942234343434') # None 长度大于 22
pat.fullmatch('qaz_231') # None 含有下划线

pat.fullmatch('n0passw0Rd')  
#返回 <re.Match object; span=(0, 10), match='n0passw0Rd'>

4、自定义类型

Python 使用关键字 class 定制自己的类,self 表示类实例对象本身。一个自定义类内包括属性、方法,其中有些方法是自带的,可使用__dir__() 查看这些自带方法。

  • 类(对象):
class Dog(object):  
    pass

#定义一个 Dog 对象,它继承于根类 object,pass 表示没有自定义任何属性和方法。
  • 类的属性:
#通过 __init__,定义 Dog 对象的两个属性:name、dtype。
def __init__(self, name, dtype):
     self.name = name
     self.dtype = dtype
  • 类的实例:
#wangwang 是 Dog 类的实例
wangwang = Dog('wangwang','cute_type')
  • 类的方法:
def shout(self):
    print('I\'m %s, type: %s' % (self.name, self.dtype))

注意:
(1)自定义方法的第一个参数必须是 self,它指向实例本身,如 Dog 类型的实例 dog;
(2) 引用属性时,必须前面添加 self,比如 self.name 等;
(3)若要将某个变量或方法变为私有变量或方法,直接在变量名或方法名前加两个’_’;
(4)若要将(3)中的某个类下定义的私有属性改变为只读或只写的特性,可采用@property装饰,如:

class Book(object):
	def __init__(self,name,sale):	
		self.__name = name  #私有
		self.__sale = sale  #私有
	@property
	def name(self):
		return self.__name

a_book = Book('magic_book',100000) #实例化

#直接.name就可访问,而不需要写成:a_book.name()函数调用的形式
a_book.name
#输出: 'magic_book'

(4)若要将(3)中的某个类下定义的私有属性改变为既可读又可写的特性,可增加装饰器@name.setter装饰,也就是在@property装饰之后,加上setter函数再包装已被包装为property实例的name,如:

class Book(object):
	def __init__(self,name,sale):
		self.__name = name #私有
		self.__sale = sale #私有
	@property  
	def name(self):
		return self.__name #只读
	@name.setter
	def name(self,new_name):
		self.__name = new_name #既可读又可写

a_book = Book('magic_book',100000)

a_book.name = 'magic_book_2.0'

a_book.name
#输出: 'magic_book_2.0'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章