python的本质-----对象

python的底层是一块块的内存空间,每块内存空间由三部分组成:地址编号,类型,数据值
这些内存空间就是对象,数据值被称为属性,其中,可调用执行的属性称为方法
调用对象的方法,是python这门语言的价值所在
为了方便使用这一块块的内存空间,我们给每块内存空间取一个或多个名字,我们把内存空间的名字称为引用,或者是更通俗的叫法-----变量

python的特性-----简洁

python对简洁的追求超乎想象,体现在:
弱类型:不需要人为指定对象的类型
语法简洁:没有分号,大括号
方法简洁:没有权限,返回值修饰符

python的本质是对象,掌握了对象的创建,初始化以及使用,就掌握了这门语言
类是多个对象共性的抽象,包含了公共的属性,对这些属性的运用是我们学习的核心所在

必须掌握的类属性

先捋清楚python中的类和对象:
python万物皆对象,而对象一定对应一个类,对象的属性由类决定
object类的属性被所有对象共享,下面重点介绍object类的属性

'''
类的属性可以由
类名.属性名
直接调用,
如果是类的方法的话,需要再加个括号并传入该类对象及其他参数
'''

obj = object()
# 1.查看该对象的所有属性
print(object.__dir__(obj))

# 2.查看该类的所有父类
print(object.__mro__)

必须要掌握的类

包括:
数字类:int,float,complex(复数)
布尔类:bool
序列类:str, tuple(元组), list
映射类:dict(字典)

int

这里着重介绍int类,其他类型同理
int(),相当于调int类的init方法,可以接受多种类型的参数,并构造出一个int对象,也就是所谓的类型转换
int类内置了许多方法,大部分是有关数学运算方面,可以通过int.方法名()调用

a = int(10)
b = 10
print(int.__add__(a, b))
print(int.__mul__(a, b))
print(int.__abs__(a))

序列

小括号是元组,中括号是列表,单,双,三引号都是字符串
元组是不可变序列
列表是可变序列
字符串是不可变序列,每当被修改时,会重新创建一个对象并赋新值
序列是对象,可以通过对应的类的构造方法调用

序列的通用操作:

python本质_python本质


可变序列的通用操作

python本质_内存空间_02


各种序列的构造:

python本质_python_03

l1 = list((1, 2, 3))
l2 = [1, 2, 3]
l3 = [x * 2 for x in range(1, 100, 2) if x % 5 == 0]

print(l1)
print(l2)
print(l3)

python本质_内存空间_04

t1 = tuple(range(2, 100, 2))
t2 = (2, 4, 6, 8, 10)
print(t1)
print(t2)

映射

假设我有一个数组,现在我要把一些键值对数据存入数组中,而且要求能够通过键快速查找到对应的值,我的解决方案如下:
通过某种法则,为每一个键找到一个对应的整数值,并且尽可能让不同的键对应不同的整数,然后,我就把键值对存入数组索引为该整数值的位置,那么,我只要按照相同法则就能根据键值快速计算出键值对在数组的位置了
我们把这个数组称为hash table, 把这个固定的法则称为hash函数
字典的本质也是一个hash table

python本质_java_05

k = ['name', 'age', 'password']
v = ['张三', 25, '123456']
d1 = dict(zip(k, v))
print(d1)

保留字

python中具有特殊用途,不能用作变量名的标识符称为保留字
包括:
条件:if
循环:while, for
中断:continue, break

a = 10
b = 20
'''
没有括号,不要忘了缩进
'''
if a > b:
    print(a)
elif b > a:
    print(b)
else:
    print(a + b)
i = 0
while i <= 10:
    '''
    不需要括号
    '''
    print(i)
    i += 1
s = 0
for i in range(1,100,2):
    s += i
print(s)

变量

为了便于使用,我们给每一个对象的内存空间取一个别名,称为变量名,也称为引用,标识符
变量位于内存中的栈区,实际储存着对象的地址,通过变量就能访问到对象
不需要人为指定变量的类型,python解释器会自动匹配变量所指对象的类型

# 用赋值符号,将引用和对象关联起来
a = 3
b = "hello"
c = 3.14
d = True

t1 = (1, 'a', True)
l1 = [1, 'a', True]
d1 = {'name': '张三', 'age': 23, 'job': 'teacher'}

函数

函数也是对象,所有方法对应的类是function类,function类中的call方法决定了该类的对象能通过括号接收参数,并执行相关逻辑
创建函数用def,意为define(定义)
用冒号和缩进代替大括号
没有权限和返回值类型修饰符

'''
函数:
创建,调用
'''
# 1.创建函数对象
def add(num1,num2):
    return num1 + num2

# 2.调用函数
add(1,2)

类是对象的模板,通过类可以创建多个有共性又有区别的对象,这些对象共享着类的方法,却有着不同的属性值
类用关键字class创建,需要重写初始化方法init来为对象的属性赋值
对象的创建由new方法自动执行,self就是创建好的对象

'''
类:
创建,使用
'''
# 1.创建类
class Student:
    status = '1'

    def __init__(self, name, age):
         = name
        self.age = age

    def __str__(self):
        print("{0}的年龄是:{1}岁".format(, self.age))

# 2.使用类的构造方法创建对象
s1 = Student("张三", 25)
s1.__str__()

三大特性

封装,继承和多态是python的三大特性,要掌握的知识点如下:
封装:私有属性
继承:调用父类的属性,在子类中扩展新的属性
多态:继承父类,并且重写父类的方法

'''
继承
在类名后面加上括号,指定要继承的父类,可以继承多个
'''
class Animal:
    def __init__(self, name):
         = name
        
    def print_name(self):
        print("该动物的名字是{0}".format())

class Dog(Animal):
    def __init__(self, name, age):
        Animal.__init__(self, name)
        self.age = age

规范

python具有与众不同的代码规范要求,这是一名合格的python程序员必须要遵守的:
缩进:四空格为一个缩进,相邻层级的代码只能出现一个缩进,不是从属关系的代码,禁止使用缩进
分号:禁止使用分号
空格:逗号后要空格,运算符两边要空格
空行:类和方法之后要空两行,代码的最后要留一行