Python3中有六个标准的数据类型:1、Number(数字),2、String(字符串),3、List(列表),4、Tuple(元组),5、Sets(集合),6、Dictionary(字典)。
1、Number(数字)
Python3 支持 int、float、bool、complex(复数)。
type()与isinstance()比较:1、isinstance()会认为子类是一种父类类型;2、type()不会认为子类是一种父类类型。
a,b,c,d=123,123.456,True,21j
#
print(type(a),type(b),type(c),type(d))
a,b,c,d=123,123.456,True,21j
# True
print(isinstance(a, int))
# True
print(isinstance(b,float))
# True
print(isinstance(c,bool))
# True
print(isinstance(d,complex))
# True True True True
print(isinstance(a,int),isinstance(b,float),isinstance(c,bool),isinstance(d,complex))
class A:
id=1
class B(A):
id=1
# True
print(isinstance(A(),A))
# True
print(type(A())==A)
# True
print(isinstance(B(),A))
# False
print(type(B())==A)
2、String(字符串)
Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠(\)转义特殊字符。
str = 'what21'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始的后的所有字符
print(str * 2) # 输出字符串两次
print(str + ".com") # 连接字符串
str = 'what21 com'
print(str)
3、List(列表)
(1)、列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
(2)、列表是写在方括号([])之间、用逗号分隔开的元素列表。
(3)、和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
list = ['123', 456 , 7.89, 'what21', "com"]
list2 =["www",'小奋斗']
# ['123', 456, 7.89, 'what21', 'com']
print(list)
# 123
print(list[0])
# ['123', 456, 7.89]
print(list[0:3])
# [456, 7.89, 'what21', 'com']
print(list[1:])
# ['123', 456, 7.89, 'what21', 'com', '123', 456, 7.89, 'what21', 'com']
print(list*2) # 输出两次列表
# ['123', 456, 7.89, 'what21', 'com', 'www', '小奋斗']
print(list + list2)
4、Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。
tuple = ('123', 456 , 7.89, 'what21', "com")
tuple2 =["www",'小奋斗']
# ('123', 456, 7.89, 'what21', 'com')
print(tuple)
# 123
print(tuple[0])
# ('123', 456, 7.89)
print(tuple[0:3])
# (456, 7.89, 'what21', 'com')
print(tuple[1:])
# ('123', 456, 7.89, 'what21', 'com', '123', 456, 7.89, 'what21', 'com')
print(tuple*2) # 输出两次列表
5、Set(集合)
(1)、集合(set)是一个无序不重复元素的序列。
(2)、基本功能是进行成员关系测试和删除重复元素。
(3)、可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
person={"zhangsan","lisi","wangwu","zhaoliu"}
print(person);
if('zhangsan' in person):
print("zhangsan在集合中")
else:
print("zhangsan不在集合中")
a = set('what21')
b = set("com")
print(a)
print(b)
print(a-b) # a和b的差集
print(a|b) # a和b的并集
print(a&b) # a和b的交集
print(a^b) # a和b中不同时存在的元素
6、Dictionary(字典)
(1)、列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
(2)、字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合。
(3)、键(key)必须使用不可变类型。
(4)、在同一个字典中,键(key)必须是唯一的。
dict = {}
dict['one'] = "小奋斗"
dict[2] = "www.what21.com"
dict2 = {'name': '小奋斗','code':1, 'site': 'www.what21.com'}
print (dict['one']) # 输出键为 'one' 的值
print (dict[2]) # 输出键为 2 的值
print (dict2) # 输出完整的字典
print (dict2.keys()) # 输出所有键
print (dict2.values()) # 输出所有值
7、迭代器
(1)、迭代器有两个基本的方法:iter() 和 next()。
(2)、字符串,列表或元组对象都可用于创建迭代器。
import sys
str = 'what21'
list = ['123', 456 , 7.89, 'what21', "com"]
tuple = ('123', 456 , 7.89, 'what21', "com")
person={"zhangsan","lisi","wangwu","zhaoliu"}
'''迭代1'''
it = iter(str)
for x in it:
print (x, end=" | ")
print()
"""迭代2"""
it2=iter(tuple);
for a in it2:
print(a,end=" , ");
print()
# 迭代3 #
itr = iter(list);
while True:
try:
print(next(itr), end=" | ")
except StopIteration:
sys.exit()
8、数据类型转换
(1)、int(x [,base]),将x转换为一个整数。
(2)、float(x),将x转换到一个浮点数。
(3)、complex(real [,imag]),创建一个复数。
(4)、str(x),将对象 x 转换为字符串。
(5)、repr(x),将对象 x 转换为表达式字符串。
(6)、eval(str),用来计算在字符串中的有效Python表达式,并返回一个对象。
(7)、tuple(s),将序列 s 转换为一个元组。
(8)、list(s),将序列 s 转换为一个列表。
(9)、set(s),转换为可变集合。
(10)、dict(d),创建一个字典。d 必须是一个序列 (key,value)元组。
(11)、frozenset(s),转换为不可变集合。
(12)、chr(x),将一个整数转换为一个字符。
(13)、ord(x),将一个字符转换为它的整数值。
(14)、hex(x),将一个整数转换为一个十六进制字符串。
(15)、oct(x),将一个整数转换为一个八进制字符串。
1、函数能提高应用的模块性,和代码的重复利用率。2、参数传递为,可更改(mutable)与不可更改(immutable)对象。3、闭包和装饰器。
1、函数的使用
(1)、global语句可以起到声明变量作用域。
(2)、函数的不可变类型:类似其他语言的值传递,数值、字符串和元组为不可变类型。
(3)、如fun(a),传递的只是a的值,没有影响a对象本身。比如在fun(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。
'''函数'''
def hello():
print("hello function!");
hello()
def p_num():
global num
print(num)
num=50
num=20
p_num()
print(num)
def area(width, height):
return width * height
def welcome(name):
print("www.what21", name)
welcome(".com")
width = 40
height = 50
print("width =", width,",height =", height,",area =", area(width, height))
2、函数的不可变类型
(1)、函数的不可变类型:类似其他语言的值传递,数值、字符串和元组为不可变类型。
(2)、如fun(a),传递的只是a的值,没有影响a对象本身。比如在fun(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。
def ChangeList(mylist):
"修改传入的列表"
mylist.append([1, 2, 3, 4])
# 函数内取值: [10, 20, 30, [1, 2, 3, 4]]
print("函数内取值: ", mylist)
return
# 调用changeme函数
mylist = [10, 20, 30]
ChangeList(mylist)
# 函数外取值: [10, 20, 30, [1, 2, 3, 4]]
print("函数外取值: ", mylist)
3、函数的内部作用域
(1)、当内部作用域需要修改外部作用域的变量时,就要用到global和nonlocal关键字。
(2)、如果需要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要nonlocal关键字。
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
4、装饰器
(1)、装饰器的本质:一个闭包函数。
(2)、装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展。
def w1(func):
def inner():
print(" 验证1")
print(" 验证3")
print(" 验证4")
return func()
return inner
@w1
def f1():
print( 'f1')
@w1
def f2():
print('f2')
@w1
def f3():
print('f3')
@w1
def f4():
print('f4')
import time
def timer(func):
def inner():
start = time.time()
func()
end=time.time()
print(end - start)
return inner
print(time.time());
@timer #==> func1 = timer(func1)
def func1():
print('in func1')
func1()
1、概念
(1)、类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法,对象是类的实例。
(2)、类变量:类变量在整个实例化的对象中是公用的,类变量定义在类中且在函数体之外,类变量通常不作为实例变量使用。
(3)、数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
(4)、方法重载:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
(5)、实例变量:定义在方法中的变量,只作用于当前实例的类。
(6)、继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
(7)、实例化:创建一个类的实例,类的具体对象。
(8)、方法:类中定义的函数。
(9)、对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
(10)、多继承:Python支持多继承。
2、案例1
class User:
height=1.65
weight=120
def __init__(self,name,height,weight):
self.name=name
self.height=height
self.weight=weight
def info(self):
print(self.__class__)
print("姓名:",self.name,",身高:",self.height,",体重:" ,self.weight)
zhangsan = User("张三",1.65,120)
zhangsan.info()
lisi = User("李四",1.55,140)
lisi.info()
print(id(zhangsan), id(lisi))
print(zhangsan==lisi)
print(isinstance(zhangsan,User))
print(isinstance(lisi,User))
print(type(zhangsan)==User)
print(type(lisi)==User)
(1)、_init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
(2)、self代表类的实例,self在定义类的方法时是必须有的。
3、案例2
class User:
height=1.65
weight=120
def __init__(self,name,height,weight):
self.name=name
self.height=height
self.weight=weight
def info(self):
print(self.__class__)
print("姓名:",self.name,",身高:",self.height,",体重:" ,self.weight)
class Admin(User):
def setName(self,name):
User.name = name;
def setHeight(self,height):
User.height = height;
def setWeight(self,weight):
User.weight = weight;
def info(self):
print(self.__class__)
print(User.__class__)
print("姓名:", User.name, ",身高:", User.height, ",体重:", User.weight)
zhangsan = Admin("",0,0);
zhangsan.setName("张三")
zhangsan.setHeight(1.65)
zhangsan.setWeight(120)
zhangsan.info()
lisi = Admin("李四",1.55,140)
lisi.info()
(1)、实例d调用foo()时,搜索顺序是:D => C1 => C2 => P1。
(2)、实例d调用bar()时,搜索顺序是:D => C1 => C2。
(3)、可以看出,新式类的搜索方式是采用“广度优先”的方式去查找属性。
(4)、pass关键字,不做任何事情,一般用做占位语句。
(5)、其中:1、共有变量,直接字母开头;2、私有变量,使用__开头;3、@classmethod,装饰器函数。
1、概念
Python提供了异常处理和断言(Assertions)功能来处理程序在运行中出现的异常和错误。
2、异常应用
try:
fh = open("testfile", "w")
fh.write("test except!!!")
except IOError:
print ("Error: not found file or read file error")
else:
print("内容写入文件成功")
fh.close()
try:
fh = open("testfile", "w")
try:
fh.write("test except!!!")
finally:
print("关闭文件")
fh.close()
except IOError:
print("Error: 没有找到文件或读取文件失败")
(1)、当在try块中抛出一个异常,立即执行finally块代码。
(2)、finally块中的所有语句执行后,异常被再次触发,并执行except块代码。
3、自定义异常
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try:
raise MyError(2*2)
except MyError as e:
print('抛出自定义异常, value:', e.value)
(1)、通过继承Exception类,来创建一个新的Exception类,可以直接继承或者间接继承。
(2)、raise指定了要被抛出的异常。
4、Python标准异常
BaseException->所有异常的基类
SystemExit->解释器请求退出
KeyboardInterrupt->用户中断执行(通常是输入^C)
Exception->常规错误的基类
StopIteration->迭代器没有更多的值
GeneratorExit->生成器(generator)发生异常来通知退出
StandardError->所有的内建标准异常的基类
ArithmeticError->所有数值计算错误的基类
FloatingPointError->浮点计算错误
OverflowError->数值运算超出最大限制
ZeroDivisionError->除(或取模)零 (所有数据类型)
AssertionError->断言语句失败
AttributeError->对象没有这个属性
EOFError->没有内建输入,到达EOF 标记
EnvironmentError->操作系统错误的基类
IOError->输入/输出操作失败
OSError->操作系统错误
WindowsError->系统调用失败
ImportError->导入模块/对象失败
LookupError->无效数据查询的基类
IndexError->序列中没有此索引(index)
KeyError->映射中没有这个键
MemoryError->内存溢出错误(对于Python 解释器不是致命的)
NameError->未声明/初始化对象 (没有属性)
UnboundLocalError->访问未初始化的本地变量
ReferenceError->弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError->一般的运行时错误
NotImplementedError->尚未实现的方法
SyntaxError->Python 语法错误
IndentationError->缩进错误
TabError->Tab 和空格混用
SystemError->一般的解释器系统错误
TypeError->对类型无效的操作
ValueError->传入无效的参数
UnicodeError->Unicode 相关的错误
UnicodeDecodeError->Unicode 解码时的错误
UnicodeEncodeError->Unicode 编码时错误
UnicodeTranslateError->Unicode 转换时错误
Warning->警告的基类
DeprecationWarning->关于被弃用的特征的警告
FutureWarning->关于构造将来语义会有改变的警告
OverflowWarning->旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning->关于特性将会被废弃的警告
RuntimeWarning->可疑的运行时行为(runtime behavior)的警告
SyntaxWarning->可疑的语法的警告
UserWarning->用户代码生成的警告
1、概念
(1)、Python模块(Module)是一个Python文件,以.py 结尾,包含了Python对象定义和Python语句。
(2)、模块能够有逻辑地组织Python代码段。
(3)、把相关的代码分配到一个模块里,让代码更好用,更易懂。
(4)、模块能定义函数,类和变量,模块里也能包含可执行的代码。
(5)、导入语法:模块名.函数名
(6)、语法:from math import *
2、案例
user.py
class User:
height=1.65
weight=120
def __init__(self,name,height,weight):
self.name=name
self.height=height
self.weight=weight
def info(self):
print(self.__class__)
print("姓名:",self.name,",身高:",self.height,",体重:" ,self.weight)
class Admin(User):
def setName(self,name):
User.name = name;
def setHeight(self,height):
User.height = height;
def setWeight(self,weight):
User.weight = weight;
def info(self):
print(self.__class__)
print(User.__class__)
print("姓名:", User.name, ",身高:", User.height, ",体重:", User.weight)
main.py
import user
zhangsan = user.Admin("",0,0);
zhangsan.setName("张三")
zhangsan.setHeight(1.65)
zhangsan.setWeight(120)
zhangsan.info()
lisi = user.Admin("李四",1.55,140)
lisi.info()
当导入一个模块,Python解析器对模块位置的搜索顺序是:1、当前目录。2、如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
留言与评论(共有 0 条评论) “” |