一、python中一切皆对象
1.1、动态语言和静态语言的区别(如python与c++)
- 动态语言:是运行时才确定数据类型的语言,变量在使用之前无需申明类型,通常变量的值是被赋值的那个值的类型。比如Php、Asp、JavaScript、Python、Perl等等。
- 静态语言:是编译时变量的数据类型就可以确定的语言,大多数静态语言要求在使用变量之前必须声明数据类型。比如Java、C、C++、C#等。
区别:
静态语言由于强制声明数据类型,让开发工具(IDE)对代码有很强的判断能力,在实现复杂的业务逻辑和开发大型商业系统、以及那些声明周期很长的应用中,开发者可以依托强大的IDE来更高效、更安全地开发。
动态语言思维不受约束,可以任意发挥,把更多的精力放在产品本身上;集中思考业务逻辑实现,思考过程就是实现过程。
1.2、函数和类也是对象,属于python的一等公民
类是用来实例化对象,但类的本身也是对象。
1.2.1、赋值给一个变量
# 函数
def ask(name='your_name'):
print(name)
#赋值函数给一个变量
my_func = ask
my_func('peter')
1.2.2、可以添加到集合对象中
# 函数
def ask(name='your_name'):
print(name)
# 类
class Person:
def __init__(self):
print('your_name1')
# 列表(集合多对象)
obj_list = []
# 添加函数和类
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
print(item())
1.2.3、可以作为参数传递给函数,可以当作函数的返回值
# 函数
def ask(name='your_name'):
print(name)
def decorator_func():
print('dec start')
return ask
# 类
class Person:
def __init__(self):
print('your_name1')
#赋值函数给一个变量
my_func = ask
my_func('peter')
# 列表(集合多对象)
obj_list = []
# 添加函数和类
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
print(item())
# 函数返回值可以是函数
my_ask = decorator_func()
my_ask('peter')
二、type、object和class的关系
a=1
b="abc"
print(type(1))
print(type(int))
print(type(b))
print(type(str))
class student:
pass
class Mystudent(student):
pass
stu =student()
print(type(stu))
print(type(student))
# 查看基类
print(int.__bases__)
print(str.__bases__)
# 以上基类都是object
print(student.__bases__)
print(Mystudent.__bases__)
# object是最顶层的类,在默认未继承任何父类的类都会继承object
print(type.__bases__)
print(object.__bases__)
# type的基类是object,object的基类是type
print(type(object))
#最后查看object的类型发现为空
type -> int -> 1
type -> class -> object
图中实线箭头代表继承自谁,虚线箭头代表是谁的实例化
三、python中常见的内置类型
3.1、对象的三个特征
身份id(),类型type(),值
a = 1
print(id(a)) #打印其在内存中的地址
print(type(a))
print(a)
注意python中凡是值为None,或者取值为None的都指向同一个地址,也就是说None在全局中只有一个
3.2、python的数值类型
int、float、complex(复数)、bool(布尔值)
3.3、迭代类型
查看后续教程
3.4、序列类型
list、range、tuple、str、array、bytes、bytearray、memoryview(二进制序列)
3.5、映射类型(dict)
3.6、集合类型
set、frozenset(不可修改集合)
注:映射类型和集合类型在python中实现的原理相似,且都具有极高的性能
3.7、上下文管理(with语句)
查看后续教程
3.8、其他类型
模块类型
class和实例
函数类型
方法类型
代码类型(代码本身也会被python解释器变为对象类型)
object对象
type类型
elipsis类型(省略号)
notimplemented类型
结尾:除了其他类型后续的教程都会深入理解以上所有类型,其他类型太过于复杂必须深入python源码才可以说得通
Liu, Deyong
需要相关源代码可以在评论区告知我