python基础复习

python基础复习

解释型语言和编译型语言

# 主流的编译型语言
C语言:编译型语言,跨平台运行
java:编译型语言,一处编码,处处运行(编译过程:将java源代码编译成字节码文件.class,---不能运行在操作系统上---jvm(Java虚拟机))
go:编译型,跨平台编译(windows平台可以编译出mac平台的可执行文件),所有go代码打成一个可执行文件
    
# 解释型语言
python: 强类型动态语言
js:只能在浏览器中运行,nodejs
php:web开发

基本数据类型

# type与object的关系
(1)python中一切皆对象,类也是一个对象
(2)python中所有的类(除了object类)都继承于object

基于以上的两点,我们可以得到以下的结论:
(1)type和object的类都是type;
(2)type类是继承于object

深浅拷贝

# 一切皆对象的好处
不同类型的变量之间可以相互赋值,如a=100,a='lxx'
其本质上,因为变量指向的是一个内存地址,因此会出现深浅拷贝的问题

from copy import copy
from copy import deepcopy

beast = ['lxx','egon','jason']
person = beast # 直接赋值
print(beast is person) # True

u1 = ['egon',[18,'female'],['dbj','hecha']]
u2 = copy(u1)
u2[1][1] = 'male'
u2[0] = 'alex'
print(u2) # ['alex', [18, 'male'], ['dbj', 'hecha']]
print(u1) # ['egon', [18, 'male'], ['dbj', 'hecha']]

# 浅拷贝只拷贝列表的父对象的内存地址,而不会拷贝子对象的内存地址

u1 = ['egon',[18,'female'],['dbj','hecha']]
u2 = deepcopy(u1)
u2[1][1] = 'male'
u2[0] = 'alex'
print(u2)  # ['alex', [18, 'male'], ['dbj', 'hecha']]
print(u1)  # ['egon', [18, 'female'], ['dbj', 'hecha']]

可变数据类型与不可变数据类型

#字典,列表,集合   可变类型
#数字,字符串,元组  不可变类型
# 字典的key必须用不可变类型,可以hash    
# 看一下这篇博客
https://www.cnblogs.com/xiaoyuanqujing/articles/12008689.html
# python中的参数传递是值传递还是引用传递?
python中参数传递都是copy一份传递过去,由于一切皆对象,传过去,都是地址,python中区分可变和不可变类型,可变类型在函数中修改会影响原来的,不可变类型,不会影响原来的

字符编码

# 计算机的计量单位:
bit比特位:0或者1的一个小格
8个bit位是一个byte,一个字节
1024个字节---》1kb
1024kb---》1mb
1024mb---》1gb

1个字节---》2的8次方中变化,就可以表示出所有的字符(数字,字母,标点符号)

计算机到了中国---》中国汉字--》gbk编码
但是到了不同国家,不同国家有不同国家编码方式,就会出现乱码问题

Unicode编码统一了,字符和数字的对应关系

utf-8:目前主流的编码方式
utf-16

需要说清楚:assic码,gbk,unicode,utf-8

闭包函数

1 定义在函数内部
2 对外部作用域有引用

函数是一等公民:函数可以赋值给一个变量
# 装饰器是闭包函数的典型应用
# python中有装饰器语法糖  @

def wrapper(func):
    def inner(*args,**kwargs):
        # 代码
        res=func(*args,**kwargs)
        # 代码
        return res
    return inner

# def a():
#     print("xxx")
   
# 没有语法糖 
# a=wrapper(a)
# a()

# 有语法糖
# @wrapper()
def a():
    print("xxx")
    
# 面向切面编程 AOP
# OOP 面向对象编程
原文地址:https://www.cnblogs.com/surpass123/p/13224755.html